我可以使用 oepe 12.1.1.1.1 从 Eclipse Indigo 3.7.2 将我的网络应用程序发布到 Oracle Weblogic 12c (12.1.1) AdminServer
但是,使用 oepe 12.1.2.2 导入到 Eclipse Kepler 4.3.1 中的完全相同的 web 应用程序无法发布,并出现以下(相当常见的)异常,我正在尝试找出原因?...
NameNotFoundException: While trying to lookup 'jdbc.oraclexe' didn't find subcontext 'jdbc'. Resolved ''; remaining name 'jdbc/oraclexe']; Link Remaining Name: 'jdbc/oraclexe'
Weblogic 12c 数据源绝对可用,我必须假设其配置正确,因为应用程序在从 Indigo 发布时部署和运行没有问题。
我还假设 applicationContext.xml、web.xml 和 weblogic.xml 中的映射是正确的,因为从 Indigo 发布时也没有问题。映射如下...
src\main\webapp\WEB-INF\spring\applicationContext.xml
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/oraclexe" />
</bean>
src\main\webapp\WEB-INF\web.xml
<resource-ref>
<description>Oracle Weblogic Connection Pool (oraclexe)</description>
<res-ref-name>jdbc/oraclexe</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<mapped-name>jdbc/oraclexe</mapped-name>
</resource-ref>
build\weboutput\WEB-INF\weblogic.xml
<resource-description>
<res-ref-name>jdbc/oraclexe</res-ref-name>
<jndi-name>oraclexe</jndi-name>
</resource-description>
我想知道 weblogic.xml 是否在部署期间不可用(即它没有被复制到 src\main\webapp\WEB-INF 文件夹)而不是 jndiName/resource- 之间的映射问题ref/res-ref-name 自己?我试过将 weblogic.xml 直接放在 src\main\webapp\WEB-INF 文件夹中,但我得到了同样的异常。
我唯一的其他想法是 Indigo oepe 12.1.1.1.1 很高兴发布到 Weblogic 12.1.1 但 Kepler oepe 12.1.2 不是,我应该发布到 Weblogic 12.1.2 服务器?
最佳答案
经过一周左右的反复试验/排除过程后,我设法解决了这个问题,并对必要的映射有了更好的理解。正如 Elliott 所怀疑的那样,这是 JNDI 查找的问题。当它从 Indigo 发布到 weblogic 12.1.1 时(无意中)按预期工作(我仍然不确定为什么会这样)这一事实使情况更加复杂。
我最初尝试解决此问题的重点是 weblogic.xml 中的映射。当我发布到 weblogic 服务器时,我错误地假设在解析数据源时引用了它。事实证明情况并非如此,我的配置不需要 weblogic.xml 资源描述。
applicationContext.xml 保持不变...
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/oraclexe" />
</bean>
但是,java:comp/env/jdbc/oraclex 的 jndiName 值映射到 web.xml res-ref-name 值 jdbc/oraclex(而不是我错误地假设的 weblogic.xml res-ref-name)...
web.xml 映射名称已修改...
<resource-ref>
<description>Oracle Weblogic console JDBC Data Source</description>
<res-ref-name>jdbc/oraclexe</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<mapped-name>oraclexe</mapped-name>
</resource-ref>
...然后是映射到 Weblogic 控制台 JDBC 数据源 JNDI 名称的映射名称值 oraclex。
weblogic.xml 中的资源描述节点现在已被完全省略,因为它在此特定配置中未被引用。
关于java - 名称未找到异常 : While trying to lookup 'jdbc' only when publishing from Eclipse Kepler but not Indigo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355945/