Инъекция EJB в сервлет не удалась - PullRequest
5 голосов
/ 14 декабря 2010

Я пытаюсь внедрить EJB-компонент без сохранения состояния в сервлет, но сервлет выбрасывает NullPointerExcetion.Я использую JBOSS для развертывания 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"; 
 }
}

Я создал jar-файл bean-компонента, используя maven, и скопировал jar-файл в каталог "deploy" JBOSS.Я могу видеть компонент, развернутый в консоли JMX.

Глобальное пространство имен 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.Когда я комментирую бин и печатаю что-то еще, он печатается нормально.Так что я уверен, что проблема в инъекции зависимостей EJB в сервлете.Я пробовал много решений, предложенных где-то, где ничего не получалось, кто-то, пожалуйста, помогите мне.

1 Ответ

7 голосов
/ 14 декабря 2010

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

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

...