tlistenに埋め込まれたJMXエージェントにより、JMX MBeanのリストが提供されます。それらのMBeanによってエクスポートされた機能を使用すると、JMXを呼び出してOracle Tuxedoアプリケーションをモニターおよび管理できます。JMX JavaによってTuxedoサーバーを停止する例を次に示します。
リスト1-1
JMX JavaクライアントによるTuxedoサーバーの停止
import java.io.IOException;
import java.util.HashMap;
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import oracle.tuxedo.jmx.tux.exception.JMXPropertiesException;
import oracle.tuxedo.jmx.tux.utility.Encryption;
public static void main(String[] args) throws IOException,
JMXPropertiesException, Exception {
String host = "XXXXXX.oracle.com";
String username = "oracle";
// Tuxedo password and application password must be encrypted.
String password = Encryption.getInstance().encrypt("password");
// Tuxedo application password.
String appPassword = Encryption.getInstance().encrypt("apppassword");
String[] credentials = new String[] { username, password, appPassword };
Map<String, Object> env = new HashMap<String, Object>();
env.put("jmx.remote.credentials", credentials);
// Create an RMI connector client and
// connect it to the RMI connector server;
JMXServiceURL url = new JMXServiceURL(String.format(
"service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/server", host, port,
JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(null);
// Get AdminBean by the MBean name
Set<?> mbeans = mbsc.queryMBeans(new ObjectName(
"DefaultJMXDomain:type=adminBean"), null);
ObjectInstance objectInstance = (ObjectInstance) mbeans.iterator()
ObjectName objectName = objectInstance.getObjectName();
// The parameter value list for shutdownServer methond.
Object[] params = { "/testarea/oracle/test/tuxconfig", "APPGRP", 102, 0, null };
// The parameter type list for shutdown Server method.
String[] signature = { String.class.getName(), String.class.getName(),
Integer.class.getName(), Integer.class.getName(),
String.class.getName() };
Object result = mbsc.invoke(objectName, "shutdownServer", params,
System.out.print(result);
次のコマンドを実行して、Javaファイルをコンパイルします。
javac -classpath $TUXDIR/jmx/tmjmx_exceptions.jar:$TUXDIR/jmx/ tmjmx_tux.jar Client.java
Client.classが生成されます。このクライアントを実行するには、次のコマンドを使用します。
java -classpath $TUXDIR/jmx/tmjmx_exceptions.jar:$TUXDIR/jmx/tmjmx_tux.jar:. Client
Shutting down server processes ...
Server Id = 102 Group Id = APPGRP Machine = SITE1: shutdown succeeded
JMXクライアントを呼び出す前に、次の構成を行う必要があります。
•
|
セキュリティが NONEではないTuxedoドメインでは、Tuxedoユーザーを tpsysadmとして追加します。たとえば、次のようにします。 tpusradd -g group1 -c tpsysadm user1
|
•
|
クライアントを実行してtlistenでJMXエージェントを呼び出すときに、 $TUXDIR/udataobj/jmx/tmjmx_exceptions.jarをクライアントのクラスパスに追加します。
|
次のJMXサービスURLを使用して、JMX接続を作成します。
service:jmx:rmi:///jndi/rmi://rmihost:rmiport/server
rmihostと
rmiportは、
–jオプションでtlistenに構成されるホストとポートです。このオプションの構成後、JMXエージェントはJNIテクノロジによりtlistenプロセスで起動されたJVMで実行されます。
jmx.remote.credentialsは、次の順序の解析済文字配列にする必要があります。
|
|
|
|
|
省略可能。TuxedoセキュリティまたはJMXセキュリティが有効な場合は必須です。それ以外の場合は空白のままにします。Tuxedoセキュリティが有効な場合は、Tuxedoユーザー名を指定します。JMXセキュリティが有効な場合は、 jmxaaacfgにより追加されたJMXユーザー名を指定します。
|
|
|
省略可能。TuxedoセキュリティまたはJMXセキュリティが有効な場合は必須です。それ以外の場合は空白のままにします。パスワードがNULLではない場合は、 $TUXDIR/jmx/tmjmx_tux.jarの oracle.tuxedo.jmx.tux.utility.Encryption.encrypt()メソッドを使用して暗号化する必要があります。
|
|
|
省略可能。Tuxedoセキュリティが有効な場合は必須です。それ以外の場合は空白のままにします。アプリケーション・パスワードがNULLではない場合は、 $TUXDIR/jmx/tmjmx_tux.jarの oracle.tuxedo.jmx.tux.utility.Encryption.encrypt()メソッドを使用して暗号化する必要があります。
|
|
|
省略可能。1つのtlistenに複数のドメインがある場合は必須です。
|
|
|
省略可能。1つのtlistenに複数のドメインがある場合は必須です。
|
|
|
|
|
|
省略可能。jmx.remote.credentialsのリストにNONTUXAUTHを追加します。JMXサーバーに接続中は、Tuxedo認証は行われません。この場合、Tuxedo認証が必要なJMX操作の呼出しは失敗します。
|
String[] credentials = new String[] { username, password, appPassword };
Map<String, Object> env = new HashMap<String, Object>();
env.put("jmx.remote.credentials", credentials);
// Create an RMI connector client and
// connect it to the RMI connector server;
JMXServiceURL url = new JMXServiceURL(String.format(
"service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/server", host, port,
JMXConnector jmxc = JMXConnectorFactory.connect(url, env);