Javaのルールエンジンのリスト
1. 概要
この記事では、Javaで最も人気のあるルールエンジンのいくつかについて説明します。
ミッションクリティカルなアプリケーション内では、ソースコード内でビジネスロジックを維持するプロセスが複雑になりすぎる場合があります。 ソースコードからビジネスロジックを分離することにより、ビジネスルールを使用して開発と保守を容易にすることができます。
Javaの世界では、ほとんどのルールエンジンライブラリはJava Rule API Engineとして知られるJSR94標準を実装しています。
2. よだれ
Droolsは、ビジネスルール管理システム(BRMS)ソリューションです。 Droolsは、プロセス、イベントアクティビティ、タスクなどの標準化のためのビジネスプロセス管理ツールであるjBPMと統合できます。
詳細をお読みになりたい場合は、integration with Springに関する記事とともに、Droolsの概要をhereでご覧いただけます。
3. OpenLタブレット
OpenL Tabletsは、Excelデシジョンテーブルに基づくビジネスルール管理システムおよびビジネスルールエンジンです。 このフレームワークで使用されるテーブルの形式はビジネスユーザーになじみがあるため、ビジネスユーザーと開発者のギャップを埋めます。
以下は、決定テーブルを含むExcelファイルを使用してフレームワークがどのように機能するかの簡単な例です。 まず、org.openl.coreおよびorg.openl.rulesモジュールに依存する依存関係をインポートしましょう。
org.openl
org.openl.core
5.19.4
org.openl.rules
org.openl.rules
5.19.4
ここで、User POJO:
public class User {
private String name;
// getters and setters
}
そして、適用されたルールの結果を表す列挙型:
public enum Greeting {
// ...
}
Caseクラスは、結果につながる変数でUserオブジェクトをラップします。
public class Case {
// Variables to infer outcomes
// getters and setters
}
インターフェイスIRuleには、Excelファイルによって挿入されたルールが含まれています。
public interface IRule {
void helloUser(Case aCase, final Response response);
}
Responseクラスは、適用されたルールの戻りを処理します。
public class Response {
private String result;
private Map map = new HashMap<>();
}
ルールの実行をトリガーするメインクラス:
public class Main {
private IRule instance;
public static void main(String[] args) {
Main rules = new Main();
// setup user and case here
rules.process(aCase);
}
public void process(Case aCase) {
EngineFactory engineFactory = new RulesEngineFactory(
getClass().getClassLoader()
.getResource("openltablets/HelloUser.xls"), IRule.class);
instance = engineFactory.newEngineInstance();
instance.helloUser(aCase, new Response());
}
}
4. 簡単なルール
Easy Rulesは、ビジネスを定義するための軽量でPOJOベースのフレームワークを提供するシンプルなJavaルールエンジンです。 複合パターンを使用して、プリミティブルールから複雑なルールを作成できます。
このフレームワークは、ほとんどの従来のルールエンジンとは異なり、XMLファイルまたはドメイン固有言語ファイルを使用して、アプリケーションからルールを分離しません。 アノテーションベースのクラスとメソッドを使用して、ビジネスロジックをアプリケーションに注入します。
Easy Rulesは、開発者がアプリケーション自体から完全に分離されたビジネスロジックを使用してアプリケーションを作成および保守するのに便利です。 一方、this framework doesn’t implement the JSR94 standardとビジネスロジックは、Javaコードに直接コーディングする必要があります。
ここでは、「Hello、world」の例を示します。 easy-rules-coreモジュールに基づいて必要な依存関係をインポートしましょう。
org.jeasy
easy-rules-core
3.0.0
次に、ルールを定義するクラスを作成します。
@Rule(name = "Hello World rule", description = "Always say hello world")
public class HelloWorldRule {
@Condition
public boolean when() {
return true;
}
@Action
public void then() throws Exception {
System.out.println("hello world");
}
}
最後に、メインクラスを作成します。
public class Launcher {
public static void main(String... args) {
// create facts
Facts facts = new Facts();
// create rules
Rules rules = new Rules();
rules.register(new HelloWorldRule());
// create a rules engine and fire rules on known facts
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts);
}
}
5. RuleBook
RuleBookは、Java 8ラムダと責任の連鎖パターンを活用して、単純なBDDアプローチを使用してルールを定義するJavaフレームワークです。
ほとんどのルールエンジンと同様に、RuleBookは、ルールに提供されるデータである「Facts」の概念を利用します。 RuleBookを使用すると、ルールでファクトの状態を変更できます。ファクトは、チェーンのさらに下のルールで読み取りおよび変更できます。 あるタイプのデータ(Facts)を読み込み、別のタイプの結果を出力するルールの場合、RuleBookにはDecisionsがあります。
RuleBookは、Java DSLを使用してSpringと統合できます。
ここでは、RuleBookを使用した簡単な「Hello、world」の例を示します。 rulebook-coreモジュールに依存している依存関係を追加しましょう。
com.deliveredtechnologies
rulebook-core
0.6.2
次に、ルールを作成します。
public class HelloWorldRule {
public RuleBook
最後に、メインクラス:
public static void main(String[] args) {
HelloWorldRule ruleBook = new HelloWorldRule();
ruleBook
.defineHelloWorldRules()
.run(new FactMap<>());
}
6. 結論
この簡単な記事では、ビジネスロジックの抽象化のためのエンジンを提供するいくつかの有名なライブラリについて説明しました。
いつものように、この記事の例はGitHub repositoryで入手できます。