gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:40:33 27 4
gpt4 key购买 nike

我正在将 WAR 部署到 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"/>
...

从我的 Java 代码中,我尝试通过以下操作获取 DataSource:

InitialContext cxt = new InitialContext(); 
DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/sybase/somedb" );

上面的代码完全有效,当我部署到 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 看到或解析。

有许多替代方案,包括 is there a standard way to define a JDBC Datasource for Java EE containers 的解决方案.

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

关于尝试查找在 context.xml 中声明的资源时出现 javax.naming.NameNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com