- Oracle SOAスイートでのSOAアプリケーションの開発
- ビジネス・ルール・サービス・コンポーネントの使用
- 宣言コンポーネントおよびタスク・フローの使用
- Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントの概要
- ルール・ディクショナリ・エディタ・コンポーネントを使用したサンプル・アプリケーションの作成および実行方法
- RuleDictionaryModelオブジェクトの作成方法
RuleDictionaryModelオブジェクトの作成方法
ルール・ディクショナリ・エディタ・コンポーネントには、RuleDictionaryModel
オブジェクトを作成するために、oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModel
オブジェクトが必要です。
RuleDictionaryModelオブジェクトを作成するには:
- プロジェクトにJavaクラス(たとえばSomeBean.java)を作成するには、「ファイル」メニューから、「新規」を選択し、次に「Javaクラス」を選択します。
- SomeBean.javaで、RuleDictionaryModelオブジェクトを返すメソッドを指定します。このルール・ファイルの場所およびパスを指定する必要があります。
SomeBean.java
の例を次に示します。package view; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Serializable; import java.net.MalformedURLException; import java.net.URL; import oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModel; import oracle.bpel.ruledictionarydc.model.impl.RulesEditorPreferencesImpl; import oracle.bpel.ruledictionarydc.model.interfaces.RulesEditorPreferences; import oracle.bpel.rulesdc.model.decisiontable.impl.DecisionTablePrefsImpl; import oracle.bpel.rulesdc.model.decisiontable.interfaces.DecisionTablePrefs; import oracle.bpel.rulesdc.model.impl.IfThenPreferencesImpl; import oracle.bpel.rulesdc.model.interfaces.IfThenPreferences; import oracle.bpel.rulessharedutils.impl.RulesSharedUtils; import oracle.rules.sdk2.decisionpoint.DecisionPointDictionaryFinder; import oracle.rules.sdk2.dictionary.DictionaryFinder; import oracle.rules.sdk2.dictionary.RuleDictionary; import oracle.rules.sdk2.exception.SDKException; public class SomeBean { private RuleDictionaryModel ruleDictModel; private RulesEditorPreferences rulesEditorPrefs; private boolean viewOnly = true; //on windows //private static final String RULES_FILE1 = "file:///D:/scratch/asuraj/system_MAIN/rules_ files/insurancequoteproject/CarInsuranceRules.rules"; // on linux private static final String RULES_FILE1 = "file:////scratch/asuraj/backup/rules_files/ApprovalRules.rules"; public SomeBean() { super(); } public RuleDictionaryModel getRuleDictModel() { if (ruleDictModel != null) return ruleDictModel; ruleDictModel = new RuleDictionaryModel(openRulesDict(RULES_FILE1, new DecisionPointDictionaryFinder())); return ruleDictModel; } public void saveDictionary() { RuleDictionary dict = null; if (this.ruleDictModel == null) return; dict = this.ruleDictModel.getRuleDictionary().getDictionary(); if (dict == null) return; if (dict.isModified()) RulesSharedUtils.updateDictionary(dict); if (!dict.isTransactionInProgress()) saveDictionary(dict, RULES_FILE1); } public void validate() { if (this.ruleDictModel == null) return; this.ruleDictModel.validate(); } public void toggleMode() { viewOnly = !viewOnly; } public boolean isViewOnly() { return viewOnly; } public RulesEditorPreferences getRulesEditorPrefs() { if (rulesEditorPrefs == null) rulesEditorPrefs = new MyRulesEditorPrefs(); return rulesEditorPrefs; } //utility methods public static RuleDictionary openRulesDict(String fileName, DictionaryFinder finder) { URL url = null; try { url = new URL(fileName); } catch (MalformedURLException e) { System.err.println(e); return null; } RuleDictionary dict = null; try { dict = readFromDisk(url, finder); } catch (Exception e) { System.err.println(e); return null; } return dict; } public static RuleDictionary readFromDisk(URL dictURL, DictionaryFinder finder) { BufferedReader buf = null; try { buf = new BufferedReader(new InputStreamReader(dictURL.openStream(), "UTF-8")); return RuleDictionary.readDictionary(buf, finder); } catch (SDKException e) { System.err.println(e); } catch (IOException e) { System.err.println(e); } finally { if (buf != null) try { buf.close(); } catch (IOException e) { System.err.println(e); } } return null; } public static boolean saveDictionary(RuleDictionary dict, String ruleFileName) { if (dict == null || ruleFileName == null) return false; if (dict.isTransactionInProgress()) System.out.println("Transaction in progress, cannot save dictionary"); try { writeToDisk(dict, new URL(ruleFileName)); } catch (MalformedURLException e) { System.err.println(e); return false; } catch (Exception e) { System.err.println(e); return false; } return true; } public static void writeToDisk(RuleDictionary dic, URL dictURL) { OutputStreamWriter writer = null; try { writer = new OutputStreamWriter(new FileOutputStream(dictURL.getPath()), "UTF-8"); dic.writeDictionary(writer); } catch (IOException e) { System.err.println(e); } catch (SDKException e) { System.err.println(e); } finally { if (writer != null) try { writer.close(); } catch (IOException e) { System.err.println(e); } } } public class MyRulesEditorPrefs extends RulesEditorPreferencesImpl implements Serializable { private DecisionTablePrefs dtPrefs; private IfThenPreferences ifThenPrefs; @Override public DecisionTablePrefs getDecisionTablePreferences() { if (dtPrefs == null) dtPrefs = new DTPreferences(); return dtPrefs; } @Override public IfThenPreferences getIfThenPreferences() { if (ifThenPrefs == null) ifThenPrefs = new MyIfThenPrefs(); return ifThenPrefs; } @Override public boolean isShowRSButtons() { return true; } } public class MyIfThenPrefs extends IfThenPreferencesImpl implements Serializable { @Override public boolean isGenericAction() { return true; } @Override public boolean isGenericCondition() { return true; } } public class DTPreferences extends DecisionTablePrefsImpl implements Serializable { @Override public boolean isShowDTButtons() { return true; } } }
adfc-config.xml
のSomeBean.javaを指します(Bean名はsomeBean
で、スコープはsessionです)。たとえば、adfc-config.xml
です。- 「項目」で「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。
<?xml version="1.0" encoding="UTF-8" ?> <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2"> <managed-bean id="__1"> <managed-bean-name>someBean</managed-bean-name> <managed-bean-class>view.SomeBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> </adfc-config>
- ADF/JSFフレームワークによって、SomeBean.javaへのコールが複数回実行され、ユーザー・インタフェースがレンダリングされます。たとえば、someBean.ruleDictModelが複数回コールされます。そのため、毎回再作成するのではなく、ruleDictModelを一度作成したら、それをキャッシュして返すことは、より効率的です。