2011-05-31 59 views
0
public interface ModelClient { 
    public JSONObject _callModel(URL url); 
} 

@Stateless 
@Local(ModelClient.class) 
public class ModelClientBean implements ModelClient { 
    public JSONObject _callModel(URL url) { /* some implementation */ } 
} 

@Stateless(name="ejb/ModelServiceBean") 
public class ModelServiceBean { 

    @EJB 
    private ModelClient modelClient; 
} 

JBoss AS中6说工作。 但是,尝试使用“NullPointerException”对modelClient结果进行尝试。@EJB依赖注入不JBoss AS中6 NullPointerException异常

任何想法?

UPDATE:ModelServiceBean从非管理的背景下审视了在JNDI(InitialContext的)

public JobServiceCall() { 
    Context context = null; 
    try { 
     context = new InitialContext(); 
     modelServiceBean = (ModelServiceBean)context.lookup(".."); 
    } catch()... 
} 

的异常堆栈跟踪:

Caused by: java.lang.NullPointerException 
    at com.domain.rms.ejbs.ModelClientBean._callModel(ModelClientBean.java:53) [:] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_24] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_24] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_24] 
    at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_24] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.interceptors.container.ContainerMethodInvocationWrapper.invokeNext(ContainerMethodInvocationWrapper.java:72) [:1.1.3] 
    at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:76) [:1.1.3] 
    at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:62) [:1.1.3] 
    at sun.reflect.GeneratedMethodAccessor279.invoke(Unknown Source) [:1.6.0_24] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_24] 
    at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_24] 
    at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:74) [:1.1.3] 
    at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_11016588.invoke(InvocationContextInterceptor_z_fillMethod_11016588.java) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:90) [:1.1.3] 
    at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_11016588.invoke(InvocationContextInterceptor_z_setup_11016588.java) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.async.impl.interceptor.AsynchronousServerInterceptor.invoke(AsynchronousServerInterceptor.java:128) [:1.7.17] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62) [:1.7.17] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56) [:1.7.17] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) [:1.7.17] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42) [:1.0.3] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68) [:1.7.17] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA] 
    at org.jboss.ejb3.core.context.SessionInvocationContextAdapter.proceed(SessionInvocationContextAdapter.java:95) [:1.7.17] 
    at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:223) [:0.0.1] 
    ... 109 more 

回答

2

你怎么坚持ModelServiceBean的实例?只有当ModelServiceBean本身被注入到一些托管bean(例如Servlet,JSF Managed bean等)或者当你通过JNDI请求时才可以使用注入。

当您使用new运算符实例化类时,不会发生注入。

+0

ModelServiceBean通过来自非托管上下文的JNDI(InitialContext)进行查找。 – 2011-05-31 17:51:11

+0

你认为这个NPE在哪里?在ModelClientBean里面?也许你应该发布堆栈跟踪。 – 2011-05-31 18:17:37

+0

感谢您的回复。请看上面 – 2011-06-01 08:33:22

0

我们在使用@LocalBean而非@Local实现。我也在非远程接口上看到@Local。

只是一个猜测,但我认为这可能工作:

@Local 
public interface ModelClient { 
    public JSONObject _callModel(URL url); 
} 

@Stateless 
@LocalBean 
public class ModelClientBean implements ModelClient { 
    public JSONObject _callModel(URL url) { /* some implementation */ } 
} 
+0

@LocalBean在这里不需要,它只定义了OP没有使用的额外的无界面视图。建议在接口上放置@Local,但在bean类上使用@Local并引用该接口具有相同的效果。它只是直接强制bean和界面之间的契约,这通常被认为不是最优的。 – 2011-05-31 16:16:24