3 WebLogic Server JMSとHelidonの統合
この章の内容は次のとおりです。
- 前提条件
WebLogic ServerをJMS用にHelidonと統合する場合、すでにWebLogic ServerおよびHelidonをKubernetesクラスタにデプロイしていることが前提となります。 - HelidonとのJMS統合の設定
統合のステップを開始する前に、必要なJMSリソースおよびT3/T3Sチャネルが作成されていることを確認してください。 - JMSの一般的な問題のトラブルシューティング
WebLogic ServerとHelidon 3.xまたは2.xの統合の設定時に発生する可能性がある一般的な問題について学習します。
前提条件
- WebLogic Server JMSリソースをHelidon JMSコネクタ構成の一部として追加する前に、構成/作成します。
- HelidonからWebLogic Server JMS宛先にJMSメッセージを送信/受信するには、WebLogic Server T3/T3S接続の詳細を指定します。WebLogic Serverで通信用のT3/T3Sチャネルを有効にし、HelidonアプリケーションからT3/T3Sに接続できることを確認します。
- シン・クライアントJARファイルをローカルMavenリポジトリに追加し、Maven依存関係の一部として参照します。
- Helidon 3.xの場合
Oracle Software Delivery Cloud (OSDC)からWebLogic Server 14.1.1 Thin T3 Jakarta clientをダウンロードして、WebLogic Server商用ライセンスの下で商用に使用できます。https://edelivery.oracle.comに移動し、Oracle WebLogic Server 14c 14.1.1.0.0 (Oracle WebLogic Server Enterprise Edition, Oracle WebLogic Server Standard Edition)のパッケージをダウンロードします。クライアントをダウンロードして、「Oracle Technology Network Free Developer License Terms」の下で開発に使用するには、https://www.oracle.com/middleware/technologies/weblogic-server-downloads.htmlに移動します。ダウンロードのステップについては、「Jakartaパッケージ名を使用したWebLogic Server Javaクライアントのダウンロード」を参照してください。
- Helidon 2.xの場合
WebLogic Server Thin T3クライアントは、WebLogic Serverインストールの
WL_HOME\server\lib
ディレクトリにあります。
- Helidon 3.xの場合
WebLogic Kubernetes OperatorでのT3/T3Sチャネルの有効化
- WebLogic Server管理コンソール: 「永続ボリューム(PV)内のドメイン」ドメイン・ホーム・パターンの場合、WebLogic Server管理コンソールを使用してチャネルを構成できます。このパターンの詳細は、Domain Home on a PVを参照してください。
- WebLogic Scripting Tool (WLST): 「永続ボリューム(PV)内のドメイン」ドメイン・ホーム・パターンの場合、WLSTを使用してチャネルを構成できます。Domain Home on a PVを参照してください。
- WebLogic Deploy Tooling (WDT)モデル: 「イメージ内のモデル」ドメイン・ホーム・パターンの場合、WDTモデル・ファイルおよびアプリケーション・アーカイブを使用してチャネルを構成できます。Model in Imageを参照してください。
WebLogic Kubernetes Operatorの外部WebLogicクライアントの詳細は、External WebLogic Clientsを参照してください。
親トピック: 前提条件
管理コンソールを使用したT3/T3Sチャネルの作成
管理サーバーのT3/T3Sチャネルを作成するには:
- WebLogic Server管理コンソールにログインし、「ロックして編集」をクリックして構成ロックを取得します。
- 管理コンソールの左ペインで、「環境」を展開して「サーバー」を選択します。
- サーバー・ページで、サーバーのリストからWebLogic Server管理サーバー(例:
admin-server
)を選択します。 - 「プロトコル」タブに移動し、「チャネル」タブを選択して、「新規」をクリックします。
- ネットワーク・チャネルの「名前」フィールドにadmin-t3-channelと入力し、「プロトコル」でt3を選択して、「次へ」をクリックします。
- 「リスニング・ポート」フィールドに30014と入力し、「外部リスニング・アドレス」に<Master IP>を入力し、「外部リスニング・ポート」に30014と入力します。「リスニング・アドレス」フィールドは空白のままにします。
- 「終了」をクリックして、admin-serverのネットワーク・チャネルを作成します。
動的クラスタのT3チャネルを作成するには:
- WebLogic Server管理コンソールにログインし、「ロックして編集」をクリックして構成ロックを取得します。
- コンソールの左ペインで、「環境」を展開して「クラスタ」を選択し、「サーバー・テンプレート」を選択します。
- サーバー・テンプレートのリストから、ターゲット・サーバー・テンプレート(例: server-template-1)を選択します。
- 「プロトコル」タブに移動し、「チャネル」タブをクリックして、「新規」をクリックします。
- ネットワーク・チャネルの「名前」フィールドに、ネットワーク・チャネルの名前(例: cluster-t3-channel)を入力し、「プロトコル」でt3または
t3s
を選択して、「次へ」をクリックします。 - 「リスニング・ポート」フィールドに30016と入力し、「外部リスニング・アドレス」に<Master IP>を入力し、「外部リスニング・ポート」に30016と入力します。「リスニング・アドレス」フィールドは空白のままにします。
- 「終了」をクリックして、動的クラスタのネットワーク・チャネルを作成します。
ノート:
WebLogic ServerとHelidonが同じKubernetesクラスタの一部である場合は、パブリックIPアドレスの一部として完全修飾Kubernetesサービス名を使用できます。
wls-domain-admin-server.wls-domain-ns.svc.cluster.local
wls-domain-managed-server${id}.wls-domain-ns.svc.cluster.local
WLSTスクリプトを使用したT3/T3Sチャネルの作成
30014
およびパブリック・ポート30014
を持つadmin-T3-channel
というT3チャネルを作成します:import sys
admin_server = sys.argv[1]
admin_port = sys.argv[2]
user_name = sys.argv[3]
password = sys.argv[4]
domain_ns = sys.argv[5]
connect(user_name, password, 't3://' + admin_server + ':' + admin_port)
edit()
startEdit()
cd('/')
print('Create channel for admin server')
cd('/Servers/admin-server')
cmo.createNetworkAccessPoint('admin-t3-channel')
cd('NetworkAccessPoints/admin-t3-channel')
cmo.setProtocol('t3')
cmo.setListenPort(30014)
cmo.setPublicPort(30014)
##You need to use public IP address when Helidon and WebLogic Server are in different Kubernetes clusters.
cmo.setPublicAddress('wls-domain-admin-server.' + domain_ns + '.svc.cluster.local')
print('admin-t3-channel added')
print('Create channel for cluster')
cd('/ServerTemplates/server-template_1')
cmo.createNetworkAccessPoint('cluster-t3-channel')
cd('/ServerTemplates/server-template_1/NetworkAccessPoints/cluster-t3-channel')
cmo.setProtocol('t3')
cmo.setListenPort(30016)
##You need to use public IP address when Helidon and WebLogic Server are in different Kubernetes.
cmo.setPublicAddress('wls-domain-managed-server${id}.' + domain_ns + '.svc.cluster.local')
cmo.setEnabled(true)
cmo.setHttpEnabledForThisProtocol(true)
cmo.setTunnelingEnabled(false)
cmo.setOutboundEnabled(false)
cmo.setTwoWaySSLEnabled(false)
cmo.setClientCertificateEnforced(false)
print('cluster-t3-channel added')
activate()
disconnect()
WebLogic Deploy Toolingを使用したT3/T3Sチャネルの作成
WDTを使用してT3/T3Sチャネル・リソースを作成できます。次の例では、管理サーバーおよび動的クラスタのT3チャネルを作成するためのWDTモデル構成を使用しています:
topology:
Server:
admin-server:
ListenAddress: wls-domain-admin-server
NetworkAccessPoint:
internal-t3:
ListenAddress: localhost
ListenPort: 7001
admin-t3-channel:
# You need to use public IP address when Helidon and WebLogic Server are in different Kubernetes.
PublicAddress: wls-domain-admin-server.wls-domain-ns.svc.cluster.local
ListenPort: 30014
PublicPort: 30014
ServerTemplate:
server-template_1:
Cluster: cluster-1
ListenAddress: wls-domain-managed-server${id}
ListenPort: 8001
NetworkAccessPoint:
cluster-t3-channel:
# You need to use public IP address when Helidon and WebLogic Server are in different Kubernetes clusters.
PublicAddress: wls-domain-managed-server${id}.wls-domain-ns.svc.cluster.local
ListenPort: 30016
通信用T3/T3SチャネルのKubernetesサービスの作成
WebLogic ServerドメインでT3/T3Sチャネルを作成した後、Kubernetesクラスタで通信用のチャネルを有効にする必要があります。次に、T3通信用のKubernetesサービスの作成例を示します:
apiVersion: v1
kind: Service
metadata:
name: adminserver-t3-external
namespace: wls-domain-ns
labels:
weblogic.serverName: admin-server
spec:
type: NodePort
selector:
weblogic.serverName: admin-server
ports:
- name: t3adminport
protocol: TCP
port: 30014
targetPort: 30014
nodePort: 30014
---
apiVersion: v1
kind: Service
metadata:
name: cluster-t3-external
namespace: wls-domain-ns
labels:
weblogic.clusterName: cluster-1
spec:
type: NodePort
selector:
weblogic.clusterName: cluster-1
ports:
- name: t3clusterport
protocol: TCP
port: 30016
targetPort: 30016
nodePort: 30016
ノート:
T3://adminserver-T3-external.wls-domain-ns.svc.cluster.local:30014
を使用して、管理T3外部URLを参照します。T3://cluster-T3-external.wls-domain-ns.svc.cluster.local:30016
を使用して、クラスタT3外部URLを参照します。
WebLogic Kubernetes Operatorの外部WebLogicクライアントの詳細は、External WebLogic Clientsを参照してください。
親トピック: 前提条件
WebLogic Deploy Toolingを使用したWebLogic ServerでのJMSリソースの構成
WDTを使用してJMSリソースのターゲットをWebLogic管理サーバーおよび動的クラスタに設定することで、JMSリソースをデプロイするモデルの簡単な例。
resources:
FileStore:
FileStoreCluster:
Target: cluster-1
Directory: wlsdeploy/stores/FileStoreCluster/
FileStoreAdmin:
Target: admin-server
Directory: wlsdeploy/stores/FileStoreAdmin/
JMSServer:
JMSServerCluster:
Target: cluster-1
PersistentStore: FileStoreCluster
JMSServerAdmin:
Target: admin-server
PersistentStore: FileStoreAdmin
JmsSessionPool:
JMSSessionPool0: {}
JMSSystemResource:
jmsmodulecluster:
Target: cluster-1
SubDeployment:
jmssdcluster:
Target: JMSServerCluster
JmsResource:
ConnectionFactory:
dqcf:
DefaultTargetingEnabled: true
JNDIName: dqcf
ClientParams:
MessagesMaximum: 1
LoadBalancingParams:
ServerAffinityEnabled: false
TransactionParams:
XAConnectionFactoryEnabled: true
UniformDistributedQueue:
udq:
JNDIName: udq
SubDeploymentName: jmssdcluster
MessagingPerformancePreference: 0
DeliveryFailureParams:
RedeliveryLimit: 600
DeliveryParamsOverrides:
RedeliveryDelay: 1000
DeliveryMode: Persistent
jmsmoduleadmin:
Target: admin-server
SubDeployment:
jmssdadmin:
Target: JMSServerAdmin
JmsResource:
ConnectionFactory:
qcf:
DefaultTargetingEnabled: true
JNDIName: qcf
ClientParams:
MessagesMaximum: 1
LoadBalancingParams:
ServerAffinityEnabled: false
TransactionParams:
XAConnectionFactoryEnabled: true
Queue:
queue:
JNDIName: queuejndi
SubDeploymentName: jmssdadmin
MessagingPerformancePreference: 0
DeliveryFailureParams:
RedeliveryLimit: 600
DeliveryParamsOverrides:
RedeliveryDelay: 1000
DeliveryMode: Persistent
Topic:
myTopic:
JNDIName: myTopic
SubDeploymentName: jmssdadmin
親トピック: 前提条件
HelidonとのJMS統合の設定
pom.xml
ファイルに必要な依存関係を追加し、WebLogic Server JMSコネクタを構成します。これらの依存関係により、リアクティブ・ストリーミングおよびメッセージングがJMSとともに有効になります。
JMSの一般的な問題のトラブルシューティング
WebLogic ServerとHelidon 3.xまたは2.xの統合の設定時に発生する可能性がある一般的な問題について学習します。
問題1
filter status: REJECTEDエラーが、WebLogic Serverシン・クライアントjarファイルの最新パッチ・セット更新(PSU)について報告されます。エラー・メッセージのサンプルを次に示します:
<Error> <RJVM> <WL-000503> <Incoming message header or abbreviation processing failed.
java.io.InvalidClassException: filter status: REJECTED
at java.base/java.io.ObjectInputStream.filterCheck(ObjectInputStream.java:1414)
at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2055)
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1909)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2235)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1744)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:514)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:472)
at thinClientClassLoader//weblogic.utils.io.FilteringObjectInputStream.readObjectValidated(FilteringObjectInputStream.java:177)
. . . .
>
023.02.04 13:57:10 INFO io.helidon.messaging.connectors.jms.JmsConnector Thread[main,5,main]: JMS Connector gracefully stopped.
Exception in thread "main" io.helidon.messaging.MessagingException: Error when preparing JNDI context.
at io.helidon.messaging.connectors.jms.ConnectionContext.<init>(ConnectionContext.java:64)
at io.helidon.messaging.connectors.jms.JmsConnector.getPublisherBuilder(JmsConnector.java:429)
. . . .
解決策:
この問題は、Helidonで使用されるデシリアライズ・フィルタが原因で報告されます。問題を解決するには、次の内容を含むserial-config.properties
ファイルを<src>/main/resources/META-INF/helidon/
の場所に追加します:
pattern=weblogic.**;java.util.**;java.lang.**;java.io.**;java.rmi.**;javax.naming.**;jakarta.jms.**
デシリアライズ・フィルタの詳細は、Helidon JEP-290 Implementationを参照してください。
ノート:
推奨されるフィルタ構成は、選択したユース・ケースでのみ役立ちます。問題が発生した場合は、ユース・ケースに適した独自のパターンを使用する必要がある場合があります。問題2
サーバーの起動時にJMSコネクタを作成すると、Helidon 2.xアプリケーションがハングします。
解決策:
jaxws-wlswss-client
jarとwlthint3client
jarが一緒に使用されていないことを確認します。これらのjarファイルは一緒に使用しないでください。
問題3
Helidon 3.xで、wlthint3client
jarファイルに関するクラス・ローダーの問題が報告されます。エラー・メッセージのサンプルを次に示します:
SEVERE: Default error handler: Unhandled exception encountered. java.util.concurrent.ExecutionException: Unhandled 'cause' of this exception encountered. at io.helidon.webserver.RequestRouting$RoutedRequest.defaultHandler(RequestRouting.java:398) . . . Caused by: java.lang.ExceptionInInitializerError at weblogic.utils.LocatorUtilities.getService(LocatorUtilities.java:37) at weblogic.jms.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:124) . . . Caused by: A MultiException has 2 exceptions. They are: 1. java.lang.NoSuchMethodException: The class GlobalServiceLocator has no constructor marked @Inject and no zero argument constructor 2. java.lang.IllegalArgumentException: Errors were discovered while reifying SystemDescriptor( implementation=weblogic.server.GlobalServiceLocator . . . Caused by: java.lang.NoSuchMethodException: The class GlobalServiceLocator has no constructor marked @Inject and no zero argument constructor at org.jvnet.hk2.internal.Utilities.findProducerConstructor(Utilities.java:1326) . . .
解決策:
javax
ネームスペースを使用するシン・クライアントは、jakarta
ネームスペースを使用するHelidon 3.xでは機能しません。したがって、jakartaネームスペースを使用し、マルチリリースjarファイルも正しく処理する、jakartaシン・クライアントjar wlthint3client.jakarta.jar
をダウンロードします。このjarをローカルmavenリポジトリに追加し、アプリケーションをビルドして実行します。
問題4
Helidon 3.xで報告されたWebLogic Server JMSコネクタの問題。
解決策:
新しいWebLogic Serverコネクタは、宛先を作成するスレッドとは異なるスレッド内でInitialContextFactory
インタフェースを初期化します。この機能により、WebLogic Serverのスレッドベースのセキュリティが使用できなくなります。『Oracle WebLogic Server JMSアプリケーションの開発』のクライアントおよびサーバーでのスレッドベースのセキュリティの理解に関する項を参照してください。これらの問題を解決するための解決策は、オブジェクトベースのセキュリティに切り替えることです。『Oracle WebLogic Server JMSアプリケーションの開発』のオブジェクトベースのセキュリティの理解に関する項を参照してください。
問題5
Helidonシリアライズ構成フィルタは、デフォルトで拒否された実際のクラスをトレースしません。ログに表示されるエラー・メッセージの例を次に示します:
java.io.InvalidClassException: filter status: REJECTED
解決策:
helidon.serialFilter.trace
システム・プロパティをbasic
またはfull
に設定します。java -Dhelidon.serialFilter.trace=basic -jar ./target/custom-mp.jar
basic
トレース・フィルタ設定の場合、受入れまたは拒否された各クラスが1回のみログに記録されます。
ALLOWED class: class java.util.LinkedList, arrayLength: -1, depth: 2, references: 3, streamBytes: 84
REJECTED class: class java.util.ArrayList, arrayLength: -1, depth: 2, references: 3, streamBytes: 90
REJECTEDクラスのリストで、適切なシリアライズ・フィルタ・パターンを構成できます。