Spring Boot での Red Hat Decision Manager ビジネスアプリケーションの作成
ガイド
概要
はじめに
開発者は、business application の Web サイトから Spring Boot スターターを使用して、Red Hat Decision Manager ビジネスアプリケーションをすばやく作成して設定し、既存のサービスやクラウドにデプロイできます。
第1章 Red Hat Decision Manager ビジネスアプリケーション
Spring Framework は、Java アプリケーション開発用に包括的なインフラストラクチャーサポートを提供する Java プラットフォームです。Spring Boot は、Spring Boot スターターをベースにした、軽量フレームワークです。Spring Boot スターターは、pom.xml
ファイルで、このファイルにはアプリケーションに追加可能な依存関係の記述子セットが含まれます。
Red Hat Decision Manager ビジネスアプリケーションは、特定のビジネス機能を提供する個別サービスを柔軟に、UI に依存せず、論理的にグループ化します。ビジネスアプリケーションは、Spring Boot スターターをベースにしています。通常、個別にデプロイされ、個別にバージョン管理できます。完全なビジネスアプリケーションを使用すると、ドメインは特定のビジネスゴール (たとえば、順序管理や補助管理など) を達成できます。
business application の Web サイトで、Process Automation Manager、Decision Manager、または Business Optimizer ビジネスアプリケーションを作成できます。ビジネスアプリケーションを作成して設定した後には、OpenShift で、既存のサービスやクラウドにデプロイできます。
ビジネスアプリケーションには、以下のプロジェクト 1 つ以上と、同じ型のプロジェクトを複数含めることができます。
- ビジネスアセット (KJAR): ビジネスプロセス、ルール、フォームが含まれており、Decision Central へのインポートが簡単です。
- データモデル: データモデルのプロジェクトでは、サービスプロジェクトやビジネスアセットプロジェクト間で共有される、共通のデータ構造を提供しています。これにより、適切なカプセル化、再利用の促進、ショートカットの軽減が可能になります。各サービスプロジェクトは、独自の公開データモデルを公開できます。
- サービス: 実際のサービスにさまざまな機能を提供する、展開可能なプロジェクト。これには、ビジネスを管理するビジネスロジックが含まれます。多くの場合に、サービスプロジェクトにはビジネスアセットとデータモデルプロジェクトが含まれます。ビジネスアプリケーションは、サービスをより小さなコンポーネントサービスプロジェクトに分割して、管理性を向上できます。
第2章 ビジネスアプリケーションの作成
business application の Web サイトで、Spring Boot フレームワークを使用してすばやく簡単にビジネスアプリケーションを作成できます。これにより、Red Hat Decision Manager のインストールと設定の必要性がなくなります。
手順
Web ブラウザーで、以下の URL を入力します。
https://start.jbpm.org
- Configure your business application をクリックします。
- Decision Management をクリックし、Next をクリックします。
- パッケージとアプリケーション名を入力します。
Version メニューから Enterprise 7.2 を選択し、Next をクリックします。
注記Enterprise 7.2 を選択して、Red Hat Decision Manager ビジネスアプリケーションを作成する必要があります。
プロジェクトに追加するプロジェクトの種類を選択します。プロジェクトタイプは、複数追加できます。
- ビジネスアセット: ビジネスプロセス、ルール、フォームが含まれており、Decision Central に簡単にインポートできます。また、ケースなどのように適応性があり、動的なアセットを追加する場合は、動的アセット を使用します。
- データモデル: サービスプロジェクトやビジネスアセットプロジェクト間で共有される、共通のデータ構造を提供します。これにより、適切なカプセル化、再利用の促進、ショートカットの軽減が可能になります。各サービスプロジェクトは、独自の公開データモデルを公開できます。
- サービス: ビジネスを動かすビジネスロジックが含まれます。
Generate business application をクリックします。
<business-application>.zip
ファイルがダウンロードされます。<business-application>
は Application Name のボックスで入力した名前に置き換えてください。-
<business-application>.zip
ファイルを展開します。 -
テキストエディターで、
<business-application>/business-application-service/src/main/docker/settings.xml
ファイルを開きます。 以下のリポジトリーを
repositories
要素に追加します。<repository> <id>jboss-enterprise-repository-group</id> <name>Red Hat JBoss Enterprise Maven Repository</name> <url>https://maven.repository.redhat.com/ga/</url> <layout>default</layout> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <updatePolicy>daily</updatePolicy> </snapshots> </repository>
以下のプラグインを
pluginRepositories
要素に追加します。<pluginRepository> <id>jboss-enterprise-repository-group</id> <name>Red Hat JBoss Enterprise Maven Repository</name> <url>https://maven.repository.redhat.com/ga/</url> <layout>default</layout> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <updatePolicy>daily</updatePolicy> </snapshots> </pluginRepository>
これにより、お使いのビジネスアプリケーションに、製品化した Maven リポジトリーが追加されます。
第3章 ビジネスアプリケーションの設定
3.1. ビジネスアプリケーションの認証と承認
デフォルトでは、全 REST エンドポイント (/rest/
を含む URL) を保護することで、ビジネスアプリケーションのセキュリティーを確保します。さらに、ビジネスアプリケーションには認証情報のログが 2 セットあり、ユーザーが開発モードで Decision Central に接続できるようになっています。ID が user
、パスワードが user
のユーザーと、ID が kieserver
、パスワードが kieserver1!
のユーザーがあります。
認証も承認も Spring セキュリティーをもとに行われます。実稼働環境で使用するすべてのビジネスアプリケーションで、このセキュリティー設定を変更してください。設定は、<business-application>/<business-application>-services/src/main/java/com/company/service/DefaultWebSecurityConfig.java
ファイルで変更できます。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration("kieServerSecurity") @EnableWebSecurity public class DefaultWebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() .antMatchers("/rest/*").authenticated() .and() .httpBasic(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("user").password("user").roles("kie-server"); auth.inMemoryAuthentication().withUser("kieserver").password("kieserver1!").roles("kie-server"); } }
3.2. application.properties ファイルの設定
ビジネスアプリケーションを作成したら、application.properties
ファイルで、複数のコンポーネントを設定してアプリケーションをカスタマイズできます。
前提条件
-
business application の Web サイトを使用して作成した
<business-application>.zip
ファイルがある。
手順
-
<business-application>.zip
ファイルを展開して、<business-application>/<business-application>-service/src/main/resources
フォルダーに移動します。 -
テキストエディターで
application.properties
ファイルを開きます。 たとえば、以下のように REST エンドポイントのホスト、ポート、およびパスを設定します。
server.address=localhost server.port=8090 cxf.path=/rest
以下のように、簡単に識別できるように Decision Server (
kieserver
) を設定します。kieserver.serverId=<business-application>-service kieserver.serverName=<business-application>-service kieserver.location=http://localhost:8090/rest/server kieserver.controllers=http://localhost:8080/jbpm-console/rest/controller
以下の表で、ビジネスアプリケーションに設定可能な Decision Server のパラメーターを一覧で紹介します。
表3.1 kieserver パラメーター パラメーター 値 説明 kieserver.serverId
string
Decision Manager コントローラーに接続時にビジネスアプリケーションを識別するために使用する ID。
kieserver.serverName
string
Decision Manager コントローラーへの接続時にビジネスアプリケーションを識別するのに使用する名前。
kieserver.serverId
パラメーターに使用した文字と同じものを使用できます。kieserver.location
URL
REST API を使用する他のコンポーネントがこのサーバーの場所を識別するために使用します。
server.address
およびserver.port
で定義されている場所は使用しないでください。kieserver.controllers
URL
コントローラー URL のコンマ区切りリスト
ビジネスアプリケーションの作成時に Business Automation を選択した場合は、以下のコンポーネントの中から、ランタイムに起動するコンポーネントを指定します。
表3.2 kieserver ケーパビリティーパラメーター パラメーター 値 説明 kieserver.drools.enabled
true, false
Decision Manager コンポーネントを有効または無効にします。
kieserver.dmn.enabled
true, false
DMN (Decision Model and Notation) コンポーネントを有効または無効にします。
3.3. Red Hat Single Sign-On を使用したビジネスアプリケーションの設定
Red Hat Single Sign-On (RH SSO) を使用して、サービス間のシングルサインオンを有効にし、一元的にユーザーとロールの設定や管理ができます。
前提条件
-
business applications
の Web サイトを使用して作成した <business-application>.zip ファイルがある。
手順
- Red Hat シングルサインオン (SSO) をダウンロードし、インストールしている。手順は、Red Hat Single Sign-On スタートガイド を参照してください。
RH SSO を設定します。
- デフォルトのマスターレルムを使用するか、新しいレルムを作成します。
-
springboot-app
クライアントを作成して、パブリックにAccessType
を追加します。 以下のように、ローカルの設定に合わせて有効なリダイレクト URI と Web オリジンを設定します。
-
有効なリダイレクト URI:
http://localhost:8090/*
-
Web オリジン:
http://localhost:8090
-
有効なリダイレクト URI:
- アプリケーションで使用するレルムロールを作成します。
- アプリケーションで使用するユーザーを作成してロールを割り当てます。
サービスプロジェクトの
pom.xml
ファイルに以下の依存関係を追加します。<dependencyManagement> <dependencies> <dependency> <groupId>org.keycloak.bom</groupId> <artifactId>keycloak-adapter-bom</artifactId> <version>${version.org.keycloak}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> .... <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> </dependency>
application.properties
ファイルを更新します。# keycloak security setup keycloak.auth-server-url=http://localhost:8100/auth keycloak.realm=master keycloak.resource=springboot-app keycloak.public-client=true keycloak.principal-attribute=preferred_username keycloak.enable-basic-auth=true
DefaultWebSecurityConfig.java
ファイルを変更して、RH SSO で Spring Security が正しく動作することを確認します。import org.keycloak.adapters.KeycloakConfigResolver; import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper; import org.springframework.security.core.session.SessionRegistryImpl; import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy; import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy; @Configuration("kieServerSecurity") @EnableWebSecurity public class DefaultWebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); http .csrf().disable() .authorizeRequests() .anyRequest().authenticated() .and() .httpBasic(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider(); SimpleAuthorityMapper mapper = new SimpleAuthorityMapper(); mapper.setPrefix(""); keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(mapper); auth.authenticationProvider(keycloakAuthenticationProvider); } @Bean public KeycloakConfigResolver KeycloakConfigResolver() { return new KeycloakSpringBootConfigResolver(); } @Override protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); } }
3.4. ビジネスアプリケーションのユーザーグループプロバイダーの設定
Red Hat Decision Manager を使用すると、人間中心のアクティビティーを管理できます。2 つの KIE API エントリーポイントを使用して、ユーザーリポジトリーおよびグループリポジトリーを統合できます。
-
UserGroupCallback
: ユーザーまたはグループが存在するかどうかを確認して、特定のユーザーのグループの情報を集めます。 -
UserInfo
: メールアドレスや設定言語など、ユーザーおよびグループの追加情報を収集します。
すぐに使用できるコードまたはカスタムの開発コードなど、代わりのコードを指定すると、これらの両コンポーネントを設定できます。
UserGroupCallback
コンポーネントについては、デフォルトの実装はアプリケーションのセキュリティーコンテキストをもとにしているため、この実装が保持されます。このように、どのバックエンドストアを認証や承認 (例: RH-SSO) に使用するかは重要ではありません。ユーザーやグループの情報収集用の情報源として、この実装が自動的に使用されます。
UserInfo
コンポーネントは、より詳細にわたる情報を収集するため、別のコンポーネントとなっています。
前提条件
-
business application の Web サイトを使用して作成し、ビジネス自動化プロジェクトが含まれる
<business-application>.zip
ファイルがある。
手順
UserGroupCallback
の別の実装を提供するには、以下のコードを、アプリケーションクラスに追加するか、@Configuration
のアノテーションが付いた別のクラスに追加します。@Bean(name = "userGroupCallback") public UserGroupCallback userGroupCallback(IdentityProvider identityProvider) throws IOException { return new MyCustomUserGroupCallback(identityProvider); }
UserInfo
の別の実装を提供するには、以下のコードを、アプリケーションクラスに追加するか、@Configuration
のアノテーションが付いた別のクラスに追加します。@Bean(name = "userInfo") public UserInfo userInfo() throws IOException { return new MyCustomUserInfo(); }
3.5. Swagger ドキュメントの有効化
Red Hat Decision Manager ビジネスアプリケーションのサービスプロジェクトで利用可能なすべてのエンドポイントに関する Swagger ベースのドキュメントを有効にできます。
前提条件
-
business applications
の Web サイトを使用して作成した <business-application>.zip ファイルがある。
手順
-
<business-application>.zip
ファイルを展開して、<business-application>/<business-application>-service
フォルダーに移動します。 -
テキストエディターでサービスプロジェクト
pom.xml
ファイルを開きます。 サービスプロジェクトの
pom.xml
ファイルに以下の依存関係を追加して、このファイルを保存します。<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-service-description-swagger</artifactId> <version>3.2.6</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-jaxrs</artifactId> <version>1.5.15</version> <exclusions> <exclusion> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> </exclusion> </exclusions> </dependency>
Swagger UI を有効にするには (任意)、以下の依存関係を
pom.xml
ファイルに追加して、このファイルを保存します。<dependency> <groupId>org.webjars</groupId> <artifactId>swagger-ui</artifactId> <version>2.2.10</version> </dependency>
-
テキストエディターで
<business-application>/<business-application>-service/src/main/resources/application.properties
ファイルを開きます。 Swagger サポートを有効にするには、以下の行を
application.properties
ファイルに追加します。kieserver.swagger.enabled=true
ビジネスアプリケーションの起動後に、http://localhost:8090/rest/swagger.json
で Swagger ドキュメントを表示できます。エンドポイントの完全なセットは、http://localhost:8090/rest/api-docs/?url=../swagger.json
から入手できます。
第4章 ビジネスアプリケーションの実行
デフォルトでは、ビジネスアプリケーションには、実行プロジェクト、つまりサービスプロジェクトが 1 つ含まれています。サービスプロジェクトは、Windows または Linux のスタンドアロンまたは開発(管理対象)モードで実行できます。スタンドアロンモードを使用すると、追加の要件なしでアプリケーションを起動できます。開発モードで開始されたアプリケーションは、Decision Central を Decision Manager コントローラーとして使用する必要があります。
4.1. スタンドアロンモードでのビジネスアプリケーションの実行
スタンドアロン (管理対象外) モードでは、追加要件なしにビジネスアプリケーションを起動できます。
前提条件
-
business applications
の Web サイトを使用して作成した <business-application>.zip ファイルがある。 - ビジネスアプリケーションが設定されている。
手順
-
<business-application>/<business-application>-service
ディレクトリーに移動します。 以下のコマンドの 1 つを実行します。
表4.1 スタンドアロンの起動オプション コマンド
説明
./launch.sh clean install
(Linux または UNIX) スタンドアロンモードで起動します。
./launch.bat clean install
(Windows) スタンドアロンモードで起動します。
./launch.sh clean install -Pmysql
(Linux または UNIX) MySQL データベースでアプリケーションを設定した場合に、スタンドアロンモードで起動します。
./launch.bat clean install -Pmysql
(Windows) MySQL データベースでアプリケーションを設定した場合に、スタンドアロンモードで起動します。
./launch.sh clean install -Ppostgres
(Linux または UNIX) PostgreSQL データベースでアプリケーションを設定した場合に、スタンドアロンモードで起動します。
./launch.bat clean install -Ppostgres
(Windows) PostgreSQL データベースでアプリケーションを設定した場合に、スタンドアロンモードで起動します。
clean install
の引数で、Maven に、新規インストールをするように指示を出します。プロジェクトは、以下の順番に構築されます。- データモデル
- ビジネスアセット
サービス
スクリプトの初回実行時には、プロジェクトの依存関係がすべてダウンロードされるため、プロジェクトのビルドに時間がかかる場合があります。ビルドの最後に、アプリケーションが起動します。
以下のコマンドを入力して、ビジネスアプリケーションにアクセスします。
http://localhost:8090/
-
認証情報
user
/user
またはkieserver
/kieserver1!
を入力します。
4.2. 開発モードでのビジネスアプリケーションの実行
開発 (管理対象) モードでは、開発者は Red Hat Decision Manager ビジネスアプリケーションアセットのプロジェクトで作業し、再起動の必要なしに動的に変更をデプロイできます。さらに、開発モードでは、プロセスインスタンス、タスク、ジョブなど、ビジネス自動化機能が完全に監視されている環境が提供されます。
前提条件
-
ビジネスアセットのプロジェクトが含まれる business applications の Web サイトを使用して作成した
<business-application>.zip
ファイルがある。 - ビジネスアプリケーションを設定している。
- Decision Central をインストールし、実行している。
手順
-
<business-application>/<business-application>-service
ディレクトリーに移動します。 以下のコマンドの 1 つを実行します。
表4.2 管理起動オプション コマンド
説明
./launch-dev.sh clean install
(Linux または UNIX) 開発モードで起動します。
./launch-dev.bat clean install
(Windows) 開発モードで起動します。
./launch-dev.sh clean install -Pmysql
(Linux または UNIX) MySQL データベースでアプリケーションを設定した場合に、開発モードで起動します。
./launch-dev.bat clean install -Pmysql
(Windows) MySQL データベースでアプリケーションを設定した場合に、開発モードで起動します。
./launch-dev.sh clean install -Ppostgres
(Linux または UNIX) postgreSQL データベースでアプリケーションを設定した場合に、開発モードで起動します。
./launch-dev.bat clean install -Ppostgres
(Windows) postgreSQL データベースでアプリケーションを設定した場合に、開発モードで起動します。
clean install
の引数で、Maven に、新規インストールをするように指示を出します。プロジェクトは、以下の順番に構築されます。- データモデル
- ビジネスアセット
サービス
スクリプトの初回実行時には、プロジェクトの依存関係がすべてダウンロードされるため、プロジェクトのビルドに時間がかかる場合があります。ビルドの最後に、アプリケーションが起動します。
以下のコマンドを入力して、ビジネスアプリケーションにアクセスします。
http://localhost:8090/
-
認証情報
user
/user
またはkieserver
/kieserver1!
を入力します。ビジネスアプリケーションを起動した後に、Decision Manager コントローラーと接続すると、Decision Central の Menu → Deploy → Execution Servers に表示されます。
第5章 Decision Central へのビジネスアセットプロジェクトのインポートと Business Central からのデプロイ
Red Hat Decision Manager ビジネスアプリケーションの一部であるビジネスアセットプロジェクトを Decision Central にインポートしてから、そのプロジェクトをビジネスアプリケーションにデプロイできます。
前提条件
- 開発モードで実行されているビジネスアプリケーションプロジェクトがある。
- Red Hat Decision Manager の Decision Central がインストールされている。
手順
-
<business-application>/<business-application>-kjar
ディレクトリーに移動します。 以下のコマンドを実行して、プロジェクトの Git リポジトリーを初期化します。
$ git init $ git add -A $ git commit -m "Initial project structure"
- Decision Central にログインし、Menu → Design → Projects に移動します。
Import Project を選択して、以下の URL を入力します。
file:///<business-application-path>/<business-application-name>-kjar
- Import をクリックして、インポートするプロジェクトを確定します。
- ビジネスアセットプロジェクトを Decision Central にインポートしてから、Add Assets をクリックして、ルールやデシジョンテーブルなどのアセットを使用しているビジネスアセットプロジェクトに追加します。
- プロジェクトページで Deploy をクリックして、実行中のビジネスアプリケーションにプロジェクトをデプロイします。
- デプロイメントを検証するには、Menu → Deploy → Execution Servers に移動します。
付録A バージョン情報
本書の最終更新日: 2021 年 11 月 15 日 (月)