NameNotFoundException:仅在从Eclipse Kepler发布而不是Indigo时才尝试查找'jdbc'

use*_*055 7 java eclipse spring weblogic12c

我可以使用oepe 12.1.1.1.1将我的web-app从Eclipse Indigo 3.7.2发布到Oracle Weblogic 12c(12.1.1)AdminServer

但是,使用oepe 12.1.2.2导入到Eclipse Kepler 4.3.1中的完全相同的web-app无法使用以下(相当完善的例程)异常发布,并且我试图找出原因?...

NameNotFoundException:尝试查找'jdbc.oraclexe'时没有找到子上下文'jdbc'.解决 ''; 剩下的名字'jdbc/oraclexe']; 链接剩余名称:'jdbc/oraclexe'

Weblogic 12c数据源肯定是可用的,我必须假设它正确配置,因为应用程序部署并运行时从Indigo发布没有任何问题.

我还假设applicationContext.xml中的映射,web.xml和weblogic.xml都是正确的,因为从Indigo发布时没有问题.映射如下......

SRC \主\ web应用\ WEB-INF \弹簧\ applicationContext.xml中

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
 <property name="jndiName" value="java:comp/env/jdbc/oraclexe" />
</bean>
Run Code Online (Sandbox Code Playgroud)

SRC \主\ web应用\ 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>
Run Code Online (Sandbox Code Playgroud)

建立\ weboutput\WEB-INF\weblogic.xml中

<resource-description>
 <res-ref-name>jdbc/oraclexe</res-ref-name>
 <jndi-name>oraclexe</jndi-name>
</resource-description>
Run Code Online (Sandbox Code Playgroud)

我想知道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服务器?

use*_*055 6

经过一周左右的试验和错误/消除过程后,我设法解决了这个问题,并更好地理解了必要的映射.正如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>
Run Code Online (Sandbox Code Playgroud)

但是,java:comp/env/jdbc/oraclexe的jndiName值映射到web.xml res-ref-name值jdbc/oraclexe(而不是我错误地假设的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>
Run Code Online (Sandbox Code Playgroud)

...然后映射到Weblogic控制台JDBC数据源JNDI名称的映射名称值oraclexe.

weblogic.xml中的资源描述节点现在已完全省略,因为在此特定配置中未引用节点.