【问题标题】:No EJB receiver available for handling using Apache Camel没有可用于使用 Apache Camel 处理的 EJB 接收器
【发布时间】:2014-09-22 05:55:05
【问题描述】:

我正在调用部署在 Jboss jboss-as-7.1.1.Final 中的 EJB。下面是我用来调用和 EJB 的一段代码。

private void sendRequest() { 
            String camelID = "jbossejb"; 
            Exchange furExchange = null; 
            Message msg = null; 
            final Employee employee = new Employee(); 
            ProducerTemplate pProducerTemplate = getProducerTemplate(); 
            Endpoint endPoint = springCamelContext.getEndpoint("jbossejb"); 
            Future<Exchange> futurexchange = (Future<Exchange>) pProducerTemplate 
                            .asyncSend(endPoint, new Processor() { 
                                    public void process(Exchange exchange) throws Exception { 
                                            exchange.getIn().setBody(employee); 
                                    } 

                            }); 


            System.out.println("futurexchange:" + futurexchange); 
            try { 
                    furExchange = futurexchange.get(15000, TimeUnit.SECONDS); 
            } catch (InterruptedException e) { 
                    // TODO Auto-generated catch block 
                    e.printStackTrace(); 
            } catch (ExecutionException e) { 
                    // TODO Auto-generated catch block 
                    e.printStackTrace(); 
            } catch (TimeoutException e) { 
                    // TODO Auto-generated catch block 
                    e.printStackTrace(); 
            } 

            if (furExchange.getException() == null) { 
                    msg = furExchange.getOut(); 
                    String messageId = furExchange.getIn().getMessageId(); 
                    System.out.println("In Camel MessageID -:" + messageId); 
                    msg = furExchange.getOut(); 
                    System.out.println("Message:" + msg); 
            } else { 
                    Exception ex = furExchange.getException(); 
                    ex.printStackTrace(); 
            } 
    } 

JNDI 详情如下

<bean id="ejb" class="org.apache.camel.component.ejb.EjbComponent">  
    <property name="properties" ref="jndiProperties" />  
</bean>  
<util:properties id="jndiProperties">  
  <prop    key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory</prop>
    <prop key="java.naming.provider.url">remote://localhost:4447</prop>  
      <prop key="jboss.naming.client.ejb.context">true</prop>
    <prop key="java.naming.security.principal">jboss7</prop>  
    <prop key="java.naming.security.credentials">password</prop>  
</util:properties>  

抛出异常 java.lang.IllegalStateException 并带有下面的堆栈跟踪

java.lang.IllegalStateException: No EJB receiver available for handling [appName:,modulename:MappedEJBModule,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@508894e3 
    at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584) 
    at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119) 
    at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) 
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136) 
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) 
    at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104) 
    at com.sun.proxy.$Proxy35.receiveEmployee(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:407) 
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:278) 
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:251) 
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:166) 
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105) 
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:67) 
    at org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:103) 
    at org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:71) 
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
    at org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:73) 
    at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:378) 
    at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:346) 
    at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:242) 
    at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:346) 
    at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:184) 
    at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:124) 
    at org.apache.camel.impl.DefaultProducerTemplate$13.call(DefaultProducerTemplate.java:612) 
    at org.apache.camel.impl.DefaultProducerTemplate$13.call(DefaultProducerTemplate.java:610) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745)

当 EJB 部署在任何其他应用程序服务器(IBM Websphere 和 Weblogic)中时,我能够接收到响应。

请告诉我是什么导致 Jboss 出现问题。

【问题讨论】:

    标签: java jakarta-ee jboss apache-camel


    【解决方案1】:

    我有类似的问题。验证在您的 jndi 属性中,属性 jboss.naming.client.ejb.context 的值为 true(但它应该是布尔值 true,而不是 String 'true') - 我认为在 xml 中设置此属性时,它将被解释为字符串,这可能是问题的原因。

    【讨论】:

    • Property 'jboss.naming.client.ejb.context' 值已在 JNDI 属性中设置为 Boolean true,但仍然相同。
    猜你喜欢
    • 1970-01-01
    • 2017-04-19
    • 2012-09-08
    • 2016-07-17
    • 1970-01-01
    • 2013-02-28
    • 2012-10-05
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多