Внедрение EJB-зависимостей в Servelt - WAS7 - PullRequest
0 голосов
/ 01 сентября 2011

Я пытаюсь внедрить EJB с аннотацией @EJB:

  • , когда я внедряю EJB в другой EJB, он работает нормально.
  • , когда я внедряю тот же EJB всервлет Я получил исключение нулевого указателя (мой EJB равен нулю).

myapp.ear содержит следующее:

  • myapp.war (где расположен сервлет)
  • myapp.jar (где EJB)

Интерфейс EJB:

package com.mycompany.myapp.ejb.hello;

@Local
public interface HelloEjb {
    public final static String NAME = "HelloEjb";   
    public String sayHello();
}

EJB Impl:

package com.mycompany.myapp.ejb.hello;

@Stateless(name = HelloEjb.NAME)
public class HelloEjbImpl implements HelloEjb {

    @Override
    public String sayHello() {
        return "Hello";
    }
}

Мой сервлет:

public class HelloServlet extends HttpServlet {

    @EJB
    private HelloEjb helloEjb;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("This is my stateless session-EJB: " + helloEjb.sayHello());
        out.println("</html>");
        out.close();
    }
}

В файле web.xml в WAR нет ничего особенного, только определение сервлета, нет тегов ejb:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="MyApp" version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- General -->
    <display-name>My App</display-name>

    <!-- Standard Action Servlet Configuration -->
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.mycompany.myapp.web.servlet.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Standard Action Servlet Mapping -->
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <!-- The Usual Welcome File List -->
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

Если в сервлете я использую поиск, он работает, я могу получить EJB:

helloEjb = ctx.lookup("ejblocal:com.mycompany.myapp.ejb.hello.HelloEjb");

Я использую Websphere 7 & EJB3.0

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Какой пакет Fixpack вы используете? До FixPack 11 механизм внедрения зависимостей в WAS7 был просто ужасен. Попробуйте обновить до 15 (не используйте последнюю, 17, неприятную ошибку при работе с общим журналом)

0 голосов
/ 02 сентября 2011

Мой первый снимок: если вы указываете «имя» для вашего EJB без сохранения состояния, вы должны добавить его с атрибутом «mappedName», например.'@EJB (mappedName = "foo.FooRemote")'

...