2010-12-14 3 views
5

Я пытаюсь внедрить фасет без ведома EJB в сервлет, но сервлет вызывает NullPointerExcetion. Я использую JBOSS для развертывания EJB и сервлета.Ошибка EJB в сервлетах

Я относительно новичок в мире Java, поэтому я публикую шаги, которые я выполнил.

Интерфейс

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

Я создал банку файл компонента с использованием Maven и я скопировал файл банку с "разворачивать" каталог JBOSS. Я могу видеть компонент, развернутый в консоли JMX.

Global JNDI пространство имен в JMX консоли

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

Мой сервлет код

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

.... 
} 

Когда я указывал на URL моего сервлета, я получаю NullPointerException. Когда я комментирую bean-компонент и печатаю что-то еще, он печатает отлично. Поэтому я уверен, что проблема связана с вложением EJB Dependency Injection в сервлет. Я пробовал много решений, предложенных еще там, где ничего не работало, кто-то, пожалуйста, помогите мне.

ответ

7

После многих часов я нашел проблему, я размещаю ее, чтобы кто-то еще мог воспользоваться. Проблема в том, что я использовал JBOSS 4.2.3, и поскольку этот пост http://community.jboss.org/message/410211 предлагает jboss 4.2.x не поддерживает EJB-инъекцию в сервлетах.

Я использовал Jboss 5.1, также если оба сервлета и EJB не находятся в одном пакете уха, необходимо использовать сопоставленное имя для EJB Injection. У меня были сервлеты в WAR и EJB в отдельном банке. Проверьте это сообщение для получения более подробной информации. http://community.jboss.org/message/8196#8196

+1

Вы можете принять собственный ответ, чтобы другие пользователи знали, что на этот вопрос был дан ответ. –