2

Java を使用して OSB (ESB) 自動ビルド プロセスを作成しようとしています。そのためには、次のことを行う必要があります。

  1. weblogic に接続 - これは機能しています //weblogic のバージョンは 10.3.0.0 です
  2. 接続を使用して DomainRuntimeServiceMBean オブジェクトを作成します - これも機能しています
  3. 以前に作成した DomainRuntimeServiceMBean オブジェクトを使用して ALSBConfigurationMBean オブジェクトを作成します。これが私の問題です。

ALSBConfigurationMBean オブジェクトを作成するために次のコードを使用します。

DomainRuntimeServiceMBean domainService = ConnectionUtil
            .createDomainService(mHost, mPort, mUsername, mPassword,
                    connector);

    ALSBConfigurationMBean alsbSession = (ALSBConfigurationMBean) domainService
            .findService(ALSBConfigurationMBean.NAME,
                    ALSBConfigurationMBean.TYPE, null);

私が得るエラーは次のとおりです。

Exception in thread "main" java.lang.ClassCastException: $Proxy1 cannot be cast to weblogic.management.mbeanservers.Service
at $Proxy0.findService(Unknown Source)
4

2 に答える 2

4

私は似たようなことに取り組んでおり、@Richが提供した解決策がうまくいきました。ただし、weblogic.management.jmx.MBeanServerInvocationHandler を (少なくとも直接は) 使用する必要のない、わずかに異なるアプローチに行き着きました。

探していることを実行するコードを次に示します。

package scratch;

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Hashtable;

import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;

import weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean;

import com.bea.wli.sb.management.configuration.ALSBConfigurationMBean;
import com.bea.wli.sb.management.configuration.SessionManagementMBean;

public class TestOSB_JMX {

    public static void main(String[] args) throws Throwable {

        // Provide connection information for OSB WebLogic AdminServer on command line
        String host = args[0];
        int    port = Integer.parseInt(args[1]);
        String user = args[2];
        String password = args[3];

        JMXConnector conn = initJmxConnection(host, port, user, password);
        try {
            System.out.println("Opened JMX connection to " + host + ":" + port + " as " + user);

            // get mbean connection
            MBeanServerConnection mbconn = conn.getMBeanServerConnection();

            // Get SessionmanagementMBean
            SessionManagementMBean sm = 
                JMX.newMBeanProxy(mbconn, ObjectName.getInstance(SessionManagementMBean.OBJECT_NAME), SessionManagementMBean.class);

            // Create a session
            String sessionName = "MySession";           
            sm.createSession(sessionName);

            // Get the configuration MBean for the session, do stuff, and then discard the session.
            try
            {
                System.out.println("Session exists? : " + sm.sessionExists(sessionName));

                ALSBConfigurationMBean configMBean = 
                    JMX.newMBeanProxy(
                        mbconn, 
                        ObjectName.getInstance("com.bea:Name=" +ALSBConfigurationMBean.NAME + "." + sessionName +",Type=" + ALSBConfigurationMBean.TYPE), 
                        ALSBConfigurationMBean.class
                    );

                System.out.println("Got the config MBean for session: " + configMBean.getSession());

                // Do stuff in the session here....
            }
            finally
            {
                // use activateSession to commit session changes instead
                sm.discardSession(sessionName);
            }
        } finally {
            conn.close();
            System.out.println("Closed JMX connection");
        }
    }

    public static JMXConnector initJmxConnection(String hostname, int port,String username, String password) 
    throws IOException, MalformedURLException 
    {
        JMXServiceURL serviceURL = new JMXServiceURL("t3", hostname, port, "/jndi/" + DomainRuntimeServiceMBean.MBEANSERVER_JNDI_NAME);

        Hashtable<String, String> h = new Hashtable<String, String>();
        h.put(Context.SECURITY_PRINCIPAL, username);
        h.put(Context.SECURITY_CREDENTIALS, password);
        h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");

        return JMXConnectorFactory.connect(serviceURL, h);
    }
}

私のソリューションについて注意すべき点がいくつかあります。

  1. 私のクラスパスは、次の WebLogic および OSB JAR ファイルを直接参照しています: alsb.jar、osb-server-modules-ref.jar、wlfullclient.jar
  2. これらの JAR は、マニフェスト ファイルの Class-Path エントリを介して (多くの) 他の JAR を参照します。
  3. http://docs.oracle.com/cd/E17904_01/web.1111/e13717/jarbuilder.htmで説明されているように、wlfullclient.jar ファイルを生成する必要がある場合があります。
  4. このタイプのクライアント アプリケーションには、weblogic.jar の代わりに wlfullclient.jar を使用することをお勧めします。私は最初に weblogic.jar を使用していましたが、多くのクラス ロードの問題が発生しました。
  5. Oracle Service Bus バージョン: 11.1.1.4、WebLogic バージョン: 10.3.4、および Java 1.6.0_29 を使用しています。
于 2011-11-23T19:16:00.960 に答える
1

誰かが同じエラーを受け取った場合は、javax.management.MBeanServerInvocationHandlerの代わりにweblogic.management.jmx.MBeanServerInvocationHandlerを使用してください。

https://forums.oracle.com/forums/thread.jspa?threadID=817973&tstart=420

于 2011-10-12T12:44:30.730 に答える