簡體   English   中英

嘗試查找context.xml中聲明的資源時,javax.naming.NameNotFoundException

[英]javax.naming.NameNotFoundException when trying to lookup resource declared in context.xml

我正在將WAR部署到JBoss EAP7。在我的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無法看到或解析它。

有很多替代方法,包括解決方案,該方法是否存在為Java EE容器定義JDBC數據源的標准方法

如果您需要RedHat支持,他們可能會建議您使用服務器管理工​​具(例如管理控制台或jboss-cli.sh創建數據源。 這使您的應用程序與數據源定義脫鈎,以便您可以指定環境特定的設置(例如池大小和主機名),而無需重新打包WAR.file。 此方法還要求您與應用程序分開部署JDBC驅動程序jar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM