【发布时间】:2015-05-19 12:14:40
【问题描述】:
我的 web.xml 中有以下配置
<resource-ref id="ResourceRef_1234567890">
<res-ref-name>jdbc/pcbDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Application</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
当我部署我的应用程序时,我收到以下错误。
16:29:57,745 错误 [org.jboss.as.controller.management-operation] (HttpManagementService-threads - 6) JBAS014612: 操作 ("deploy") 失败 - 地址: ([("deployment" => " APP-5.3.ear")]) - 故障描述:{"JBAS014771: 缺少/不可用依赖项的服务" => [ "jboss.naming.context.java.module.\"App-5.3\".\"WebArchive-5.1\".env.jdbc.pcbDB 丢失 [jboss.naming.context.java.jboss.resources.jdbc.pcbDB ]" ]}
随后发生回滚,
16:29:57,777 错误 [org.jboss.as.server] (HttpManagementService-threads - 6) JBAS015870:部署“APP-5.3.ear”的部署已回滚,并显示以下失败消息: {“JBAS014771:缺少/不可用依赖项的服务”=> [ "jboss.naming.context.java.module.\"App-5.3\".\"WebArchive-5.1\".env.jdbc.pcbDB 丢失 [jboss.naming.context.java.jboss.resources.jdbc.pcbDB ]" ]}
我在standalone.xml 中创建了相应的数据源。从 Web 控制台测试连接成功....
Name: pcbdb
JNDI: java:/jdbc/pcbDB
这是我在standalone.xml中的数据源定义.....
<!--Here is datasource config.... As I had many spaces in xml config I couldn't add it as code..... Now I have copied it by the char comes with tilt ~ -->
<datasource jndi-name="java:/jdbc/pcbDB" pool-name="pcbdb" enabled="true">
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)(SERVER=DEDICATED)))</connection-url>
<driver>com.oracle</driver>
<pool>
<min-pool-size>3</min-pool-size>
<max-pool-size>5</max-pool-size>
</pool>
<security>
<user-name>pcbdb</user-name>
<password>passwd</password>
</security>
<validation>
<exception-sorter class-name="org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
</timeout>
</datasource>
请给出解决方案.... 同样,我也有 context.lookup。好像是initCtx.lookup("java:comp/env/jdbc/pcbDB");……这样对吗……?
【问题讨论】:
-
能否请您添加您的实际数据源定义?其次,你可能不想要
<res-auth>Application</res-auth> <res-sharing-scope>Shareable</res-sharing-scope>。相反,它应该是<res-auth>Container</res-auth>。容器将找出 auth 方法和连接池。不需要在应用程序中这样做,实际上违背了目的。 -
我已经添加了数据源定义,在帖子中......
-
initCtx.lookup("java:comp/env/jdbc/pcbDB");成功我认为....但我不太确定,因为我的整体部署失败.... -
好的 - 它必须在您的应用程序包装中。这就像从旧版本的 JBoss 迁移到新版本的应用程序吗?您很可能拥有希望数据源引用
java:comp/env/jdbc/pchDB的部署描述符。此线索在错误消息 -jboss.naming.context.java.module.\"App-5.3\".\"WebArchive-5.1\".env.jdbc.pcbDB is missing中提供。最后,您应该将<res-auth>Application</res-auth>更改为<res-auth>Container</res-auth>,因为您在数据源定义中定义了用户 ID/密码。 -
我尝试将其部署为,- 通过评论整个
<resource-ref>部分。让我尝试将其从Application更改为Container的选项。它不是从 JBoss 低版本到高版本的迁移。而是从 Websphere 迁移到 JBoss。关于这些,-resource-ref我有ibm-web-bnd.xmi要迁移到 JBoss。当我对此进行调查时,据说喜欢忽略。我也有ibm-web-ext.xmi。也许我应该将这些作为另一个问题提交。但这是我的场景。
标签: database jboss war jndi web.xml