您的位置:首页 > 编程语言 > Java开发

JNDI-( Java Name and Driectory Interface)

2014-03-08 15:57 274 查看


       JNDI– Java Name and Driectory Interface。

       JNDI主要用于在容器中配置某些资源,让所有项目可以使用。

       JNDI可以提供:

              1:数据库连接池。

                     自定义连接池

                     第三方连接池

                                   Dbcp

                                   C3p0

                     JNDI

              2:邮件服务器定义。

              3:加载任意的类,让所有项目都可以使用。

       JNDI:[定义在tomcat容器中,所有项目必须要通过查找的方式获取这个服务

                     Javax.naming.Context 环境(ENV)上下文。

                     它的一个了类:InitialContext   

 

 

 

Tomcat支持JNDI,到tomcat的docs查看说明:

 

配置JNDI:

由于 JNDI需要在server.xml中进行配置,所以就不用发布项目。

第一步:在tomcat/conf/server.xml中配置:

<Context path="/aaa" docBase="D:/programfiles/MyEclipse10/wk3/day25/WebRoot">
<Resource name="jdbc/mysql" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:///db909?characterEncoding=UTF8"
username="root" password="1234" maxActive="10" maxIdle="30"
maxWait="-1"/>
</Context>


name为JNDI的名字
auth JNDI的拥有者

第二步:将mysql-connection.jar放到tomcat/lib目录下

第三步:在java项目中引用

在代码中直接查询这个jndi:

第一种获取的方式:

public class TwoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

try {
//1声明Context上下文查找对象
Context ctx = new InitialContext();
//第二步:查找apache环境
Context ctx1 = (Context) ctx.lookup("java:/comp/env");
//第三步:从环境中找jNDI
Object obj = ctx1.lookup("jdbc/mysql");
System.err.println(obj);
//第四步:测试连接是否成功
DataSource ds = (DataSource) obj;
Connection con = ds.getConnection();
System.err.println(">>"+con);
} catch (Exception e) {
e.printStackTrace();
}

}
}

第二种:

try {
//1声明Context上下文查找对象
Context ctx = new InitialContext();
//第二步:查询
Object obj = ctx.lookup("java:/comp/env/jdbc/mysql");
System.err.println(obj);
DataSource ds = (DataSource) obj;
Connection con = ds.getConnection();
System.err.println(">>"+con);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from users");
while(rs.next()){
System.err.println(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
}

配置的方式:



标准的池:

public class DatasourceUtils {
private  static DataSource ds;
static{
try{
Context ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/mysql");
}catch(Exception e){
e.printStackTrace();
}
}
public static DataSource getDs(){
return ds;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: