Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
– 另一個選擇林信良, http://openhome.cc
議程•   開發環境準備•   實作進行方式•   實作主題介紹•   參考資源
開發環境準備  Java Developer Killer…         老         梗
開發環境準備•         Java SE Development Kit 6    – http://java.sun.com/javase/downloads/index.jsp               ?不!我們用不到。。XD• ...
開發環境準備• 專案位置: – USER_HOME/workspace – 我的環境 c:/workspace• OpenEJB 位置: – WORKSPACE/openejb-3.1 – 我的環境 c:/workspace/openejb-3.1
開發環境準備• 在 NetBeans 中新增 OpenEJB 程式庫  – 開啟 NetBeans  – 選單Tools LibrariesNew Library    • Library Name: OpenEJB    • Librar...
實作進行方式50            可分             作鐘             啥
實作進行方式• 每個實作 5 到 10 分鐘• 觀念講解• 講師示範• Copy-and-Paste 實作 - 複製程式片段(請留意檔名) - 貼到對應位置(請注意位置)重點在組合。。XD
實作主題介紹•   Hello! EJB!...Orz•   EJB 單元測試•   Resource 注入(以 MDB 為例)•   Tomcat 與 EJB(一)•   Tomcat 與 EJB(二)•   Stand-alone Serv...
Hello! EJB!…Orz• 新建專案 – 選單 FileNew ProjectJavaJava   Application – Project Name: HelloEJB – Project Location: WORKSPACE...
Hello! EJB!…Orz• 加入OpenEJB 程式庫 – Libraries右鍵選單Add Library   OpenEJB Add Library
Hello! EJB!…Orz• 定義Session Bean Local介面  – Source PackagesNewJava Interface  – Class Name: HelloLocal  – Package: helloe...
Hello! EJB!…Orz• 定義實作類別  – Source PackagesNewJava Interface  – Class Name: HelloImpl  – Package: helloejb(你的套件名)• LAB_FI...
Hello! EJB!…Orz• 接著是Glassfish?
Hello! EJB!…Orz• EJB 也可以…             輕量級
Hello! EJB!…Orz• Local Server   – OpenEJB can be embedded and treated as     your very own personal EJB container.• LAB_FI...
Hello! EJB!…Orz• openejb.conf  – HelloEJBNewEmpty File  – FileName: openejb.conf• LAB_FILE/HelloEJB/openejb.conf.txt  <o...
Hello! EJB!…Orz• LAB_FILE/HelloEJB/Main-2.txt• 注意 JNDI 名稱    – 本地介面:實作類別名稱附加Local名稱    – 遠端介面:實作類別名稱附加Remote名稱InitialConte...
Hello! EJB!…Orz• 執行結果 – XD......OK!• 完成實作 – SOLUTIONHelloEJB
EJB 單元測試• 輕量級幹嘛?                 單元                 測試
EJB 單元測試• 開啟專案PREPARED_PRJEJBUnitTest – (相依問題?你的OpenEJB位置可能不同!) – (如果你對NetBeans不熟,先把OpenEJB放   到c:workspaceopenejb-3.1下)• ...
EJB 單元測試• 建立測試案例 – LAB_FILE/EJBUnitTest/HelloLocalTest-1.txt – LAB_FILE/EJBUnitTest/HelloLocalTest-2.txt – LAB_FILE/EJBUni...
EJB 單元測試• 執行結果 – Tests run: 1, Failures: 0, Errors: 0• 完成實作 – SOLUTIONEJBUnitTest
Resource 注入             EntityManagerDataSource   依選擇啟用資源  Topic                Queue
Resource 注入• 以 Message-Driven Bean(MDB) 為例• 開啟專案PREPARED_PRJResourceInjection• 使用@Resource  – 開啟Source Packageshelloejb.H...
Resource 注入• 複製 openejb.conf  – 切換 NetBeans 至 Files  – 將LAB_FILEResourceInjectionopenejb.conf    拖放至 ResourceInjection• op...
Resource 注入public class HelloImpl implements HelloLocal {  @Resource(name="JmsConnectionFactory")  private ConnectionFacto...
Resource 注入• 執行測試案例 – Test Packagestest.helloejb.HelloLocalTest   Run File• 執行結果 – Tests run: 1, Failures: 0, Errors: 0•...
Tomcat 與 EJBJSP/Servlet              +   EJB
Tomcat 與 EJB(一)• Tomcat 上也可以用 EJB• 將 openejb.war 部署至 Tomcat 上  – NetBeans 會為使用者建 Cataline_Base  – USER_HOMEnetbeans6.5apac...
Tomcat 與 EJB (一)• 來寫個Tomcat上的Hello!EJB!。。Orz• 新建專案 – 選單 FileNew ProjectJava WebWeb   Application – Project Name: HelloE...
Tomcat 與 EJB (一)• 加入Java EE API 程式庫 – Libraries右鍵選單Add JAR/Border – 選取OPENEJB_HOME/lib/javaee-api-5.0-1.jar• 建立package – ...
Tomcat 與 EJB (一)• 複製先前寫好的Stateless Session Bean至  helloejb中  – SOLUTIONHelloEJBsrchelloejbHelloLocal.java  – SOLUTIONHello...
Tomcat 與 EJB (一)• 注入 EJBpublic class HelloServlet extends HttpServlet {  @EJB  private HelloLocal hello;  …• 清空processRequ...
Tomcat 與 EJB (一)• 使用 Stateless Session Bean  – HelloServlet-2.txt ... out.println("<h1>" + hello.doHello("Orz...") + "</h1...
Tomcat 與 EJB (一)• 完成實作 – SOLUTIONHelloEJBTomcat
Tomcat 與 EJB (二)• 可以定義遠端介面• 讓 Session Bean 實作遠端介面• 非 Tomcat 客戶端可以存取 Session Bean – INITIAL_CONTEXT_FACTORY – PROVIDER_URL•...
Tomcat 與 EJB (二)• 定義遠端介面@Remotepublic interface HelloRemote {  public String doHello(String message);}• 讓 Session Bean 實作遠...
Tomcat 與 EJB (二)• 在Services中關掉Tomcat,重新Clean、Build、  Deploy• 新建專案  –   選單 FileNew ProjectJavaJava Application  –   Proj...
Tomcat 與 EJB (二)• 建立package – Source PackagesNewJava Package – Package Name: hellloejb – Finish• 複製HelloEJBTomcat中的Hello...
Tomcat 與 EJB (二)• 撰寫Main    – LAB_FILEHelloClientMain.txt• 對客戶端而言,EJB 現在部署在遠端  Server 上Properties properties = new Propert...
Tomcat 與 EJB (二)• 執行結果 – XD……OK!• 完成實作 – SOLUTIONHelloEJBTomcat2
Stand-alone Server(Optional)
Stand-alone Server(Optional)• 可將 OpenEJB 作為 Stand-alone Server• 設定環境變數 set OPENEJB_HOME=c:workspaceopenejb-3.1 set PATH=%O...
Stand-alone Server(Optional)• 部署 openejb deploy yourejb.jar• 手動部署 – 在 OpenEJB 目錄下建立 apps 資料夾 – 將 EJB JAR 複製至 apps 資料夾 – 啟動...
Stand-alone Server(Optional)• Session Bean 必須是遠端介面 @Remote public interface HelloRemote {  …• 客戶端 Properties properties = ...
Stand-alone Server(Optional)• 試試看… – LAB_FILEOptional
參考資源• 如果你想學習 EJB3 – http://doc.openhome.cc – http://www.manning.com/panda/ – http://oreilly.com/catalog/9780596009786/• 如果...
Thank You                            林信良                             http://openhome.cc                              http:...
Upcoming SlideShare
Loading in …5
×

OpenEJB - 另一個選擇

1,590 views

Published on

2009 Java TWO

Published in: Technology
  • Be the first to comment

OpenEJB - 另一個選擇

  1. 1. – 另一個選擇林信良, http://openhome.cc
  2. 2. 議程• 開發環境準備• 實作進行方式• 實作主題介紹• 參考資源
  3. 3. 開發環境準備 Java Developer Killer… 老 梗
  4. 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. 5. 開發環境準備• 專案位置: – USER_HOME/workspace – 我的環境 c:/workspace• OpenEJB 位置: – WORKSPACE/openejb-3.1 – 我的環境 c:/workspace/openejb-3.1
  6. 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. 7. 實作進行方式50 可分 作鐘 啥
  8. 8. 實作進行方式• 每個實作 5 到 10 分鐘• 觀念講解• 講師示範• Copy-and-Paste 實作 - 複製程式片段(請留意檔名) - 貼到對應位置(請注意位置)重點在組合。。XD
  9. 9. 實作主題介紹• Hello! EJB!...Orz• EJB 單元測試• Resource 注入(以 MDB 為例)• Tomcat 與 EJB(一)• Tomcat 與 EJB(二)• Stand-alone Server(Optional)
  10. 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. 11. Hello! EJB!…Orz• 加入OpenEJB 程式庫 – Libraries右鍵選單Add Library OpenEJB Add Library
  12. 12. Hello! EJB!…Orz• 定義Session Bean Local介面 – Source PackagesNewJava Interface – Class Name: HelloLocal – Package: helloejb(你的套件名)• LAB_FILE/HelloEJB/HelloLocal.txt
  13. 13. Hello! EJB!…Orz• 定義實作類別 – Source PackagesNewJava Interface – Class Name: HelloImpl – Package: helloejb(你的套件名)• LAB_FILE/HelloEJB/HelloImpl.txt
  14. 14. Hello! EJB!…Orz• 接著是Glassfish?
  15. 15. Hello! EJB!…Orz• EJB 也可以… 輕量級
  16. 16. Hello! EJB!…Orz• Local Server – OpenEJB can be embedded and treated as your very own personal EJB container.• LAB_FILE/HelloEJB/Main-1.txtProperties 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. 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. 18. Hello! EJB!…Orz• LAB_FILE/HelloEJB/Main-2.txt• 注意 JNDI 名稱 – 本地介面:實作類別名稱附加Local名稱 – 遠端介面:實作類別名稱附加Remote名稱InitialContext context = new InitialContext(properties);Object obj = context.lookup("HelloImplLocal");
  19. 19. Hello! EJB!…Orz• 執行結果 – XD......OK!• 完成實作 – SOLUTIONHelloEJB
  20. 20. EJB 單元測試• 輕量級幹嘛? 單元 測試
  21. 21. EJB 單元測試• 開啟專案PREPARED_PRJEJBUnitTest – (相依問題?你的OpenEJB位置可能不同!) – (如果你對NetBeans不熟,先把OpenEJB放 到c:workspaceopenejb-3.1下)• (建立測試案例) – (Test PackagesNewJUnit Test)
  22. 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. 23. EJB 單元測試• 執行結果 – Tests run: 1, Failures: 0, Errors: 0• 完成實作 – SOLUTIONEJBUnitTest
  24. 24. Resource 注入 EntityManagerDataSource 依選擇啟用資源 Topic Queue
  25. 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. 26. Resource 注入• 複製 openejb.conf – 切換 NetBeans 至 Files – 將LAB_FILEResourceInjectionopenejb.conf 拖放至 ResourceInjection• openejb.conf 中<Resource> – 用來定義 DataSource、JMS… – 本範例使用 ActiveMQ <Resource id=“XXX" provider=“OOO"> …. </Resource>
  27. 27. Resource 注入public class HelloImpl implements HelloLocal { @Resource(name="JmsConnectionFactory") private ConnectionFactory connectionFactory; …<Connector id="JmsConnectionFactory“ …> ….</Connector>
  28. 28. Resource 注入• 執行測試案例 – Test Packagestest.helloejb.HelloLocalTest Run File• 執行結果 – Tests run: 1, Failures: 0, Errors: 0• 完成實作 – SOLUTIONResourceInjection
  29. 29. Tomcat 與 EJBJSP/Servlet + EJB
  30. 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. 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. 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. 33. Tomcat 與 EJB (一)• 複製先前寫好的Stateless Session Bean至 helloejb中 – SOLUTIONHelloEJBsrchelloejbHelloLocal.java – SOLUTIONHelloEJBsrchelloejbHelloImpl.java• 寫個HelloServlet – Source PackageshelloejbNewServlet – Class Name: HelloServlet – Finish
  34. 34. Tomcat 與 EJB (一)• 注入 EJBpublic class HelloServlet extends HttpServlet { @EJB private HelloLocal hello; …• 清空processRequest()方法
  35. 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. 36. Tomcat 與 EJB (一)• 完成實作 – SOLUTIONHelloEJBTomcat
  37. 37. Tomcat 與 EJB (二)• 可以定義遠端介面• 讓 Session Bean 實作遠端介面• 非 Tomcat 客戶端可以存取 Session Bean – INITIAL_CONTEXT_FACTORY – PROVIDER_URL• 繼續上一個實作 – (SOLUTIONHelloEJBTomcat)
  38. 38. Tomcat 與 EJB (二)• 定義遠端介面@Remotepublic interface HelloRemote { public String doHello(String message);}• 讓 Session Bean 實作遠端介面public class HelloImpl implements HelloLocal, HelloRemote { …}
  39. 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. 40. Tomcat 與 EJB (二)• 建立package – Source PackagesNewJava Package – Package Name: hellloejb – Finish• 複製HelloEJBTomcat中的HelloRemote至 HelloClient的helloejb中
  41. 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. 42. Tomcat 與 EJB (二)• 執行結果 – XD……OK!• 完成實作 – SOLUTIONHelloEJBTomcat2
  43. 43. Stand-alone Server(Optional)
  44. 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. 45. Stand-alone Server(Optional)• 部署 openejb deploy yourejb.jar• 手動部署 – 在 OpenEJB 目錄下建立 apps 資料夾 – 將 EJB JAR 複製至 apps 資料夾 – 啟動 OpenEJB
  46. 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. 47. Stand-alone Server(Optional)• 試試看… – LAB_FILEOptional
  48. 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. 49. Thank You 林信良 http://openhome.cc http://openhome.cc, caterpillar@openhome.cc 林信良  caterpillar@openhome.cc

×