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>