尝试查找context.xml中声明的资源时,javax.naming.NameNotFoundException

尝试查找context.xml中声明的资源时,javax.naming.NameNotFoundException,java,tomcat,jboss,Java,Tomcat,Jboss,我正在为JBoss EAP 7部署一场战争。在我的WAR的META-INF/context.xml文件中,我有以下内容: <Context unloadDelay="500000"> <Resource name="jdbc/sybase/somedb" auth="Container" type="javax.sql.DataSource" driverClassName="net.sourceforge.j

我正在为JBoss EAP 7部署一场战争。在我的WAR的
META-INF/context.xml
文件中,我有以下内容:

<Context unloadDelay="500000">
    <Resource name="jdbc/sybase/somedb"
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="net.sourceforge.jtds.jdbc.Driver"
          url="jdbc:jtds:sybase://localhost:12501/somedb"
          username="username" password="secret"
          validationQuery="select 1"              
          maxActive="2" maxIdle="0" maxWait="-1"/>          
...
当我部署到Tomcat 8,而不是部署到JBoss EAP 7时,上面的代码确实有效,并且在上下文中找到了名称。在后一种情况下,我得到:

Caused by: javax.naming.NameNotFoundException: comp/env/jdbc/sybase/somedb -- service jboss.naming.context.java.comp.env.jdbc.sybase.somedb
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:106)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
at org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:235)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at javax.naming.InitialContext.lookup(InitialContext.java:417)

我做错了什么?如何解决上述问题?

您的
META-INF/context.xml
文件是一个Tomcat部署描述符(未由Java EE规范定义),因此JBoss EAP 7不会看到或解析它

有许多替代方案,包括解决方案


如果您要求RedHat支持,他们可能会建议您使用服务器管理工具(如管理控制台或
jboss cli.sh
)创建数据源。这将使您的应用程序与数据源定义分离,以便您可以指定特定于环境的设置(例如池大小和主机名),而无需重新打包WAR.file。此方法还要求您将JDBC驱动程序jar与应用程序分开部署。

您的
META-INF/context.xml
文件是一个Tomcat部署描述符(未由Java EE规范定义),因此JBoss EAP 7不会看到或解析它

有许多替代方案,包括解决方案

如果您要求RedHat支持,他们可能会建议您使用服务器管理工具(如管理控制台或
jboss cli.sh
)创建数据源。这将使您的应用程序与数据源定义分离,以便您可以指定特定于环境的设置(例如池大小和主机名),而无需重新打包WAR.file。此方法还要求您将JDBC驱动程序jar与应用程序分开部署

Caused by: javax.naming.NameNotFoundException: comp/env/jdbc/sybase/somedb -- service jboss.naming.context.java.comp.env.jdbc.sybase.somedb
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:106)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
at org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:235)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at javax.naming.InitialContext.lookup(InitialContext.java:417)