0

@EJBアノテーションを付けてEJBを挿入しようとしています:

  • EJBを別のEJBに挿入すると、正常に機能します。
  • 同じEJBをサーブレットに挿入すると、nullポインター例外が発生しました(EJBがnullです)。

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

WARのweb.xmlには特別なものはなく、サーブレットの定義のみがあり、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");

Websphere7EJB3.0を使用しています

どんな助けでも大歓迎です。

4

2 に答える 2

0

どのフィックスパックを使用していますか?FixPack 11より前は、WAS7の依存性注入メカニズムは地獄に追いやられていました。15にアップグレードしてみてください(commons-loggingで動作する最新の17の厄介なバグを使用しないでください)

于 2011-09-06T07:19:16.400 に答える
0

私の最初のショットは、ステートレスEJBに「名前」を指定する場合は、「mappedName」属性を挿入する必要があります。'@EJB(mappedName = "foo.FooRemote")'

于 2011-09-01T20:44:56.613 に答える