2010-12-14 10 views
5

Próbuję wprowadzić bezstanową integrację EJB do serwletu, ale serwlet zgłasza NullPointerExcetion. Używam JBOSS do wdrożenia EJB i serwletu.Wstrzyknięcie EJB w serwlinie kończy się niepowodzeniem.

Jestem stosunkowo nowy w świecie Java, więc zamieszczam kroki, które podjąłem.

Interfejs

package MavenEJB.Bidding` 
import javax.ejb.Local; 

@Local 
public interface PlaceBid { 
public String AddBid(); 
} 

Bean

package MavenEJB.Bidding; 
import javax.ejb.Stateless; 
@Stateless(name="PlaceBid") 
public class PlaceBidBean implements PlaceBid { 
public PlaceBidBean(){} 

/** 
    * Include logic to add the bid 
    */ 

public String AddBid(){ 
    return "Placed bid using EJB"; 
} 
} 

stworzyłem plik słoik fasoli za pomocą Maven i kopiowany plik jar do "wyzwolenia" katalog JBoss. Jestem w stanie zobaczyć komponent bean wdrożony w konsoli JMX.

Globalny nazw JNDI w JMX konsoli

+- PlaceBid (class: org.jnp.interfaces.NamingContext) 
    | +- local (proxy: $Proxy63 implements interface MavenEJB.Bidding.PlaceBid,interface org.jboss.ejb3.JBossProxy) 

mój kod serwletu

public class PlaceBidServlet extends HttpServlet { 

    @EJB 
    private PlaceBid placeBid; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 

    PrintWriter out = response.getWriter(); 
    out.println("<HTML>"); 
    out.println("<HEAD><TITLE>Hello</TITLE></HEAD>"); 
    out.println("<BODY>"); 
    out.println("Output from EJB" +placeBid.AddBid()); 

    //out.println("Output from EJB"); 
    out.println("</BODY></HTML>"); 
} 

.... 
} 

Kiedy wskazywać na URL mojego serwletu otrzymuję NullPointerException. Kiedy komentuję komponent bean i drukuję coś innego, to drukuje dobrze. Tak więc jestem pewien, że problem dotyczy wtrysku zależności EJB w serwlecie. Próbowałem wielu rozwiązań sugerowanych gdzie indziej, nic tak naprawdę nie działało, ktoś mi pomóż.

Odpowiedz

7

Po wielu godzinach znalazłem problem, publikuję go, aby mógł skorzystać ktoś inny. Problem polega na tym, że korzystałem z JBOSS 4.2.3 i jako że ten post http://community.jboss.org/message/410211 sugeruje, że jboss 4.2.x nie obsługuje wtrysku EJB w serwletach.

Użyłem Jboss 5.1, także jeśli zarówno serwlet, jak i EJB nie znajdują się w jednym pakiecie słuchawkowym, należy użyć mappedName do wtrysku EJB. Miałem serwlety w WAR i EJB w osobnym Słoiku. Sprawdź ten wpis, aby uzyskać więcej informacji. http://community.jboss.org/message/8196#8196

+1

Możesz zaakceptować własną odpowiedź, aby inni użytkownicy wiedzieli, że odpowiedź na to pytanie została udzielona. –