虽然spring本身是可以直接使用jndi来进行获取一些对象,但是在和weblogic集成的时候往往还是容易出现问题(在web应用的时候出现问题的可能性不大,因为container已经做了很多事情了.)但是在ide或者其他的应用环境下(不同的jvm的时候),通常找不到provider_url等属性造成无法找到jndi.
修改配置文件如下:
<!-- 通过jndi的方式来调用datasource,即使不一定是在j2ee环境中也可以正常使用默认情况下,如果没有指定,"java:comp/env/"将放在后面jndi名称前面
-->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">??
??? <property name="jndiName">
???? <value>jdbc/myDatasource</value>
?? </property>
<!-- 如果你不想使用 'java:comp/env/'前缀的话请设置下面的值为true, 默认值为false -->
?? <property name="resourceRef">
??????? <value>false</value>
</property>
<property name="jndiEnvironment">
<props>
???? <!-- The value of Context.PROVIDER_URL -->
???? <prop key="java.naming.provider.url">t3://localhost:7001</prop>
?<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory
??? </prop>
</props>
</property>
</bean>
注意在设置的时候由于不在同一个jvm里面,所以一定要设置provider.url和factory.initial的属性值,否则会出现NoInitialContextException的异常出现.
此外如果和其他的应用服务器集成的话可能不只是要设置上面的两个属性,还要设置相关的其他属性。详细情况参考:javax.naming.Context类的说明文档。http://java.sun.com/j2se/1.4.2/docs/api/javax/naming/Context.html
其中设置的:
<property name="jndiEnvironment">
??? <props>
??????? <!-- The value of Context.PROVIDER_URL -->
?????? <prop key="java.naming.provider.url">t3://localhost:7001</prop>
???? <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory
???? </prop>
?? </props>
</property> 实际上就是设置Context初始化的时候设置的Properties属性。
发表于 2005年1月28日 12:43?
各种应用服务器的不同的properties集合:
websphere:
java.naming.provider.url->iiop://websphere.machine.domain.com:900
java.naming.factory.initial ->com.ibm.websphere.naming.WsnInitialContextFactory
java.naming.factory.url.pkgs ->com.ibm.ws.naming
org.omg.CORBA.ORBClass->com.ibm.rmi.iiop.ORB
org.omg.CORBA.ORBSingletonClass->com.ibm.rmi.corba.ORBSingleton
javax.rmi.CORBA.UtilClass->com.ibm.rmi.javax.rmi.CORBA.Util
javax.rmi.CORBA.StubClass->com.ibm.rmi.javax.rmi.CORBA.StubDelegateImpl
javax.rmi.CORBA.PortableRemoteObjectClass->com.ibm.rmi.javax.rmi.PortableRemoteObject
weblogic:
java.naming.factory.initial -> weblogic.jndi.WLInitialContextFactory
java.naming.provider.url -> t3://localhost:7001
jboss:
ava.naming.factory.initial ->org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs->org.jboss.naming.client
java.naming.provider.url ->jnp://10.0.0.18:1099
sunone IMQ ldap:
java.naming.provider.url -> ldap://localhost:389/dc=yusong,dc=com
java.naming.factory.initial -> com.sun.jndi.ldap.LdapCtxFactory
sunone Application Server:
java.naming.provider.url -> iiop://192.168.0.34:3700
java.naming.factory.initial -> com.sun.jndi.cosnaming.CNCtxFactory
oracle oc4j:
java.naming.factory.initial->com.evermind.server.ApplicationClientInitialContextFactory
java.naming.provider.url->ormi://localhost/bmpapp