セッションプールの構築方法 - バックエンド認証
コネクションプールは、データベースへの今後のリクエストが必要になったときに接続(コネクション)を再利用できるように維持される接続(コネクション)のキャッシュです。 コネクションプールは、バックエンドでコマンドを実行するパフォーマンスを向上させるために使用されます。
この例では、バックエンド認証が必要なAS400 RPC SDK でのコネクションプールの確立について説明します。
OpenLegacy Connection Poolの有効化:
新規のサービスを作成します。
Create pool
チェックボックスをチェックします。エディタを利用し、コネクションPoolプロパティを編集します: (service editor → backend tab).
コードでは以下です: (/src/main/java/com/{yourApiProjectName}/openlegacy/services/actions/{serviceNameSdkName}SessionFactoryConfiguration.java)
@Configuration public class ItemsAs400RpcSdkSessionFactoryConfiguration { @Value("${ol.jt400.project.as400RpcSdk.user:@null}") private String user; @Value("${ol.jt400.project.as400RpcSdk.password:@null}") private String password; @Bean public RpcAction itemsAs400RpcSdkInitAction() { ItemsAs400RpcSdkInitAction action = new ItemsAs400RpcSdkInitAction(); action.setUser(user); action.setPassword(password); return action; } @SuppressWarnings("unchecked") @Bean public SimpleRpcSessionPoolFactory itemsAs400RpcSdkRpcSessionFactory(RpcAction itemsAs400RpcSdkInitAction) { SimpleRpcSessionPoolFactory sessionPoolFactory = new SimpleRpcSessionPoolFactory(); sessionPoolFactory.setMaxConnections(2); sessionPoolFactory.setKeepAliveInterval(600000); sessionPoolFactory.setOrchestrationKey("as400RpcSdk"); sessionPoolFactory.setInitAction(itemsAs400RpcSdkInitAction); RpcAction action = new ItemsAs400RpcSdkKeepAliveAction(); Class<RpcAction> actionClass = (Class<RpcAction>) action.getClass(); sessionPoolFactory.setKeepAliveAction(actionClass); action = new ItemsAs400RpcSdkCleanupAction(); actionClass = (Class<RpcAction>) action.getClass(); sessionPoolFactory.setCleanupAction(actionClass); return sessionPoolFactory; } }
Pool Cleanup
プールを常に準備しておくと、特にピーク時に1つのリクエストのパフォーマンスが向上します。 ただし、ピークに達していないときは、大きなプールを維持することにはオーバーヘッドがあります。 したがって、クリーニングアクションを使用してプールサイズを縮小できます。
注意: プロジェクトに複数のプールがある場合、クリーンアッププロパティはすべてのプールで共有されます。
Pool プロパティ:
Max Connections: 許可されるオープンセッションの最大量をバックエンドに設定します。 (注意: 最大値をライセンス制限を超えて設定することはできません)
Keep Alive Interval: KeepAliveAction呼び出し間の時間をミリ秒単位で設定します。
Init Action: 初期化アクションは、セッションを使用する準備が整う前に実行する必要のあるアクションを処理する関数です。 これは、接続プールに空きセッションがない場合に発生します。 デフォルトでは、新しいセッションが開始されると、バックエンドへの初期ログインが実行されます。
Keep Alive Action: KeepAliveアクションは、(KeepAliveIntervalプロパティに基づき)x時間ごとに発生します。 プール内のセッションが接続されたままになるようにします。
Cleanup Action: クリーンアップアクションは、セッションが接続プールに返される直前に実行され、セッションがプールに返される前に新しいビジネスロジックを実行する準備ができていることを確認します。
Pool Cleanup プロパティ:
Cleanup プロパティプレフィックス ol: session-pool : auto-cleanup
enabled - 自動クリーンアップが有効になっているかどうか (デフォルト: true)
minimum-sessions - プール内のセッションの数がこの数以下の場合、セッションをクリーンアップしません (デフォルト: 0)
idle-timeout - セッションをクリーンアップするための間隔(秒) (デフォルト: 360 秒)
プールセッションの処理の例
@Service(name = "Items")
@OpenlegacyDesigntime(editor = "WebServiceEditor")
@Component
public class ItemsServiceImpl implements ItemsService {
...
// Get Session From Connection Pool
RpcSession as400RpcSdkRpcSession = itemsAs400RpcSdkRpcSessionFactory.getSession();
/* autogenerated - sessions block end */
try {
...
} finally {
/* autogenerated - disconnect block start */
// Return Session To Connection Pool
itemsAs400RpcSdkRpcSessionFactory.returnSession(as400RpcSdkRpcSession);
/* autogenerated - disconnect block end */
}
}
} |