Eclipse+Weblogic 12開發簡單的Enterprise Application


學到EJB方面的內容,遇到了很多問題,翻閱了無數遍Java EE和Weblogic的官方文檔,在google上進行了無數次搜索都沒有答案,可能我要找的答案太冷門。這一切都起源於Java EE官方文檔里的“cart”例子,我被他迷惑了整整一天。因為這個項目在Netbeans+GlassFish環境下可以運行的很好,直接右擊項目,點運行就可以了。結果拿到Eclipse來,碰到了一堆問題,不是注入的EJB變量為Null要不就是找不到類。經過一天的摸索,現在終於有點頭緒了,現在整理出來,希望可以幫助大家。而大家可能有更好的方法或者對我的敘述有疑問和意見,請大膽評論。大笑

一、應用環境

本文假設您已經有了Eclipse或Spring Source Tool和Weblogic的配置經驗。本項目是用Application Client project來訪問EJB模塊,比直接用Java EE容器管理的Web項目要復雜,因為web client與EJB模塊在同一容器,可以很方便的使用Dependency Injection(依賴注入)。而Application Client是運行在單獨的Application Client Container之中,它需要與Java EE容器交互,獲取容器里的資源,就需要一些額外的設置。

所用工具:Spring Source Tool(本質上還是Eclipse,通用),weblogic command tool.

源代碼:Github --- Hello project

二、創建項目

 

1、新建一個Enterprise Application Project。

右擊Package Explorer空白處,選擇New->Other.

 

然后在Java EE下面選擇Enterprise Application Client

 

點Next,填寫項目基本信息,在這里我新建了一個hello項目,運行環境就選擇weblogic。

 

在這個界面勾選Generate application.xml deployment descriptor,然后點擊New Module來創建EJB和Client。

 

取消Web module,這里我們不創建Web Client和Connector。為Application client和EJB模塊命名,之后點finish。

 

Eclipse就為我們生成了如下三個項目,helloClient-應用程序客戶端,helloEJB-EJB模塊,還有一個hello是負責把這兩個模塊打包成EAR部署到Weblogic。

 

2、編寫EJB模塊代碼

EJB模塊的代碼結構如下:

 

其中hello.ejb.interfaces包下的Hello.java是一個遠程業務接口,即運行在不同Java虛擬機里的client也可以訪問它提供的服務,代碼如下:

  1. package hello.ejb.interfaces;
  2.  
  3. import javax.ejb.Remote;
  4.  
  5. @Remote
  6. public interface Hello {
  7.  
  8. public String sayHello(String name);
  9.  
  10. }

 

HelloBean是一個stateless session bean。當然stateful也可以,畢竟就這一個Application Client,它的代碼如下:
  1. package hello.ejb;
  2.  
  3. import javax.ejb.Stateless;
  4.  
  5. import hello.ejb.interfaces.Hello;
  6.  
  7. @Stateless
  8. public class HelloBean implements Hello {
  9.  
  10. @Override
  11. public String sayHello(String name) {
  12. return "Hello: " + name;
  13. }
  14.  
  15. }
一個很簡單的方法,給name變量加上“Hello: ”,然后返回。

3、設置Application Client

右擊helloClient,選擇properties。

 

打開Deployment Aseembly菜單,選擇Manifest Entries,點Add...,把helloEJB.jar添加進去,添加此包是為了編譯時不出錯。點Finish。

 

helloClient的結構如圖:

 

先看HelloTest.java的代碼(我把默認生成的Main類刪除了):

  1. package com.hello.client;
  2.  
  3. import javax.ejb.EJB;
  4.  
  5. import hello.ejb.interfaces.Hello;
  6.  
  7. public class HelloTest {
  8.  
  9. @EJB
  10. private static Hello hello;
  11.  
  12. /**
  13. * @param args
  14. */
  15. public static void main(String[] args) {
  16.  
  17. System.out.println(hello.sayHello( "David"));
  18.  
  19. }
  20.  
  21. }
hello變量用了@EJB注解來表示此變量使用容器依賴注入,然后在main方法中調用它的sayHello方法,並傳遞變量“David”。再看META-INF下的MANIFEST.MF文件,它的內容是:
  1. Manifest-Version: 1.0
  2. Class-Path: helloEJB.jar
  3. Main-Class: com.hello.client.HelloTest
Class-Path是之前在選擇helloEJB項目依賴時自動添加的,Main-Class是指定包含main方法的類,這個是必須的,一會兒運行這個項目時就會知道。然后再有一個文件很重要,weblogic-application-client.xml文件,它是這樣被創建的,在META-INF下新建一個文件,選擇Oracle WebLogic Application Client Descriptor:



點下一步,輸入名字:weblogic-application-client.xml.

它的內容是:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <wls:weblogic-application-client xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application-client"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/javaee_5.xsd
  6. http://xmlns.oracle.com/weblogic/weblogic-application-client
  7. http://xmlns.oracle.com/weblogic/weblogic-application-client/1.3/weblogic-application-client.xsd">
  8.  
  9. <!-- 定義要引用的EJB模塊的JNDI名字 -->
  10. <wls:ejb-reference-description>
  11. <!-- 要使用EJB的變量 -->
  12. <wls:ejb-ref-name>com.hello.client.HelloTest/hello</wls:ejb-ref-name>
  13.  
  14. <!-- JNDI命名規則:java:global/[應用程序名]EJB模塊名/Bean名 -->
  15. <wls:jndi-name>java:global/hello/helloEJB/HelloBean</wls:jndi-name>
  16. </wls:ejb-reference-description>
  17.  
  18. </wls:weblogic-application-client>
這個文件是專門用來描述Application Client項目的,若要引用EJB模塊,這個文件是必須的,它指定了要引用ejb模塊的變量的名稱和所在的類,以及

EJB模塊的JNDI名稱,java:global是用來查找remote業務服務接口的。可以從weblogic console里面找到應用程序名,EJB模塊名和Bean名。



4、導出Application Client與EJB包

由於WebLogic的OEPE插件不能直接在Eclipse下運行Application Client,所以我們需要把它和它引用的EJB包導出來,在命令行運行。右擊helloClient,

選擇Export:

 

然后選擇Java EE下的App Client Jar file

 

指定Jar包的名稱和路徑。

點Finish創建,同樣的helloEJB,選擇EJB下的EJB JAR file,過程與App client jar file一樣,這兩個jar包都要放在同一個路徑下。

 

5、運行helloClient

把hello這個Enterprise Application部署到WebLogic下,helloEJB和helloClient也會自動部署:

然后先設置WebLogic的環境變量,進入WebLogic安裝目錄,路徑如下(根據自己的安裝路徑):

里面有setWLSEnv.cmd文件,是用來臨時設置環境變量的,在cmd中運行它:

出現Your enviroment has been set即設置成功。現在可以運行我們的helloClient了,在命令行進入你放置helloClient.jar和helloEJB.jar的文件夾,運行如下命令:

java weblogic.j2eeclient.Main helloClient.jar t3://localhost:7001,這個是weblogic的命令行工具,一般這樣使就夠了,最多后面還可以傳遞幾個main方法里的參數。

出現Hello: David,調用成功。如果當時沒有定義weblogic-application-client.xml的話,就會出現如下錯誤:

三、結束

通過這個項目,對weblogic發布Java EE項目更加熟悉了,而且也了解了怎樣使用WebLogic的t3協議訪問它的實例,並且使helloClient中的EJB變量hello注入成功。做這個項目之前還有幾個測試項目,折騰的時間更長,還熬夜查資料,做不出來就堅決不睡覺,現在終於可以松口氣休息了。大笑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM