ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Java CAPS Migration Toolユーザーズ・ガイド
11g リリース1 (11.1.1.6.0)
B66433-01
  目次へ移動
目次

前
 
次
 

A Javaコラボレーション定義の変換の例

この付録では、スタンドアロンのJavaコラボレーション定義(JCD)がどのようにSOA Suiteに変換されるか、およびビジネス・プロセスから呼び出されるJCDがどのように変換されるかを示すコード・サンプルを紹介します。

この付録のトピックは、次のとおりです。

JCDの移行の詳細は、1.2.2.1項「Javaコラボレーション定義の移行のサポート」を参照してください。

A.1 スタンドアロンのJCDを移行した場合のサンプル・コード

次の例は、ファイル・インバウンド接続、およびファイルとJMS両方のアウトバウンド接続を持つJCDがどのようにSOA SuiteのSpring Beanクラスに変換されるかを示しています。

スタンドアロンのJCDのサンプル・ソースJCDコード

package CAPSProject1;
public class Collaboration_1
{
   public com.stc.codegen.logger.Logger logger;
   public com.stc.codegen.alerter.Alerter alerter;
   public com.stc.codegen.util.CollaborationContext collabContext;
   public com.stc.codegen.util.TypeConverter typeConverter;

   public void receive( com.stc.connector.appconn.file.FileTextMessage input,
   com.stc.connector.appconn.file.FileApplication FileClient_1,
   com.stc.connectors.jms.JMS JMS_1,employees.EmployeesOTD Employees_1 )
   throws Throwable
   {
     logger.info( "inside receive." );
     com.stc.connectors.jms.Message msg = 
               JMS_1.createTextMessage( input.getText() );
     employees.EMPLOYEES emp = Employees_1.getEMPLOYEES();
     logger.info( emp.getLAST_NAME() );
     JMS_1.send( msg );
     FileClient_1.setText( input.getText() );
     FileClient_1.write();
   }
}

スタンドアロンのJCDの場合にSOA Suite用に生成されるサンプル出力

package CAPSProject1;

public class Collaboration_1 implements
FILEIN_Collaboration_1_input.capsproject1.file.adapter.pcbpel.com.oracle.xmlns.Read_ptt {

  private JMSOUT_Collaboration_1_JMS_  
    1.capsproject1.jms.adapter.pcbpel.com.oracle.xmlns.Produce_Message_ptt
    JMSOUT_Collaboration_1_JMS_1;
  private FILEOUT_Collaboration_1_FileClient_
    1.capsproject1.file.adapter.pcbpel.com.oracle.xmlns.Write_ptt
    FILEOUT_Collaboration_1_FileClient_1;

  public void read(byte opaque[]) {
    com.stc.connector.appconn.file.FileTextMessage input = new 
      com.stc.connector.appconn.file.FileTextMessageImpl();
    input.setByteArray(opaque);
    com.stc.connector.appconn.file.FileApplication FileClient_1 = new 
      com.stc.connector.appconn.file.FileApplication();
    com.stc.connectors.jms.JMS JMS_1 = new com.stc.connectors.jms.JMS();
    employees.EmployeesOTD Employees_1 = new employees.EmployeesOTD();
    try {
       this.receive(input, FileClient_1, JMS_1, Employees_1);
    } catch (Throwable exp_0) {
       throw new java.lang.RuntimeException(exp_0);
    } finally {
    }

  //JMSOUT_Collaboration_1_JMS_1.produceMessage(opaque);
  //FILEOUT_Collaboration_1_FileClient_1.write(opaque);
  }

  public com.stc.codegen.logger.Logger logger;
  public com.stc.codegen.alerter.Alerter alerter;
  public com.stc.codegen.util.CollaborationContext collabContext;
  public com.stc.codegen.util.TypeConverter typeConverter;
  public void receive(com.stc.connector.appconn.file.FileTextMessage input, 
      com.stc.connector.appconn.file.FileApplication
      FileClient_1, com.stc.connectors.jms.JMS JMS_1, employees.EmployeesOTD 
      Employees_1) throws Throwable {
    logger.info("inside receive.");
    com.stc.connectors.jms.Message msg = JMS_1.createTextMessage(input.getText());
    employees.EMPLOYEES emp = Employees_1.getEMPLOYEES();
    logger.info(emp.getLAST_NAME());
    JMS_1.send(msg);
    FileClient_1.setText(input.getText());
    FileClient_1.write();
  }

  public final void setJMSOUT_Collaboration_1_JMS_1(JMSOUT_Collaboration_1_JMS_ 
     1.capsproject1.jms.adapter.pcbpel.com.oracle.xmlns.Produce_Message_ptt 
     JMSOUT_Collaboration_1_JMS_1) {
    this.JMSOUT_Collaboration_1_JMS_1 = JMSOUT_Collaboration_1_JMS_1;
  }

  public final JMSOUT_Collaboration_1_JMS_1.capsproject1.jms.adapter.pcbpel.com. 
     oracle.xmlns.Produce_Message_ptt getJMSOUT_Collaboration_1_JMS_1() {
     return this.JMSOUT_Collaboration_1_JMS_1;
  }

  public final void setFILEOUT_Collaboration_1_FileClient_1(FILEOUT_Collaboration_
     1_FileClient_1.capsproject1.file.adapter.pcbpel.com.
     oracle.xmlns.Write_ptt FILEOUT_Collaboration_1_FileClient_1) {
    this.FILEOUT_Collaboration_1_FileClient_1 = FILEOUT_Collaboration_1_
     FileClient_1;
  }

  public final FILEOUT_Collaboration_1_FileClient_1.capsproject1.file.adapter. 
     pcbpel.com.oracle.xmlns.Write_ptt getFILEOUT_Collaboration_1_FileClient_1() {
    return this.FILEOUT_Collaboration_1_FileClient_1;
  }

  public final void setLogger(com.stc.codegen.logger.Logger logger) {
    this.logger = logger;
  }

  public final com.stc.codegen.logger.Logger getLogger() {
    return this.logger;
  }

  public final void setAlerter(com.stc.codegen.alerter.Alerter alerter) {
    this.alerter = alerter;
  }

  public final com.stc.codegen.alerter.Alerter getAlerter() {
    return this.alerter;
  }

  public final void setCollabContext(com.stc.codegen.util.CollaborationContext  
     collabContext) {
    this.collabContext = collabContext;
  }

  public final com.stc.codegen.util.CollaborationContext getCollabContext() {
   return this.collabContext;
  }

  public final void setTypeConverter(com.stc.codegen.util.TypeConverter 
     typeConverter) {
    this.typeConverter = typeConverter;
  }

  public final com.stc.codegen.util.TypeConverter getTypeConverter() {
    return this.typeConverter;
  }
}

前述のサンプルを見ると、移行後のJCDクラスではSOA Suiteファイル・アダプタ・インタフェースが実装され、実装されたインタフェース・メソッドpublic void read(byte opaque[])で元のJCDの次のメソッドが置換されていることが確認できます。

public void receive(com.stc.connector.appconn.file.FileTextMessage input,
com.stc.connector.appconn.file.FileApplication FileClient_1,
com.stc.connectors.jms.JMS JMS_1, employees.EmployeesOTD Employees_1)

これは、入力ディレクトリに入力ファイルが存在する場合のトリガー・メソッドです。SOA Suiteファイル・アダプタの構成は、移行ツールによって生成されたJCAファイル内に定義されます。この構成は、Oracle JDeveloperで変更できます。

このインタフェース・メソッドでは、元のJCDのメソッドが呼び出されます。次の2つのクラス・フィールドは、アウトバウンドSOA Suiteファイル・アダプタおよびJMSアダプタを表します。

private JMSOUT_Collaboration_1_JMS_1.capsproject1.jms.adapter.pcbpel.com.oracle.xmlns.Produce_Message_ptt JMSOUT_Collaboration_1_JMS_1;
private FILEOUT_Collaboration_1_FileClient_1.capsproject1.file.adapter.pcbpel.com.oracle.xmlns.Write_ptt FILEOUT_Collaboration_1_FileClient_1;

前述の2つのクラス・フィールドは、元のJCDの次のクラス・フィールドと同様にインスタンス化されませんが、それらのgetterおよびsetterメソッドは生成されます。これにより、SOA Suiteのコンテキスト・インジェクションを使用して、それらをインスタンス化できます。

public com.stc.codegen.logger.Logger logger;
public com.stc.codegen.alerter.Alerter alerter;
public com.stc.codegen.util.CollaborationContext collabContext;
public com.stc.codegen.util.TypeConverter typeConverter;

A.2 ビジネス・プロセスから呼び出されるJCDを移行した場合のサンプル・コード

次の例は、ビジネス・プロセスから呼び出されるJCDがどのようにSOA SuiteのSpring Beanクラスに変換されるかを示しています。

ビジネス・プロセスから呼び出されるJCDのサンプルJCDソース・コード

package Jcd_Bpel_Project;

public class Collaboration_3
{
  public com.stc.codegen.logger.Logger logger;
  public com.stc.codegen.alerter.Alerter alerter;
  public com.stc.codegen.util.CollaborationContext collabContext;
  public com.stc.codegen.util.TypeConverter typeConverter;
  public void op1_vikas( dtd.otdInputDTD_2111422138.DBemployee input, 
     dtd.otdOutputDTD_1854792262.DBemployee output )
    throws Throwable
  {
    output.setEmpNo( input.getEmpNo() );
    output.setLastname( input.getLastname() );
    output.setFirstname( input.getFirstname() );
    output.setRate( input.getRate() );
    output.setLastDate( input.getLastDate() );
    Thread.sleep( 120000 );
  }
}

ビジネス・プロセスから呼び出されるJCDの場合に生成されるサンプル出力コード

package Jcd_Bpel_Project;

import oracle.migrationtool.migration.caps.runtime.OTDUtil;

public class Collaboration_3 implements urn_stc_egate_jce_collaboration_1wsdl.ExecutePortType {
  private stc.egate.otd.dtd.otdoutputdtd_1854792262.DBemployee output;

  public stc.egate.otd.dtd.otdoutputdtd_1854792262.DBemployee 
     op1Vikas(stc.egate.otd.dtd.otdinputdtd_2111422138.DBemployee DBemployee)
     throws urn_stc_egate_jce_collaboration_1wsdl.JavaExceptionMessage {
    this.output = new stc.egate.otd.dtd.otdoutputdtd_1854792262.DBemployee();
    try {
      this.op1_vikas(DBemployee, this.output);
    } catch (Throwable exp_0) {
      throw new urn_stc_egate_jce_collaboration_1wsdl.JavaExceptionMessage
        (exp_0.getMessage(), null, exp_0);
    } finally {
    }
    return this.output;
  }

  public com.stc.codegen.logger.Logger logger;
  public com.stc.codegen.alerter.Alerter alerter;
  public com.stc.codegen.util.CollaborationContext collabContext;
  public com.stc.codegen.util.TypeConverter typeConverter;

  public void op1_vikas(stc.egate.otd.dtd.otdinputdtd_2111422138.DBemployee input,
   stc.egate.otd.dtd.otdoutputdtd_1854792262.DBemployee output) throws Throwable {
    output.setEmpNo(input.getEmpNo());
    output.setLastname(input.getLastname());
    output.setFirstname(input.getFirstname());
    output.setRate(input.getRate());
    output.setLastDate(input.getLastDate());
    Thread.sleep(120000);
  }

  public final void setOutput(stc.egate.otd.dtd.otdoutputdtd_1854792262.DBemployee
     output) {
    this.output = output;
  }

  public final stc.egate.otd.dtd.otdoutputdtd_1854792262.DBemployee getOutput() {
    return this.output;
  }

  public final void setLogger(com.stc.codegen.logger.Logger logger) {
    this.logger = logger;
  }

  public final com.stc.codegen.logger.Logger getLogger() {
    return this.logger;
  }

  public final void setAlerter(com.stc.codegen.alerter.Alerter alerter) {
    this.alerter = alerter;
  }

  public final com.stc.codegen.alerter.Alerter getAlerter() {
    return this.alerter;
  }

  public final void setCollabContext(com.stc.codegen.util.CollaborationContext    
     collabContext) {
    this.collabContext = collabContext;
  }

  public final com.stc.codegen.util.CollaborationContext getCollabContext() {
    return this.collabContext;
  }

  public final void setTypeConverter(com.stc.codegen.util.TypeConverter 
     typeConverter) {
    this.typeConverter = typeConverter;
  }

  public final com.stc.codegen.util.TypeConverter getTypeConverter() {
    return this.typeConverter;
  }
}

変換後のクラスではJAXBプロキシ・インタフェースが実装され、JCDの元のOTDクラスはJAXBオブジェクトに置換されます。Springコンテキスト・インジェクション用にgetterおよびsetterが生成されます。

元のJCD内のコメントのほとんどは、移行後のSOA Spring Beanクラス内に保持されます。後ろにJava文が続かないコメントは、移行時に保持されません。コメントが保持されるようにするには、元のJCD内の後ろにJava文が続かないコメントの後にセミコロン(;)を追加します。