EJB3方法调用的错误及其处理

在WildFly AS 10上部署EJB服务,在Eclispe中运行单元测试,遇到错误及其解决方法。


异常一:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
	at javax.naming.InitialContext.lookup(InitialContext.java:417)

解决办法:将%WildFly%/bin/jboss-client.jar加入到buildclasspath


异常二:

java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
	at org.jboss.ejb.client.Logs.<clinit>(Logs.java:53)
	at org.jboss.ejb.client.naming.ejb.EjbNamingContext.createEjbProxy(EjbNamingContext.java:188)
	at org.jboss.ejb.client.naming.ejb.EjbNamingContext.lookup(EjbNamingContext.java:176)
	at javax.naming.InitialContext.lookup(InitialContext.java:417)

运行环境如下:

JDK 1.8

来自WildFly的jboss-client.jar

log4j-1.2.jar

...

经过排查,发现classpath下还有来自JBoss AS的jbossall-client.jar,该文件中包含了过时org.jboss.logging.Logger类,导致异常。

将其从classpath中删除即可。



异常三:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
	at javax.naming.InitialContext.lookup(InitialContext.java:417)
解决办法:JNDI名称必须以"ejb:..."的形式,如 " ejb: EthernetPM/EthernetPMEJB/EthernetPMServiceBean!com.jdsu.netcomplete.service.ethernetpm.EthernetPMServiceRemote"


异常四:

java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:CustomView, moduleName:SecurityDelegateEJB, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@12e5a8e
	at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:798)
	at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116)
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
	at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255)
	at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200)
	at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)
	at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)
这是EJB调用的经典问题,常常被遇到,常常被忽略。
解决办法:务必将jboss-ejb-client.properties文件加入到classpath




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值