3 WebLogic Server JMSとHelidonの統合

Oracle WebLogic Server (WebLogic Server) Java Message Service (JMS)をHelidonと統合すると、Helidonアプリケーションは、WebLogic Serverとの間で非同期にメッセージを送受信できます。WebLogic ServerアプリケーションとHelidonマイクロサービスは、メッセージングを介して一方向または両方向で通信します。
次の図は、WebLogic Server JMSとHelidonの間のメッセージの送信を示しています:

図3-1 WebLogic Server JMSとHelidonの統合



この章の内容は次のとおりです。

前提条件

WebLogic ServerをJMS用にHelidonと統合する場合、すでにWebLogic ServerおよびHelidonをKubernetesクラスタにデプロイしていることが前提となります。「WebLogic ServerとHelidonの統合のためのKubernetesクラスタの準備」を参照してください。
さらに、次のタスクを完了していることを確認します:
  • WebLogic Server JMSリソースをHelidon JMSコネクタ構成の一部として追加する前に、構成/作成します。
  • HelidonからWebLogic Server JMS宛先にJMSメッセージを送信/受信するには、WebLogic Server T3/T3S接続の詳細を指定します。WebLogic Serverで通信用のT3/T3Sチャネルを有効にし、HelidonアプリケーションからT3/T3Sに接続できることを確認します。
  • シン・クライアントJARファイルをローカルMavenリポジトリに追加し、Maven依存関係の一部として参照します。

WebLogic Kubernetes OperatorでのT3/T3Sチャネルの有効化

WebLogic Serverは、WebLogic Kubernetes Operator (Operator)でT3/T3Sチャネルを構成するためのいくつかの方法をサポートしています。次のいずれかのオプションを使用して、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チャネルを作成するには:

  1. WebLogic Server管理コンソールにログインし、「ロックして編集」をクリックして構成ロックを取得します。
  2. 管理コンソールの左ペインで、「環境」を展開して「サーバー」を選択します。
  3. サーバー・ページで、サーバーのリストからWebLogic Server管理サーバー(例: admin-server)を選択します。
  4. 「プロトコル」タブに移動し、「チャネル」タブを選択して、「新規」をクリックします。
  5. ネットワーク・チャネルの「名前」フィールドにadmin-t3-channelと入力し、「プロトコル」t3を選択して、「次へ」をクリックします。
  6. 「リスニング・ポート」フィールドに30014と入力し、「外部リスニング・アドレス」<Master IP>を入力し、「外部リスニング・ポート」30014と入力します。「リスニング・アドレス」フィールドは空白のままにします。
  7. 「終了」をクリックして、admin-serverのネットワーク・チャネルを作成します。

動的クラスタのT3チャネルを作成するには:

  1. WebLogic Server管理コンソールにログインし、「ロックして編集」をクリックして構成ロックを取得します。
  2. コンソールの左ペインで、「環境」を展開して「クラスタ」を選択し、「サーバー・テンプレート」を選択します。
  3. サーバー・テンプレートのリストから、ターゲット・サーバー・テンプレート(例: server-template-1)を選択します。
  4. 「プロトコル」タブに移動し、「チャネル」タブをクリックして、「新規」をクリックします。
  5. ネットワーク・チャネルの「名前」フィールドに、ネットワーク・チャネルの名前(例: cluster-t3-channel)を入力し、「プロトコル」t3またはt3sを選択して、「次へ」をクリックします。
  6. 「リスニング・ポート」フィールドに30016と入力し、「外部リスニング・アドレス」<Master IP>を入力し、「外部リスニング・ポート」30016と入力します。「リスニング・アドレス」フィールドは空白のままにします。
  7. 「終了」をクリックして、動的クラスタのネットワーク・チャネルを作成します。

ノート:

WebLogic ServerとHelidonが同じKubernetesクラスタの一部である場合は、パブリックIPアドレスの一部として完全修飾Kubernetesサービス名を使用できます。

管理サーバーのFQDN名の例:
wls-domain-admin-server.wls-domain-ns.svc.cluster.local
動的クラスタのFQDN名の例:
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

ノート:

このサンプル・コードでは、次のサンプルURLを使用してT3/T3S Kubernetesサービスを参照できます:
  • 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統合の設定

統合のステップを開始する前に、必要なJMSリソースおよびT3/T3Sチャネルが作成されていることを確認してください。T3/T3Sチャネルの作成の詳細は、「WebLogic Kubernetes OperatorでのT3/T3Sチャネルの有効化」を参照してください。WebLogic Server Java Message Service (JMS)とHelidonの統合を設定するには、pom.xmlファイルに必要な依存関係を追加し、WebLogic Server JMSコネクタを構成します。これらの依存関係により、リアクティブ・ストリーミングおよびメッセージングがJMSとともに有効になります。
統合を設定するには:
  1. 次の依存関係をHelidonのpom.xmlファイルに追加します:
    リアクティブ・メッセージングの依存関係
    <dependency>
       <groupId>io.helidon.microprofile.messaging</groupId>
       <artifactId>helidon-microprofile-messaging</artifactId>
    </dependency>
    JMSコネクタの依存関係
    <dependency>
        <groupId>io.helidon.messaging.jms</groupId>
        <artifactId>helidon-messaging-jms</artifactId>
    </dependency>
    メッセージング・ヘルスの依存関係
    <dependency>
        <groupId>io.helidon.microprofile.messaging</groupId>
        <artifactId>helidon-microprofile-messaging-health</artifactId>
    </dependency>

    WLSシン・クライアントJARファイルの依存関係

    Helidon 3.xを使用している場合は、次に示すように、Mavenコンパイル/ランタイム依存関係の一部としてjakartaシン・クライアントJARファイルを追加します:
    <dependency>
        <groupId>wlthint3client.jakarta</groupId>
        <artifactId>wlthint3client-jakarta</artifactId>
        <version>1.0</version>
    </dependency>
    次の例は、jakartaシン・クライアントをMavenリポジトリに追加する方法を示しています:
    mvn install:install-file -Dfile=<JAR_FILE_PATH>/wlthint3client.jakarta.jar -DgroupId=wlthint3client.jakarta -DartifactId=wlthint3client-jakarta -Dversion=1.0
    Helidon 2.xを使用している場合は、次に示すように、Mavenコンパイル/ランタイム依存関係の一部としてjavaxシン・クライアントJARファイルを追加します:
    <dependency>
        <groupId>wlthint3client</groupId>
        <artifactId>wlthint3client</artifactId>
        <version>1.0</version>
    </dependency>
    次の例は、javaxシン・クライアントをMavenリポジトリに追加する方法を示しています:
    mvn install:install-file -Dfile=<WLS_ORACLE_HOME>/wlserver/server/lib/wlthint3client.jar -DgroupId=wlthint3client -DartifactId=wlthint3client -Dversion=1.0

    ノート:

    groupIdartifactIdおよびversionの値が、mvn install:install-fileコマンドで使用される値と同じであることを確認します。
  2. Helidon JMSコネクタを構成します。コネクタの詳細は、次のドキュメントを参照してください:

    構成には次の情報が含まれています:

    • WebLogic Serverでリソースのルックアップに使用されるJMS環境プロパティ:
      • WLS INITIAL_CONTEXT_FACTORY (java.naming.factory.initial): weblogic.jms.WLInitialContextFactory
      • SECURITY_PRINCIPAL (java.naming.security.principal): WebLogic Serverのユーザー名。
      • SECURITY_CREDENTIALS (java.naming.security.credentials): WebLogic Serverのパスワード。
      • PROVIDER_URL (java.naming.provider.URL): WebLogic ServerのT3/T3S接続URL。
    • 次のJMSリソースの詳細:
      • JMS接続ファクトリ
      • JMS宛先
      • JMS宛先タイプ
    次の例は、<src>/main/resources/application.yamlファイルに追加されたhelidon-jmsコネクタ構成を示しています。この例では、JMSクライアントはJava Naming and Directory Interface (JNDI)ネーミング・サービスを使用します。したがって、この例では、destinationキーを使用するかわりに、jndi.destinationキーを使用してJMS宛先名を参照します。
    # User-defined properties
    wls-username: <wls_username>
    wls-password: <wls_password>
    # WLS Admin server t3 connection URL
    wls-admin-url: t3://localhost:7001
    # WLS Admin T3 Kubernetes Service URL format within the same kubernetes cluster
    # wls-admin-url: t3://adminserver-t3-external.wls-domain-ns.svc.cluster.local:30014
    # WLS Cluster t3 connection URL
    wls-cluster-url: t3://localhost:7003,localhost:7005,localhost:7007
    # WLS Cluster T3 Kubernetes Service URL format within same Kubernetes cluster
    # wls-cluster-url: t3://cluster-t3-external.wls-domain-ns.svc.cluster.local:30016
     
    mp:
      messaging:
        connector:
          helidon-jms:
            jndi:
               #Default connection factory name. This can be overridden in individual resource configurations
               jms-factory: qcf
               #JMS environment properties to lookup resources
               env-properties:
                  java.naming.factory.initial: weblogic.jms.WLInitialContextFactory
                  java.naming.provider.url: ${wls-admin-url}
                  java.naming.security.principal: ${wls-username}
                  java.naming.security.credentials: ${wls-password}
     
        # Add all consumer resources-related configurations below incoming. 
        incoming:
          #Identifier "from-wls-q" is used with the @Incoming annotation.
          from-wls-q:
            #Connector Name as specific in connector section. It is predefined.
            connector: helidon-jms
            #JMS Destination Name in JNDI format.
            jndi.destination: queuejndi
            #JMS Destination Type.
            type: queue
            #JMS Connection Factory.
            jndi.jms-factory: qcf
     
        # Add all producer resources-related configurations below outgoing. 
        outgoing:
          #Identifier "to-wls-q" is used with the @Outgoing annotation.
          to-wls-q:
            connector: helidon-jms
            jndi.destination: queuejndi
            type: queue
            jndi.jms-factory: qcf
    次に、分散キューのhelidon-jmsコネクタ構成の例を示します:
    mp:
      messaging:
        connector:
          helidon-jms:
            jndi:
               #Default connection factory name. This can be overridden in individual resource configurations.
               jms-factory: qcf
               #JMS environment properties to lookup resources.
               env-properties:
                  # Env properties
        outgoing:
          #Sample configurations for distributed queue.
          to-wls-dq:
            #Connector Name.
            connector: helidon-jms
            #JMS Dqueue JNDI Name.
            jndi.destination: dqcf
            type: queue
            #JMS DQueue Connection factory JNDI value.
            jndi.jms-factory: dqcf
            #Here wls-cluster-url refers to t3/t3s URL of WebLogic Cluster.
            #JMS DQueue provider URL. It Overrides the default provider value specified in the helidon-jms.jndi.env-properties section.
            jndi.env-properties.java.naming.provider.url: ${wls-cluster-url}

    ノート:

    helidon-JMSコネクタを宛先識別子の作成(CDI)ネーミング・サービスとともに使用して、構成済のJMSオブジェクトを検索することもできます。この場合、jndi.destinationキーを使用するかわりに、destinationキーを使用してJMS宛先名を参照する必要があります。
  3. WebLogic Server JMSコネクタを構成した後、WebLogic Serverとの間でメッセージの送受信を行うJavaコードを追加します。

    Helidon 3.xを使用している場合は、次のJavaコード例を参考にしてください:

    package helidon.examples.quickstart.mp;
    import org.eclipse.microprofile.reactive.messaging.Incoming;
    import org.eclipse.microprofile.reactive.messaging.Outgoing;
    import org.eclipse.microprofile.reactive.messaging.Channel;
    import org.eclipse.microprofile.reactive.messaging.Emitter;
    import jakarta.enterprise.context.ApplicationScoped;
    import jakarta.inject.Inject;
     
    @ApplicationScoped
    public class JMSQueue {
        //Inject channel to produce messages
        @Inject
        @Channel("to-wls-q")
        private Emitter<String> emitter;
     
        //Send Message 
        public void sendMessage(String msg) {
           emitter.send(msg);
        }
     
        //Sample script to consume Messages 
        @Incoming("from-wls-q")
        public void receive(String msg) {
            System.out.println("Process JMS message as per business logic"+msg);
        }
    }

    Helidon 2.xを使用している場合は、次のJavaコード例を参考にしてください:

    package helidon.examples.quickstart.mp;
    import org.reactivestreams.FlowAdapters;
    import org.reactivestreams.Publisher;
    import java.util.concurrent.SubmissionPublisher;
    import org.eclipse.microprofile.reactive.messaging.Incoming;
    import org.eclipse.microprofile.reactive.messaging.Outgoing;
    import javax.enterprise.context.ApplicationScoped;
     
    @ApplicationScoped
    public class JMSQueue {
        SubmissionPublisher<String> emitter = new SubmissionPublisher<>();
     
        //Register publisher
        @Outgoing("to-wls-q")
        public Publisher<String> registerPublisher() {
            return FlowAdapters.toPublisher(emitter);
        }
     
        //Send Messages
        public void sendMessage(String msg) {
            emitter.submit(msg);
        }
     
        //Sample Script To Consume Messages
        @Incoming("from-wls-q")
        public void receive(String msg) {
            System.out.println("Process JMS message as per business logic"+msg);
        }
    }
  4. (このステップはHelidon 3.xにのみ適用されます。)次の内容を含むserial-config.propertiesファイルを<src>/main/resources/META-INF/helidon/の場所に追加して、Helidon JEP-290実装に関して報告されたデシリアライズ・フィルタの問題に対処します。
    pattern=weblogic.**;java.util.**;java.lang.**;java.io.**;java.rmi.**;javax.naming.**;jakarta.jms.**

    デシリアライズ・フィルタの詳細は、JEP-290を参照してください。

    ノート:

    推奨されるフィルタ構成は、選択したユース・ケースでのみ役立ちます。問題が発生した場合は、ユース・ケースに適した独自のパターンを使用する必要がある場合があります。
  5. WebLogic Serverがまだ実行されていなければ、起動します。KubernetesでWebLogicドメインを起動する方法の詳細は、「WebLogic ServerとHelidonの統合のためのKubernetesクラスタの準備」を参照してください。

    JMSリソース(キュー、トピック、共通分散キューなど)およびT3/T3Sチャネルも作成しておく必要があります。

  6. 次のコマンドを使用して、Helidonアプリケーションをビルドします:
    mvn clean package -DskipTests=true
  7. 次のコマンドを使用して、Helidonアプリケーションを実行します:
    java -jar target/<Helidion-Project-Name>.jar

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クラスのリストで、適切なシリアライズ・フィルタ・パターンを構成できます。