在TomEE中使用context.xml中的JDBC数据源

时间:2013-10-15 19:30:05

标签: java tomcat jdbc tomee

TomEE是一个很棒的项目,结合了Tomcat的轻量级体验和Java EE功能。我在context.xml中声明了许多JDBC数据源,但是当我想通过JNDI使用该数据源时,我得到了一个异常。那么如何才能在TomEE

中的context.xml中声明JDBC数据源

我在context.xml中声明的数据源

 <Resource auth="Container" 
        name="local_jdbc_db"  
        type="javax.sql.DataSource" 
        driverClassName="com.mysql.jdbc.Driver"  
        url="jdbc:mysql://localhost:3306/mydb" 
        username="user" 
        password="pass"      /> 

从JNDI获取数据源的代码

Context contextoInicial = new InitialContext();
Context contexto = (Context) contextoInicial.lookup("java:comp/env");
DataSource ds= (DataSource) contexto.lookup("local_jdbc_db");

3 个答案:

答案 0 :(得分:3)

更新只是对于那些与TomEE有这些罕见问题的人:我尝试在context.xml中创建数据源并在TomEE JAX-RS 1.5.0版本中部署而没有运气,它总是抛出空指针异常和数据源名称未找到。最近我尝试使用TomEE JAX-RS版本1.6.0:我在context.xml中创建了我的数据源并使用此代码创建了一个简单的servlet

     Context initContext = new InitialContext();
     Context envContext = (Context) initContext.lookup("java:/comp/env");
     DataSource dataSource = (DataSource) envContext.lookup("jdbc_northwind");
     try (Connection conn = dataSource.getConnection(); 
           Statement s = conn.createStatement();
           ResultSet rs = s.executeQuery("select * from customers")) {
           while (rs.next()) {
                out.print(rs.getString("CompanyName"));
                out.print("<br>");
           }         
       } 

...启动服务器和Hooray !!!!它显示了我的结果!,但我有点失望,因为当我重新部署应用程序时,它向我显示旧的异常(未找到DataSource,空指针异常)所以我尝试了最后一件事:在web.xml中注册数据源

  <resource-ref>
        <res-ref-name>jdbc_northwind</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref> 

然后重新启动服务器并...它工作,重新部署应用程序并且工作得非常好!但是这种行为很奇怪:在Tomcat中我从未在web.xml中声明我的数据源,我对数据源没有任何问题。也许是个bug?

更新:确认是一个错误,似乎它将被解决为TomEE 1.6.1 更新2:在TomEE 1.7.0中解决

答案 1 :(得分:2)

你看过文件了吗? http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html此外,您能否提供您正在接收的例外情况?

答案 2 :(得分:0)

由于我花了很多时间解决这个问题,所以最终在阅读有关该主题的手册(RTFM)的15分钟内找到了答案:http://tomee.apache.org/configuring-datasources.html

tomee.xml中用于数据库资源的正确JNDI命名空间是:“ java:openejb / Resource /..."

只要把这个留在这里,以防其他人来寻找这个问题。

当我刚读完手册时,我不能强调太多的时间在此上。哦:-)