Eclipse+Weblogic 12開發簡單的Enterprise Application

來源:互聯網
上載者:User

學到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也可以訪問它提供的服務,代碼如下:

package hello.ejb.interfaces;import javax.ejb.Remote;@Remotepublic interface Hello {public String sayHello(String name);}


HelloBean是一個stateless session bean。當然stateful也可以,畢竟就這一個Application Client,它的代碼如下:

package hello.ejb;import javax.ejb.Stateless;import hello.ejb.interfaces.Hello;@Statelesspublic class HelloBean implements Hello {@Overridepublic String sayHello(String name) {return "Hello: " + name;}}
一個很簡單的方法,給name變數加上“Hello: ”,然後返回。

3、設定Application Client

右擊helloClient,選擇properties。



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



helloClient的結構如圖:



先看HelloTest.java的代碼(我把預設產生的Main類刪除了):

package com.hello.client;import javax.ejb.EJB;import hello.ejb.interfaces.Hello;public class HelloTest {@EJBprivate static Hello hello;/** * @param args */public static void main(String[] args) {System.out.println(hello.sayHello("David"));}}
hello變數用了@EJB註解來表示此變數使用容器依賴注入,然後在main方法中調用它的sayHello方法,並傳遞變數“David”。再看META-INF下的MANIFEST.MF檔案,它的內容是:

Manifest-Version: 1.0Class-Path: helloEJB.jarMain-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.


它的內容是:

<?xml version="1.0" encoding="UTF-8"?><wls:weblogic-application-client xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application-client" 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/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application-client http://xmlns.oracle.com/weblogic/weblogic-application-client/1.3/weblogic-application-client.xsd"><!-- 定義要引用的EJB模組的JNDI名字  --><wls:ejb-reference-description><!-- 要使用EJB的變數 --><wls:ejb-ref-name>com.hello.client.HelloTest/hello</wls:ejb-ref-name><!-- JNDI命名規則:java:global/[應用程式名稱]EJB模組名/Bean名 --><wls:jndi-name>java:global/hello/helloEJB/HelloBean</wls:jndi-name></wls:ejb-reference-description></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注入成功。做這個項目之前還有幾個測試專案,折騰的時間更長,還熬夜查資料,做不出來就堅決不睡覺,現在終於可以鬆口氣休息了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.