mysql – 如何在JAX-RS(Jersey)应用程序中使用JNDI资源?

我正在尝试通过Tomcat JNDI资源建立与数据库的连接.我今天一直在看很多文章,我似乎无法找到答案.

在我的server.xml中,我有:

  <GlobalNamingResources>
  <Resource name="jdbc/MyDB" auth="Container" type="javax.sql.DataSource"
      maxActive="100" maxIdle="30" maxWait="10000"
      username="tomcat" password="...."
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost:3333/tomcat?autoReconnect=true"/>

  .....
  </GlobalNamingResources>

在我的Web服务中,我尝试使用以下命令访问资源:

    InitialContext ctx = new InitialContext();
    DataSource data = (DataSource)ctx.lookup("java:comp/env/jdbc/MyDB");
    Connection conn = data.getConnection();

当我运行代码时,我得到以下异常:

Nov 2, 2011 1:06:20 PM com.sun.jersey.spi.container.ContainerResponse  mapMappableContainerException
SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
...

我在我的web-app的lib和我的tomcat lib中都有最新的mysql-connector-java-5.1.18-bin.jar.

能帮我解决这个问题吗?

解决方法:

我使用此代码,只使用资源的名称,它的工作原理如下:

private Connection getConnection(){
      final Context ctx = new InitialContext();
      final DataSource ds = (DataSource) ctx.lookup("jdbc/MyDB");
      if (ds != null)
      {
             return ds.getConnection();
      }
      else
      {

      }
}
上一篇:java – LDAP服务器更新和事件通知


下一篇:java – Tomcat中的JNDI配置