总结下远程调用ejb3的几种方式:
部署在jboss服务器上的ejb3应用程序:
/*设置属性信息*/
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
props.put(Context.PROVIDER_URL, "jnp://localhost:1099");//部署在jboss服务器上的应用使用jnp协议
props.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
try {
InitialContext ctx=new InitialContext(props);
/* 获得部署在Jboss服务器上的ejb3应用接口实例*/
IRmiExampleSerivce rmiSerivce = (IRmiExampleSerivce)ctx.lookup("IRmiExampleSerivceImpl/remote"); //不同的服务器jndi名称不一样
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
部署在weblogic服务器上的ejb3应用:
/*设置属性信息*/
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");//部署在weblogic服务器上的应用使用t3协议
props.put("java.naming.security.principal", "weblogic");//用户名
props.put("java.naming.security.credentials", "weblogic");//密码
try {
InitialContext ctx=new InitialContext(props);
/* 获得部署在Jboss服务器上的ejb3应用接口实例*/
IRmiExampleSerivce rmiSerivce = (IRmiExampleSerivce)ctx.lookup("IRmiExampleSerivce#com.rmi.IRmiExampleSerivce"); //不同的服务器jndi名称不一样
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
当然属性信息可以放在一个jndi.properties属性文件中,如:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
当然该文件放在src根目录下,然后我们在程序中就无需创建Properties的实例并设置相关熟悉,可以直接实例化InitialContext,调用默认的实例化构造函数,会默认查找src根目录下的jndi.properties属性文件。
当然在实际开发应用中不会直接通过以上方式来直接调用远程ejb3服务,在spring框架中可以通过JndiObjectFactoryBean来获得远程ejb3的实例,例如:
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.provider.url">t3://127.0.0.1:7001</prop>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.security.principal">weblogic</prop>
<prop key="java.naming.security.credentials">weblogic</prop>
</props>
</property>
</bean>
<bean id="rmiExampleSerivce" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate"/>
<property name="jndiName" value="IRmiExampleSerivce#com.rmi.IRmiExampleSerivce"></property>
</bean>