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的依赖如下

        <dependency>
            <groupId>org.jboss.jboss-eap.client</groupId>
            <artifactId>jboss-client</artifactId>
            <version>6.2.0.GA</version>
            <scope>provided</scope>
        </dependency>

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 添加模块声明

    <module name="org.jboss.remote-naming" />
模块这里仅列出系统需要的模块,对于远程ejb相关的jar包与应用业务相关,需要哪些jar就需要在这个module里添加声明。


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


3、总结

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值