2011-03-07 3 views
0

하나의 ejb jar 및 웹 모듈이있는 하나의 EAR 파일이 있습니다. EJB 항아리 하나 무 EJB 및 로컬 인터페이스를 포함하고 지금은 내가 @EJB 주석이 세션 빈을 주입 만하고 하나의 서블릿이Servelet에서 EJB 주입이 "주입 컨테이너를 통해 해결되지 않음"

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

나는 그 안에 EJB 항아리와 web.war 모듈 모두이 EAR을 배포 할 때 jboss 5.1 다음 예외가 throw됩니다.

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"); 
    } 

} 

이클립스 3.6, 보스 5.1 및 EJB 3.0 사용하고 있습니다에서 내 샘플 코드입니다.

누군가이 코드의 문제점을 설명 할 수 있습니까? 어떻게이 오류를 해결할 수 있습니까?

감사

답변

0

당신은 .war 파일에 서블릿을두고 있습니까? 참고 : Servlet을 .war 파일에두고 ejb를 jar 파일에 넣어야합니다. 그런 다음 귀 파일을 만듭니다.

하나의 인터페이스 만 구현하는 경우 @EJB (name = "MsgProducer") 을 사용할 필요가 없습니다. @EJB public MsgProducerLocal 제작자라고 간단하게 말할 수 있습니다.

언급 한대로 web.xml 버전 2.5가 있습니다. 정확한 형식을 사용하고 있는지 확인하십시오.

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

관련 문제