Advertisement
Advertisement

More Related Content

Advertisement

Recently uploaded(20)

Advertisement

OpenEJB - 另一個選擇

  1. – 另一個選擇 林信良, http://openhome.cc
  2. 議程 • 開發環境準備 • 實作進行方式 • 實作主題介紹 • 參考資源
  3. 開發環境準備 Java Developer Killer… 老 梗
  4. 開發環境準備 • Java SE Development Kit 6 – http://java.sun.com/javase/downloads/index.jsp ?不!我們用不到。。XD • NetBeans 6.5 Java Bundles – http://www.netbeans.org/downloads/index.html • Apache OpenEJB 3.1 – http://openejb.apache.org/download.html
  5. 開發環境準備 • 專案位置: – USER_HOME/workspace – 我的環境 c:/workspace • OpenEJB 位置: – WORKSPACE/openejb-3.1 – 我的環境 c:/workspace/openejb-3.1
  6. 開發環境準備 • 在 NetBeans 中新增 OpenEJB 程式庫 – 開啟 NetBeans – 選單Tools LibrariesNew Library • Library Name: OpenEJB • Library Type: Class Libraries • OK – Add JAR/Folder… • 選取 OPENEJB_HOME/lib 下所有的 JAR • Add JAR/Folder • OK – OK
  7. 實作進行方式 50 可 分 作 鐘 啥
  8. 實作進行方式 • 每個實作 5 到 10 分鐘 • 觀念講解 • 講師示範 • Copy-and-Paste 實作 - 複製程式片段(請留意檔名) - 貼到對應位置(請注意位置) 重點在組合。。XD
  9. 實作主題介紹 • Hello! EJB!...Orz • EJB 單元測試 • Resource 注入(以 MDB 為例) • Tomcat 與 EJB(一) • Tomcat 與 EJB(二) • Stand-alone Server(Optional)
  10. Hello! EJB!…Orz • 新建專案 – 選單 FileNew ProjectJavaJava Application – Project Name: HelloEJB – Project Location: WORKSPACE – Finish • 加入OpenEJB 程式庫 – Libraries右鍵選單Add Library OpenEJB Add Library
  11. Hello! EJB!…Orz • 加入OpenEJB 程式庫 – Libraries右鍵選單Add Library OpenEJB Add Library
  12. Hello! EJB!…Orz • 定義Session Bean Local介面 – Source PackagesNewJava Interface – Class Name: HelloLocal – Package: helloejb(你的套件名) • LAB_FILE/HelloEJB/HelloLocal.txt
  13. Hello! EJB!…Orz • 定義實作類別 – Source PackagesNewJava Interface – Class Name: HelloImpl – Package: helloejb(你的套件名) • LAB_FILE/HelloEJB/HelloImpl.txt
  14. Hello! EJB!…Orz • 接著是Glassfish?
  15. Hello! EJB!…Orz • EJB 也可以… 輕量級
  16. Hello! EJB!…Orz • Local Server – OpenEJB can be embedded and treated as your very own personal EJB container. • LAB_FILE/HelloEJB/Main-1.txt Properties properties = new Properties(); properties.setProperty( Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); properties.put("openejb.home", "C:workspaceopenejb-3.1"); properties.put("openejb.configuration","openejb.conf");
  17. Hello! EJB!…Orz • openejb.conf – HelloEJBNewEmpty File – FileName: openejb.conf • LAB_FILE/HelloEJB/openejb.conf.txt <openejb> <Deployments dir="C:workspaceHelloEJBbuildclasses" /> </openejb> <openejb> <Deployments jar="C:workspaceSomewhereEJBModule1.jar" /> </openejb>
  18. Hello! EJB!…Orz • LAB_FILE/HelloEJB/Main-2.txt • 注意 JNDI 名稱 – 本地介面:實作類別名稱附加Local名稱 – 遠端介面:實作類別名稱附加Remote名稱 InitialContext context = new InitialContext(properties); Object obj = context.lookup("HelloImplLocal");
  19. Hello! EJB!…Orz • 執行結果 – XD......OK! • 完成實作 – SOLUTIONHelloEJB
  20. EJB 單元測試 • 輕量級幹嘛? 單元 測試
  21. EJB 單元測試 • 開啟專案PREPARED_PRJEJBUnitTest – (相依問題?你的OpenEJB位置可能不同!) – (如果你對NetBeans不熟,先把OpenEJB放 到c:workspaceopenejb-3.1下) • (建立測試案例) – (Test PackagesNewJUnit Test)
  22. EJB 單元測試 • 建立測試案例 – LAB_FILE/EJBUnitTest/HelloLocalTest-1.txt – LAB_FILE/EJBUnitTest/HelloLocalTest-2.txt – LAB_FILE/EJBUnitTest/HelloLocalTest-3.txt • 執行測試案例 – Test Packagestest.helloejb.HelloLocalTest Run File
  23. EJB 單元測試 • 執行結果 – Tests run: 1, Failures: 0, Errors: 0 • 完成實作 – SOLUTIONEJBUnitTest
  24. Resource 注入 EntityManager DataSource 依選擇啟用資源 Topic Queue
  25. Resource 注入 • 以 Message-Driven Bean(MDB) 為例 • 開啟專案PREPARED_PRJResourceInjection • 使用@Resource – 開啟Source Packageshelloejb.HelloImpl – LAB_FILEResourceInjectionHelloImpl-1.txt – LAB_FILEResourceInjectionHelloImpl-2.txt • 定義Message-Driven Bean – 開啟Source Packageshelloejb.HelloMessage – LAB_FILEResourceInjectionHelloImpl-1.txt – LAB_FILEResourceInjectionHelloImpl-1.txt
  26. Resource 注入 • 複製 openejb.conf – 切換 NetBeans 至 Files – 將LAB_FILEResourceInjectionopenejb.conf 拖放至 ResourceInjection • openejb.conf 中<Resource> – 用來定義 DataSource、JMS… – 本範例使用 ActiveMQ <Resource id=“XXX" provider=“OOO"> …. </Resource>
  27. Resource 注入 public class HelloImpl implements HelloLocal { @Resource(name="JmsConnectionFactory") private ConnectionFactory connectionFactory; … <Connector id="JmsConnectionFactory“ …> …. </Connector>
  28. Resource 注入 • 執行測試案例 – Test Packagestest.helloejb.HelloLocalTest Run File • 執行結果 – Tests run: 1, Failures: 0, Errors: 0 • 完成實作 – SOLUTIONResourceInjection
  29. Tomcat 與 EJB JSP/Servlet + EJB
  30. Tomcat 與 EJB(一) • Tomcat 上也可以用 EJB • 將 openejb.war 部署至 Tomcat 上 – NetBeans 會為使用者建 Cataline_Base – USER_HOMEnetbeans6.5apache-tomcat- 6.0.18_basewebapps • 在NetBeans 中啟動Tomcat – 切換至ServicesServersApache Tomcats右鍵 Start • 現在你可以在 Tomcat 中部署 EJB 了 – http://localhost:8084/openejb/ 獲得資源注入的好處
  31. Tomcat 與 EJB (一) • 來寫個Tomcat上的Hello!EJB!。。Orz • 新建專案 – 選單 FileNew ProjectJava WebWeb Application – Project Name: HelloEJBTomcat – Project Location: WORKSPACE/ – Next – Server: Apache Tomcat – Finish
  32. Tomcat 與 EJB (一) • 加入Java EE API 程式庫 – Libraries右鍵選單Add JAR/Border – 選取OPENEJB_HOME/lib/javaee-api-5.0-1.jar • 建立package – Source PackagesNewJava Package – Package Name: hellloejb – Finish
  33. Tomcat 與 EJB (一) • 複製先前寫好的Stateless Session Bean至 helloejb中 – SOLUTIONHelloEJBsrchelloejbHelloLocal.java – SOLUTIONHelloEJBsrchelloejbHelloImpl.java • 寫個HelloServlet – Source PackageshelloejbNewServlet – Class Name: HelloServlet – Finish
  34. Tomcat 與 EJB (一) • 注入 EJB public class HelloServlet extends HttpServlet { @EJB private HelloLocal hello; … • 清空processRequest()方法
  35. Tomcat 與 EJB (一) • 使用 Stateless Session Bean – HelloServlet-2.txt ... out.println("<h1>" + hello.doHello("Orz...") + "</h1>"); ... • 執行 Web 應用程式 – HelloEJBTomcatClear and Bulid – HelloEJBTomcatDeploy – Source Packageshelloejb.HelloServletRun
  36. Tomcat 與 EJB (一) • 完成實作 – SOLUTIONHelloEJBTomcat
  37. Tomcat 與 EJB (二) • 可以定義遠端介面 • 讓 Session Bean 實作遠端介面 • 非 Tomcat 客戶端可以存取 Session Bean – INITIAL_CONTEXT_FACTORY – PROVIDER_URL • 繼續上一個實作 – (SOLUTIONHelloEJBTomcat)
  38. Tomcat 與 EJB (二) • 定義遠端介面 @Remote public interface HelloRemote { public String doHello(String message); } • 讓 Session Bean 實作遠端介面 public class HelloImpl implements HelloLocal, HelloRemote { … }
  39. Tomcat 與 EJB (二) • 在Services中關掉Tomcat,重新Clean、Build、 Deploy • 新建專案 – 選單 FileNew ProjectJavaJava Application – Project Name: HelloClient – Project Location: WORKSPACE – Finish • 加入OpenEJB 程式庫 – Libraries右鍵選單Add Library OpenEJB Add Library
  40. Tomcat 與 EJB (二) • 建立package – Source PackagesNewJava Package – Package Name: hellloejb – Finish • 複製HelloEJBTomcat中的HelloRemote至 HelloClient的helloejb中
  41. Tomcat 與 EJB (二) • 撰寫Main – LAB_FILEHelloClientMain.txt • 對客戶端而言,EJB 現在部署在遠端 Server 上 Properties properties = new Properties(); properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory"); properties.put(Context.PROVIDER_URL, "http://127.0.0.1:8084/openejb/ejb"); InitialContext context = new InitialContext(properties); Object obj = context.lookup("HelloImplRemote");
  42. Tomcat 與 EJB (二) • 執行結果 – XD……OK! • 完成實作 – SOLUTIONHelloEJBTomcat2
  43. Stand-alone Server(Optional)
  44. Stand-alone Server(Optional) • 可將 OpenEJB 作為 Stand-alone Server • 設定環境變數 set OPENEJB_HOME=c:workspaceopenejb-3.1 set PATH=%OPENEJB_HOME%/bin;%PATH% • 啟動 openejb start
  45. Stand-alone Server(Optional) • 部署 openejb deploy yourejb.jar • 手動部署 – 在 OpenEJB 目錄下建立 apps 資料夾 – 將 EJB JAR 複製至 apps 資料夾 – 啟動 OpenEJB
  46. Stand-alone Server(Optional) • Session Bean 必須是遠端介面 @Remote public interface HelloRemote { … • 客戶端 Properties properties = new Properties(); properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory"); InitialContext context = new InitialContext(properties); Object obj = context.lookup("HelloImplRemote");
  47. Stand-alone Server(Optional) • 試試看… – LAB_FILEOptional
  48. 參考資源 • 如果你想學習 EJB3 – http://doc.openhome.cc – http://www.manning.com/panda/ – http://oreilly.com/catalog/9780596009786/ • 如果想學習更多 OpenEJB – http://openejb.apache.org/ • 你可以從這邊開始… – http://openejb.apache.org/examples.html
  49. Thank You 林信良 http://openhome.cc http://openhome.cc, caterpillar@openhome.cc  林信良  caterpillar@openhome.cc
Advertisement