そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

EJB3.0のDIによる呼び出しをWeb層で行う

実験に使用したのは、
JDeveloper10.1.3.3とJDevに組み込まれているOC4J


マニュアルによるとServlet2.5であれば、Servetに@EJBアノテーション
記述してSessionBeanを呼び出すことが可能。
http://otndnld.oracle.co.jp/document/products/as10g/101320/doc_cd/web.1013/B31852-02/undejbs.htm#16449


ただし、このマニュアルのweb.xmlは間違っている気がする。
スキーマが2.4になっているので、エラーになる。
http://otndnld.oracle.co.jp/document/products/as10g/101320/doc_cd/web.1013/B31859-01/annotations.htm#409494


次のサンプルに含まれているweb.xmlに従ってやるとOKだった。


How-To : Using Dependency Injection In Web Module
http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/how-to-di-from-web/doc/how-to-di-from-web.html


Servletのソース抜粋

    @EJB
    private HelloWorldSessionEJB bean;

    public Servlet1(HelloWorldSessionEJB bean) {
        this.bean = bean;
    }
    
    public Servlet1() {
        
    }
    
    public void doGet(HttpServletRequest request, 
                      HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);

        System.out.println(bean.sayHello("testtest!"));
    }


web.xml

<?xml version = '1.0' encoding = 'Shift_JIS'?>
<web-app 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"
        metadata-complete="false"
>
    <description>Webアプリケーションに対する初期のweb.xmlです。</description>
    <servlet>
        <servlet-name>Servlet1</servlet-name>
        <servlet-class>ejb3sample.Servlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet1</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>35</session-timeout>
    </session-config>
    <mime-mapping>
        <extension>html</extension>
        <mime-type>text/html</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>txt</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>
</web-app>