Servlet容器对它提供的数据源javax.sql.DataSource对象使用了JNDI技术绑定了一个name值。

    servlet容器中的JNDI:在javax.naming包中提供了Context接口,它有bind(String name,Object object)和lookup(String name)两个方法来绑定和获得对象。servlet容器把DataSource作为一种资源来处理,生成DataSource的工厂为org.apache.commons.dbcp.BasicDataSourceFactory.

    知道了servlet容器怎么提供数据源对象后,要如何使用??

    1.首先,配置数据源。在META-INF中配置context.xml。

 <Context  reloadable="true" >
  <Resource name="指定要绑定的名字" auth="指定有谁来管理(Container或Application)"  type="javax.sql.DataSource"
     maxActive="100" maxIdle="30" maxWait="10000"
     username="dbuser" password="1234"
     driverClassName="com.mysql.jdbc.Driver"
     url="jdbc:mysql://localhost:3306/BookDB?useUnicode=true&amp;characterEncoding=GB2312"/> 
</Context>

maxActive和maxIdle分别指定活动和空闲状态的连接的数目。maxWait指定空闲的最大时长。

 

    2.在web.xml中配置<resource-ref>

<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/BookDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

     3.在java程序中访问数据源

       Context ctx = new InitialContext();

       Context envCtx = (Context) initCtx.lookup("java:comp/env");

       DataSource ds = (DataSource)enctx.lookup(JNDI中绑定的name值);

       Conntection con = ds.getConnection();

      ....

另:加了java:comp/env则需要在web.xml中配置<resource-ref>元素java:comp/env是环境命名上下文(environment naming context(ENC)),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题,也是为了提高EJB或者J2EE应用的移植性。ENC是一个引用,引用是用于定位企业应用程序的外部资源的逻辑名。引用是在应用程序部署描述符文件中定义的。在部署时,引用被绑定到目标可操作环境中资源的物理位置(JNDI名)。使用ENC是把对其它资源的JNDI查找的硬编码解脱出来,通过配置这个引用可以在不修改代码的情况下,将引用指向不同的EJB(JNDI)。 在J2EE中的引用常用的有:    

---------JDBC 数据源引用在java:comp/env/jdbc 子上下文中声明

---------JMS 连接工厂在java:comp/env/jms 子上下文中声明

---------JavaMail 连接工厂在java:comp/env/mail 子上下文中声明

---------URL 连接工厂在 java:comp/env/url子上下文中声明

 

 

还有,注意要把数据库驱动器的jar包放在tomcat下的lib中

posted on 2011-04-22 22:50  星^_^風  阅读(503)  评论(0编辑  收藏  举报