2017-04-10 7 views
1

私は単純なActiveMQメッセージエンキューを実装する次のEJBを持っています。 ActiveMQコード自体はうまく動作します。これはTomEEサーバーにデプロイされています。@EJBアノテーションはサーブレットの動作を停止させます

SenderBeanクラス:

package Beans; 

import javax.ejb.LocalBean; 
import javax.ejb.Stateless; 
import javax.jms.Connection; 
import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.JMSException; 
import javax.jms.MessageProducer; 
import javax.jms.Session; 
import javax.jms.TextMessage; 
import org.apache.activemq.ActiveMQConnection; 
import org.apache.activemq.ActiveMQConnectionFactory; 

@LocalBean 
@Stateless 
public class SenderBean { 

    private ConnectionFactory factory = null; 
    private Connection connection = null; 
    private Session session = null; 
    private Destination destination = null; 
    private MessageProducer producer = null; 

    public SenderBean() { 

    } 

    public void sendMessage() { 

     try { 
      factory = new ActiveMQConnectionFactory(
        ActiveMQConnection.DEFAULT_BROKER_URL); 
      connection = factory.createConnection(); 
      connection.start(); 
      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
      destination = session.createQueue("SAMPLEQUEUE"); 
      producer = session.createProducer(destination); 
      TextMessage message = session.createTextMessage(); 
      message.setText("Hello ...This is a sample message..sending from FirstClient"); 
      producer.send(message); 
      System.out.println("Sent: " + message.getText()); 

      connection.close(); 

     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

私はまた、サーブレットでBeanを使用しようとする以下のクラスがあります。次の例のように@EJB注釈を含めると、投稿を受信するとサーブレットは例外をスローします。しかし、注釈を削除してnew SenderBean()でBeanクラスをインスタンス化すると、すべてが正常に動作します。これの原因は何でしょうか?

SenderServletクラス:

package Servlets; 

import Beans.ReceiverBean; 
import Beans.SenderBean; 
import javax.ejb.EJB; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 

@WebServlet(name = "SenderServlet") 
public class SenderServlet extends HttpServlet { 

    @EJB 
    SenderBean senderBean; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    senderBean.sendMessage(); 
    } 
} 

500エラーの後HttpServletResponseで受信された例外:

HTTP Status 500 - Error instantiating servlet class Servlets.SenderServlet</h1><div class="line"></div><p><b>type</b> Exception report</p><p><b>message</b> <u>Error instantiating servlet class Servlets.SenderServlet</u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b></p><pre>javax.servlet.ServletException: Error instantiating servlet class Servlets.SenderServlet 
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97) 
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) 
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 

root cause javax.naming.NameNotFoundException: Name [Servlets.SenderServlet/senderBean] is not bound in this Context. Unable to find [Servlets.SenderServlet]. 
    org.apache.naming.NamingContext.lookup(NamingContext.java:816) 
    org.apache.naming.NamingContext.lookup(NamingContext.java:173) 
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97) 
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) 
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 

爆発アーティファクト: enter image description here

+0

使用しているインポートを含めてください。 –

+0

どのようにアプリケーションをパックしますか?サーブレットとEJBは同じアーティファクト(WAR/EAR)にありますか? –

+0

@PaulWasilewski私は爆発したアーティファクト画像を投稿に追加しました。私のJava EEバージョンは6です。 – user129186

答えて

0

あなたはクラスパスを持っていませんactivemqと衝突するか、休止しますか?提供されたライブラリはWEB-INF/libにありませんか?

関連する問題