2011年2月7日 星期一

[Oracle SOA 應用] 呼叫外部Java類別

開春第一砲,來看看我們在流程中怎麼呼叫一個已經寫好的Java Class。

我就不step-by-step的描述每一個步驟,請你自己新增一個新的SOA專案,並且產生一個Empty Composite。

由於呼叫Java元件屬於系統流程整合的部分,因此,我們使用BPEL流程做為整合的範例。請在Component Palette中托放一個BPEL Process進入Composite中央。再彈出的對話視窗中指定此流程的採用BPEL 1.1或2.0、名稱、同步與非同步、Service名以及是否對外提供SOAP服務:


當回到你的composite editor,你可以看到現在你有個BPEL的Process,並且有個對外的service介面:




Oracle BPM/SOA Suite在呼叫外部Java Class時候所使用的方式是Spring Framework的整合,這代表了兩件事:1) 如果你有現有的專案使用Spring作為開發架構,你將可以很容易的將你所開發完成的元件整合入BPM/SOA專案之中; 2) 如果你只是需要整合現有或新開發的Java Class,你將需要為此Java Class給定他的Spring Context。接下來的範例我會使用一個全新開發的Java Class並介紹你如何在composite中應用到它。

首先,看看我們將使用到的Java Class,很簡單的Java Class,我們只是要呼叫它的hello method:

package blogdemo;

public class SayHello {
  public SayHello() {
    super();
  }
  
  public String hello(String input) {
    return ("Hello " + input);
  }
}

請在JDeveloper裡面產生這個Java Class。

接下來,回到Composite Editor之中,在右手邊的Component Palette中,把一個叫做"Spring Context"的Service Component托放至中央的Component處,你會看到一個彈出的對話窗,用以指定要新產生Spring Context或是延用你現存的Context檔案,在此我們會產生一個新的檔案。


你的composite現在應該長成這樣了:


當你double-click "SayHelloSpring"這個Spring Context之後,你會直接進入source code,內容就和一般Spring Framework的beans.xml一樣,在此,你可以手動自行編輯此檔案,也可以利用右手邊的Component Palette拉入你所需要的元件。

我使用了兩種元件:1) 在 "Spring 2.5 Core" 下拉選單中,我托放了一個bean元件進來,並且指定了它的class為我們剛才產生的blogdemo.SayHello、id與name為sayHello; 2) 在 "WebLogic SCA" 下拉選單中,托放一個Service元件進來,指定他的name為sayHelloService、target為sayHelloBean、type為blogdemo.SayHello,完成後的context檔會長成這個樣子:

<beans xmlns="http://www.springframework.org/schema/beans"
...
...>  
<!--Spring Bean definitions go here-->
  <bean class="blogdemo.SayHello" name="sayHelloBean" id="sayHelloBean"/>
  <sca:service name="sayHelloService" target="sayHelloBean" type="blogdemo.SayHello"/>
</beans>

接下來,回到你的Composite Editor,來作連連看的動作將你的Composite拉成下圖:


Double-click你的BPEL process吧!

(這裡我假設各位已經有BPEL基礎,會另外撰文介紹BPEL元件的開發方式)

基本上,在BPEL內部呼叫Java/Spring元件的方式就和之前你所熟悉的呼叫外部web service一模一樣,你將透過Invoke activity呼叫一個Java/Spring元件的Partner Link,此Partner Link在我們在剛才的連連看中已經自動被產生了,因此,你只需要製作一個Invoke Activity連向此Partner Link,同時產生兩個Assign Activity用以指定input與output變數。


部署你的composite,並且使用Enterprise Manager測試看看吧!



ps. 相信很多人會遇到一種情形,你要使用到的是JAR library中的某個Java Class,而你沒有它的source code可以放進JDeveloper,這種情形你將需要兩個動作:1) 指定此JAR檔於Project Property --> Libraries and Classpath中; 2) 在部署此composite之前,將此JAR檔複製一份到 <project_dir>\SCA-INF\lib目錄之中。

Enjoy your SOA ride!

沒有留言: