Jboss6 远程调用ejb问题

1、问题描述

由于项目的需要,需要jboss6访问不同应用服务提供的远程ejb,但在初始化jndi时会报以下错误:

javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory org.jboss.naming.remote.client.InitialContextFactory 
from classloader ModuleClassLoader 

该错误在boss6上应该很常见


2、解决方案分析

InitialContextFactory 无法初始化,查询了相关jboss6的开发文档,jboss6访问远程ejb的方式与jboss4不同,jboss4 采用以下代码实现:

Properties properties = new Properties();
//		properties.setProperty("java.naming.factory.initial", JNDIWorkerHelper.JNDI_INITIAL);
//		properties.setProperty("java.naming.factory.url.pkg", JNDIWorkerHelper.JNDI_PKG);
//		properties.setProperty("java.naming.provider.url", jndiURL);
//		logger.info(properties);
//		JndiWorker.getInstance(properties);

使用JndiWorker 初始化,但该方式在jboss6上不使用。那jboss6如何使用,请看下面的步骤:

1)查看相关文档发现,在jboss6上我们必须添加远程ejb的依赖如下

        
            org.jboss.jboss-eap.client
            jboss-client
            6.2.0.GA
            provided
        

2) 初始化jndi 

	Properties jndiProps = new Properties();
//			jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
			jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, org.jboss.naming.remote.client.InitialContextFactory.class.getName());
			jndiProps.put(Context.PROVIDER_URL, jndiURL);
//			jndiProps.put(Context.SECURITY_PRINCIPAL, "myusername");
//			jndiProps.put(Context.SECURITY_CREDENTIALS, "mypassword");
//			jndiProps.put("jboss.naming.client.ejb.context", true);
			 Context ctx =new InitialContext(jndiProps);
使用Context 来lookup 远程ejb service


3) 需要在jboss-deployment-structure.xml 添加模块声明

    
模块这里仅列出系统需要的模块,对于远程ejb相关的jar包与应用业务相关,需要哪些jar就需要在这个module里添加声明。


做完上面的步骤才能真正的访问ejb service


3、总结

在jboss6上调用远程ejb 与jboss4 不同,且是不能兼容的,所以就会遇到我的问题,仅此抛砖引玉,希望给遇到同样类似问题的同学一些意见。





你可能感兴趣的:(javaee)