ルール・ディクショナリ・エディタのタスク・フローを使用したサンプル・アプリケーションの作成および実行方法

この項では、Oracleルール・ディクショナリ・エディタのタスク・フローを使用してサンプル・アプリケーションを作成および実行するためのステップを示します。

Oracleルール・ディクショナリ・エディタのタスク・フローを使用してADFベースのWebアプリケーションを作成するための前提条件は、使用しているコンピュータでOracle SOA SuiteとOracle JDeveloperのインストールが実行されていることです。

最初のタスクはサンプル・アプリケーションの作成です。

Oracleルール・ディクショナリ・エディタのタスク・フローを使用してサンプル・アプリケーションを作成するには:

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから、「新規」を選択し、次に「カスタム・アプリケーション」を選択して、アプリケーションを作成します。

  3. 図26-35に示すように、「アプリケーション名」フィールドにアプリケーションの名前(useRuleDictTaskFlowAppなど)を入力し、「次へ」をクリックします。

    図26-35 汎用タスク・フロー・アプリケーションの作成

    図26-35の説明が続きます
    「図26-35 汎用タスク・フロー・アプリケーションの作成」の説明
  4. 図26-36に示すように、「プロジェクト名」フィールドにuseRuleDictTaskFlowと入力し、「プロジェクト・テクノロジ」タブで「ADF Faces」が選択されていることを確認します。

    図26-36 タスク・フロー・プロジェクトの作成

    図26-36の説明が続きます
    「図26-36 タスク・フロー・プロジェクトの作成」の説明
  5. 「終了」をクリックしてプロジェクトを作成します。

  6. Oracle JDeveloperの「アプリケーション」ウィンドウで「useRuleDictTaskFlow」プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択して「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。

    「プロジェクト・プロパティ」ダイアログ・ボックスでは、次の手順に従います。

    1. 左側のパネルから「JSPタグ・ライブラリ」を選択します。

    2. 「追加」をクリックし、図26-37に示すように、「タグ・ライブラリの選択」ダイアログ・ボックスの「拡張機能」リストから「ADF Faces Components」を選択し、「OK」をクリックします。

      図26-37 タスク・フロー・アプリケーションのタブ・ライブラリの選択

      図26-37の説明が続きます
      「図26-37 タスク・フロー・アプリケーションのタブ・ライブラリの選択」の説明
    3. 左側のパネルから「ライブラリとクラスパス」を選択し、「ライブラリの追加」をクリックして「ライブラリの追加」ダイアログ・ボックスを表示します。

    4. 図26-38に示すように、「ライブラリ」リストでOracle RulesおよびOracle Rules Dictionaryタスク・フローを選択し、「OK」をクリックします。これにより、Rules SDKおよびルール・ディクショナリ・タスク・フローのJARがプロジェクトに追加されます。

      図26-38 Rules SDKおよびルール・ディクショナリ・タスク・フローの追加

      図26-38の説明が続きます
      「図26-38 Rules SDKおよびルール・ディクショナリ・タスク・フローの追加」の説明
    5. 「OK」をクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。

  7. Oracle JDeveloper「ファイル」メニューから「すべて保存」をクリックし、プロジェクトを保存します。

  8. soaComposerTemplates.jarに定義されているoracle.integration.console.metadata.model.share.MetadataDetailsインタフェースを実装するJavaクラスを作成しますMetadataDetailsインタフェースの詳細は、「MetadataDetailsインタフェース」を参照してください。

    ステップは次のとおりです:

    1. Oracle JDeveloperを開きます。

    2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

    3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「一般」の下にある「Java」を選択します。「項目」「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。

    4. Javaクラスの名前(MyMetaDataDetailsなど)を入力します。

    5. 図26-39に示すように、「オプション属性」の下の「実装」ボックスにMetadataDetailsインタフェースを追加し、「OK」をクリックして、プロジェクトにJavaクラスを作成します。

      図26-39 MetadataDetailsインタフェースを実装するJavaクラスの作成

      図26-39の説明が続きます
      「図26-39 MetadataDetailsインタフェースを実装するJavaクラスの作成」の説明

      MyMetaDataDetails.javaファイルのサンプル・コンテンツを次に示します。

      package useruledicttaskflow;
      
      import java.io.BufferedReader;
      import java.io.FileNotFoundException;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.io.OutputStreamWriter;
      import java.io.UnsupportedEncodingException;
      import java.io.Writer;
      
      import java.net.MalformedURLException;
      import java.net.URL;
      
      import oracle.integration.console.metadata.model.share.MetadataDetails;
      import oracle.integration.console.metadata.model.share.RelatedMetadataPath;
      
      public class MyMetaDataDetails implements MetadataDetails {
          public MyMetaDataDetails() {
              super();
          }
      
          private static final String RULES_FILE1 =
              "file:///<path of Rules file>";
      
          public String getDocument() {
              URL url = null;
              try {
                  url = new URL(RULES_FILE1);
                  return readFile(url);
              } catch (IOException e) {
                  System.err.println(e);
              }
              return "";
          }
      
          public void setDocument(String string) {
              URL url = null;
      
              try {
                  url = new URL(RULES_FILE1);
              } catch (MalformedURLException e) {
                  System.err.println(e);
                  return;
              }
              Writer writer = null;
              try {
                  //os = new FileWriter(url.getPath());
                  writer =
                     new OutputStreamWriter(new FileOutputStream(url.getPath()),
                    "UTF-8");
             } catch (FileNotFoundException e) {
                  System.err.println(e);
                  return;
              } catch (IOException e) {
                  System.err.println(e);
                  return;
              }
              try {
                  writer.write(string);
              } catch (IOException e) {
                  System.err.println(e);
              } finally {
                  if (writer != null) {
                      try {
                          writer.close();
                      } catch (IOException ioe) {
                          System.err.println(ioe);
                      }
                  }
              }
          }
      
          private String readFile(URL dictURL) {
              InputStream is;
              try {
                  is = dictURL.openStream();
              } catch (IOException e) {
                  System.err.println(e);
                  return "";
              }
              BufferedReader reader;
              try {
                 reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
              } catch (UnsupportedEncodingException e) {
                  System.err.println(e);
                  return "";
              }
              String line = null;
              StringBuilder stringBuilder = new StringBuilder();
              String ls = System.getProperty("line.separator");
              try {
                  while ((line = reader.readLine()) != null) {
                      stringBuilder.append(line);
                      stringBuilder.append(ls);
                  }
              } catch (IOException e) {
                  System.err.println(e);
                  return "";
              } finally {
                  try {
                      reader.close();
                  } catch (IOException e) {
                      System.err.println(e);
                  }
              }
              return stringBuilder.toString();
          }
      
      public String getRelatedDocument(RelatedMetadataPath relatedMetadataPath) {
              String currPath =
                  RULES_FILE1.substring(0, RULES_FILE1.indexOf("oracle/rules"));
              String relatedDoc =
                  currPath + "oracle/rules/" + relatedMetadataPath.getValue();
      
              URL url = null;
              try {
                  url = new URL(relatedDoc);
                  return readFile(url);
              } catch (IOException e) {
                  System.err.println(e);
              }
              return "";
          }
      }
      
  9. oracle.integration.console.metadata.model.share.NLSPreferencesインタフェースを実装するMyNLSPreferencesと呼ばれるJavaクラスを作成します。このインタフェースはsoaComposerTemplates.jarに定義されています。

    NLSPreferencesインタフェースの詳細は、「NLSPreferencesインタフェース」を参照してください。

    次のMyNLSPreferences.javaのサンプルでは、NLSPreferencesインタフェースを実装します。

    package useruledicttaskflow;
    
    import java.util.Locale;
    import java.util.TimeZone;
    
    import oracle.integration.console.metadata.model.share.NLSPreferences;
    
    public class MyNLSPreferences implements NLSPreferences {
        private static final String DATE_STYLE = "yyyy-MM-dd";
        private static final String TIME_STYLE = "HH-mm-ss";
        
        public MyNLSPreferences() {
            super();
        }
    
        public Locale getLocale() {
            return Locale.getDefault();
        }
    
        public TimeZone getTimeZone() {
            return TimeZone.getTimeZone("America/Los_Angeles");
        }
    
        public String getDateFormat() {
            return DATE_STYLE;
        }
    
        public String getTimeFormat() {
            return TIME_STYLE;
        }
    }
    
  10. MetadataDetailsおよびNLSPreferencesの実装を返すMyBean.javaというマネージドBeanを作成します。また、oracle.integration.console.metadata.model.share.MetadataDetailsModeオブジェクトを返し、toggleMode()saveDictionary()saveNoValidateDictionary()validate()などのイベント・ハンドラも提供します。

    次に、MyBean.javaファイルのサンプルを示します。

    package useruledicttaskflow;
    
    import javax.el.ELContext;
    import javax.el.ExpressionFactory;
    import javax.el.MethodExpression;
    
    import javax.faces.context.FacesContext;
    import javax.faces.event.PhaseId;
    
    import oracle.adf.view.rich.component.rich.fragment.RichRegion;
    
    import oracle.integration.console.metadata.model.share.MetadataDetails;
    import oracle.integration.console.metadata.model.share.MetadataDetailsMode;
    import oracle.integration.console.metadata.model.share.NLSPreferences;
    
    public class MyBean {
        private MyMetaDataDetails details = null;
        private MetadataDetailsMode mode = MetadataDetailsMode.VIEW;
        private RichRegion regionComp;
        private NLSPreferences nlsPrefs;
    
        public MyBean() {
            super();
        }
    
        public MetadataDetails getMetaDataDetails() {
            if (details != null)
                return details;
    
            details = new MyMetaDataDetails();
            return details;
        }
    
        public MetadataDetailsMode getDetailsMode() {
            return mode;
        }
    
        public void toggleMode() {
            if (mode.equals(MetadataDetailsMode.EDIT))
                mode = MetadataDetailsMode.VIEW;
            else
                mode = MetadataDetailsMode.EDIT;
        }
    
        public void saveDictionary() {
            if (regionComp == null)
                return;
            FacesContext fc = FacesContext.getCurrentInstance();
            ExpressionFactory ef = fc.getApplication().getExpressionFactory();
            ELContext elc = fc.getELContext();
            MethodExpression me =
                ef.createMethodExpression(elc, "doMetadataUpdate", String.class,
                                          new Class[] { });
            regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
                                                PhaseId.ANY_PHASE);
        }
    
        public void saveNoValidateDictionary() {
            if (regionComp == null)
                return;
            FacesContext fc = FacesContext.getCurrentInstance();
            ExpressionFactory ef = fc.getApplication().getExpressionFactory();
            ELContext elc = fc.getELContext();
            MethodExpression me =
                ef.createMethodExpression(elc, "doNoValidateMetadataUpdate",
                                          String.class, new Class[] { });
            regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
                                                PhaseId.ANY_PHASE);
        }
    
        public void validate() {
            if (regionComp == null)
                return;
            FacesContext fc = FacesContext.getCurrentInstance();
            ExpressionFactory ef = fc.getApplication().getExpressionFactory();
            ELContext elc = fc.getELContext();
            MethodExpression me =
                ef.createMethodExpression(elc, "doValidate", String.class,
                                          new Class[] { });
            regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
                                                PhaseId.ANY_PHASE);
        }
    
        public void setRegionComp(RichRegion regionComp) {
            this.regionComp = regionComp;
        }
        public RichRegion getRegionComp() {
            return regionComp;
        }
    
        public NLSPreferences getNlsPrefs() {
            if (nlsPrefs != null)
                return nlsPrefs;
    
            nlsPrefs = new MyNLSPreferences();
            return nlsPrefs;
        }
    }
    
  11. faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。

  12. 図26-40に示すように、「Bean名」フィールドにMyBeanと入力し、「スコープ」リストでsessionを選択して、MyBean.javaを指し示します。

    図26-40 タスク・フロー・アプリケーションでのBean名とスコープの指定

    図26-40の説明が続きます
    「図26-40 タスク・フロー・アプリケーションでのBean名とスコープの指定」の説明