Инъекция EJB в Servelet завершилась неудачно с «Разрешение не должно происходить через инъекционный контейнер» - PullRequest
0 голосов
/ 08 марта 2011

У меня есть один EAR-файл с одним ejb jar и веб-модулем.EJB jar содержит один EJB без сохранения состояния и локальный интерфейс

@Stateless(name="MsgProducer")
@Local(MsgProducerLocal.class)
public class MsgProducer implements MsgProducerLocal {
 public void sendMessage{}
}

Теперь у меня есть один сервлет, в который я внедряю этот сессионный компонент с аннотацией @EJB, но когда я разверну этот EAR с обоими модулями ejb jar и web.warэто в jboss 5.1, тогда это выдает следующее исключение.

java.lang.IllegalStateException: Resolution should not happen via injection container
        at org.jboss.web.tomcat.service.TomcatInjectionContainer.getEjbJndiName(TomcatInjectionContainer.java:640)
        at org.jboss.injection.EjbEncInjector.inject(EjbEncInjector.java:80)
        at org.jboss.web.tomcat.service.TomcatInjectionContainer.populateEnc(TomcatInjectionContainer.java:482)
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment$EncListener.lifecycleEvent(TomcatDeployment.java:471)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4388)
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
        at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
        at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
        at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
        at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
        at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
        at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
        at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
        at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
        at $Proxy38.start(Unknown Source)

В моем web.xml я использую схему версии 2.5.Вот мой пример кода из servelet

public class MessageSenderServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @EJB(name="MsgProducer")
    public MsgProducerLocal producer;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MessageSenderServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        producer.sendMessage();
        response.sendRedirect("index.jsp");
    }

}

Я использую Eclipse 3.6, JBoss 5.1 и EJB 3.0.

Может кто-нибудь объяснить мне, что не так с этим кодом?Как я могу устранить эту ошибку?

Спасибо

1 Ответ

0 голосов
/ 06 марта 2012

Вы кладете свой сервлет в файл .WAR?Примечание: вы должны поместить ваш сервлет в файл .war, а ваш ejb - в файл jar.А затем создайте файл ear.

Если вы используете только один интерфейс, вам не нужно использовать @EJB (name = "MsgProducer").Вы можете просто сказать @EJB public MsgProducerLocal продюсер;

Как вы упомянули, у вас есть web.xml версия 2.5.Пожалуйста, убедитесь, что вы используете правильный формат.

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

...