ヘッダーをスキップ
Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド
11gリリース1(11.1)
E05782-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

15 Oracle JMSの共有インタフェース

この章では、Oracle Streams Advanced Queuing(AQ)に対するJava Message Service(JMS)操作インタフェース(共有インタフェース)を説明します。

内容は次のとおりです。

15.1 Oracle Streams AQ JMS操作インタフェース: 共有インタフェース

この項では、JMS操作のためのOracle Streams AQ共有インタフェースを説明します。

内容は次のとおりです。

15.1.1 JMSコネクションの起動

public void start()
          throws JMSException

AQjmsConnection.start()は、メッセージ受信用のJMSコネクションを起動します。

15.1.2 JMSコネクションの取得

public oracle.jms.AQjmsConnection getJmsConnection()
                                            throws JMSException

AQjmsSession.getJmsConnection()は、セッションからJMSコネクションを取得します。

15.1.3 セッションにおけるすべての操作のコミット

public void commit()
           throws JMSException

AQjmsSession.commit()は、セッションで実行されているすべてのJMSおよびSQL操作をコミットします。

15.1.4 セッションにおけるすべての操作のロールバック

public void rollback()
              throws JMSException

AQjmsSession.rollback()は、セッションで実行されているすべてのJMSおよびSQL操作を終了します。

15.1.5 セッションからのJDBCコネクションの取得

public java.sql.Connection getDBConnection()
                                    throws JMSException

AQjmsSession.getDBConnection()は、JMSセッションから基礎となるJDBCコネクションを取得します。JDBCコネクションは、JMS操作が実行される同一のトランザクションの一部としてSQL操作を実行するために使用される場合があります。

例15-1 JMSセッションからの基礎となるJDBCコネクションの取得

java.sql.Connection db_conn;
QueueSession     jms_sess;
db_conn = ((AQjmsSession)jms_sess).getDBConnection();

15.1.6 JMSコネクションからのOracleOCIConnectionPoolの取得

public oracle.jdbc.pool.OracleOCIConnectionPool getOCIConnectionPool()

AQjmsConnection.getOCIConnectionPool()は、JMSコネクションから基礎となるOracleOCIConnectionPoolを取得します。OracleOCIConnectionPoolインスタンスの設定は、コネクションの使用状況(ユーザーが既存のコネクションを使用して確立するセッション数など)に応じてユーザーがチューニングできます。ただし、JMSコネクションが使用しているOracleOCIConnectionPoolインスタンスはクローズしないでください。

例15-2 JMSコネクションからの基礎となるOracleOCIConnectionPoolの取得

oracle.jdbc.pool.OracleOCIConnectionPool cpool;
QueueConnection jms_conn;
cpool = ((AQjmsConnection)jms_conn).getOCIConnectionPool();

15.1.7 BytesMessageの作成

public javax.jms.BytesMessage createBytesMessage()
                                          throws JMSException

AQjmsSession.createBytesMessage()は、Bytesメッセージを作成します。このメソッドを使用できるのは、宛先キュー/トピックを含むキュー表がペイロード型SYS.AQ$_JMS_BYTE_MESSAGEまたはAQ$_JMS_MESSAGEで作成された場合のみです。

15.1.8 MapMessageの作成

public javax.jms.MapMessage createMapMessage()
                                      throws JMSException

AQjmsSession.createMapMessage()は、Mapメッセージを作成します。このメソッドを使用できるのは、宛先キュー/トピックを含むキュー表がペイロード型SYS.AQ$_JMS_MAP_MESSAGEまたはAQ$_JMS_MESSAGEで作成された場合のみです。

15.1.9 StreamMessageの作成

public javax.jms.StreamMessage createStreamMessage()
                                            throws JMSException

AQjmsSession.createStreamMessage()は、StreamMessageを作成します。このメソッドを使用できるのは、宛先キュー/トピックを含むキュー表がペイロード型SYS.AQ$_JMS_STREAM_MESSAGEまたはAQ$_JMS_MESSAGEで作成された場合のみです。

15.1.10 ObjectMessageの作成

public javax.jms.ObjectMessage createObjectMessage(java.io.Serializable object)
                                            throws JMSException

AQjmsSession.createObjectMessage()は、Objectメッセージを作成します。このメソッドを使用できるのは、宛先キュー/トピックを含むキュー表がペイロード型SYS.AQ$_JMS_OBJECT_MESSAGEまたはAQ$_JMS_MESSAGEで作成された場合のみです。

15.1.11 TextMessageの作成

public javax.jms.TextMessage createTextMessage()
                                        throws JMSException

AQjmsSession.createTextMessage()は、Textメッセージを作成します。このメソッドを使用できるのは、宛先キュー/トピックを含むキュー表がペイロード型SYS.AQ$_JMS_TEXT_MESSAGEまたはAQ$_JMS_MESSAGEで作成された場合のみです。

15.1.12 JMSメッセージの作成

public javax.jms.Message createMessage()
                                throws JMSException

AQjmsSession.createMessage()は、JMSメッセージを作成します。AQ$_JMS_MESSAGEメッセージを使用して、様々な型のメッセージを構成できます。メッセージ型は、次のいずれかである必要があります。

  • DBMS_AQ.JMS_TEXT_MESSAGE

  • DBMS_AQ.JMS_OBJECT_MESSAGE

  • DBMS_AQ.JMS_MAP_MESSAGE

  • DBMS_AQ.JMS_BYTES_MESSAGE

  • DBMS_AQ.JMS_STREAM_MESSAGE

このユーザー定義型を使用して、ヘッダーのみのJMSメッセージを作成することもできます。

15.1.13 AdtMessageの作成

public oracle.jms.AdtMessage createAdtMessage()
                                       throws JMSException

AQjmsSession.createAdtMessage()AdtMessageを作成します。このメソッドを使用できるのは、キュー/トピックを含むキュー表がOracle ADTペイロード型で作成された場合のみです。AdtMessageは、CustomDatumインタフェースを実装するオブジェクトで移入される必要があります。このオブジェクトは、キュー/トピックのペイロードとして定義されている、SQLのユーザー定義型Javaマッピングである必要があります。SQLのユーザー定義型に対応するJavaクラスは、JPublisherツールを使用して生成できます。

15.1.14 JMS相関識別子の設定

public void setJMSCorrelationID(java.lang.String correlationID)
                         throws JMSException

AQjmsMessage.setJMSCorrelationID()は、メッセージの相関識別子を指定します。

15.2 JMSメッセージ・プロパティの指定

JMSで始まるプロパティ名は、プロバイダ固有です。ユーザー定義のプロパティは、JMSで始めることができません。

次のプロバイダのプロパティは、Text、Stream、Object、BytesまたはMapMessageを使用するクライアントが設定できます。

次のプロパティは、AdtMessageに対して設定できます。

内容は次のとおりです。

15.2.1 Booleanメッセージ・プロパティの設定

public void setBooleanProperty(java.lang.String name,
                               boolean value)
                        throws JMSException

AQjmsMessage.setBooleanProperty()は、メッセージ・プロパティをBooleanとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Booleanプロパティの名前
value メッセージに設定するBooleanプロパティの値

15.2.2 Stringメッセージ・プロパティの設定

public void setStringProperty(java.lang.String name,
                              java.lang.String value)
                       throws JMSException

AQjmsMessage.setStringProperty()は、メッセージ・プロパティをStringとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Stringプロパティの名前
value メッセージに設定するStringプロパティの値

15.2.3 Integerメッセージ・プロパティの設定

public void setIntProperty(java.lang.String name,
                           int value)
                    throws JMSException

AQjmsMessage.setIntProperty()は、メッセージ・プロパティをIntegerとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Integerプロパティの名前
value メッセージに設定するIntegerプロパティの値

15.2.4 Doubleメッセージ・プロパティの設定

public void setDoubleProperty(java.lang.String name,
                              double value)
                       throws JMSException

AQjmsMessage.setDoubleProperty()は、メッセージ・プロパティをDoubleとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Doubleプロパティの名前
value メッセージに設定するDoubleプロパティの値

15.2.5 Floatメッセージ・プロパティの設定

public void setFloatProperty(java.lang.String name,
                             float value)
                      throws JMSException

AQjmsMessage.setFloatProperty()は、メッセージ・プロパティをFloatとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Floatプロパティの名前
value メッセージに設定するFloatプロパティの値

15.2.6 Byteメッセージ・プロパティの設定

public void setByteProperty(java.lang.String name,
                            byte value)
                     throws JMSException

AQjmsMessage.setByteProperty()は、メッセージ・プロパティをByteとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Byteプロパティの名前
value メッセージに設定するByteプロパティの値

15.2.7 Longメッセージ・プロパティの設定

public void setLongProperty(java.lang.String name,
                            long value)
                     throws JMSException

AQjmsMessage.setLongProperty()は、メッセージ・プロパティをLongとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Longプロパティの名前
value メッセージに設定するLongプロパティの値

15.2.8 Shortメッセージ・プロパティの設定

public void setShortProperty(java.lang.String name,
                             short value)
                      throws JMSException

AQjmsMessage.setShortProperty()は、メッセージ・プロパティをShortとして指定します。パラメータは次のとおりです。

パラメータ 説明
name Shortプロパティの名前
value メッセージに設定するShortプロパティの値

15.2.9 Objectメッセージ・プロパティの設定

public void setObjectProperty(java.lang.String name,
                              java.lang.Object value)
                       throws JMSException

AQjmsMessage.setObjectProperty()は、メッセージ・プロパティをObjectとして指定します。オブジェクトとしてのプリミティブの値(Boolean、Byte、Short、Integer、Long、Float、DoubleおよびString)のみがサポートされています。パラメータは次のとおりです。

パラメータ 説明
name JavaのObjectプロパティの名前
value メッセージに設定するJavaのObjectプロパティの値

15.3 MessageProducerが送信するすべてのメッセージに対するデフォルトのTimeToLiveの設定

public void setTimeToLive(long timeToLive)
                   throws JMSException

このメソッドは、MessageProducerが送信するすべてのメッセージに対するデフォルトのTimeToLiveを設定します。TimeToLiveはメッセージ遅延が有効になった後に計算されます。このメソッドのパラメータは次のとおりです。

パラメータ 説明
timeToLive ミリ秒で指定されるメッセージのTime-To-Live(ゼロは無制限)

例15-3 MessageProducerが送信するすべてのメッセージに対するデフォルトのTimeToLiveの設定

/* Set default timeToLive value to 100000 milliseconds for all messages sent by the QueueSender*/
QueueSender sender;
sender.setTimeToLive(100000);

15.4 MessageProducerが送信するすべてのメッセージに対するデフォルトの優先順位の設定

public void setPriority(int priority)
                 throws JMSException

このメソッドは、MessageProducerが送信するすべてのメッセージに対するデフォルトのPriorityを設定します。パラメータは次のとおりです。

パラメータ 説明
priority このMessageProducerのメッセージの優先順位。デフォルトは4です。

優先順位には、どの整数値でも指定できます。数値が小さいほど、優先順位が高いことを表します。優先順位がsend()操作時に明示的に指定されている場合は、このメソッドで設定されたデフォルト値をオーバーライドします。

例15-4 QueueSenderが送信するすべてのメッセージに対するデフォルトの優先順位の設定

/* Set default priority value to 2 for all messages sent by the QueueSender*/
QueueSender sender;
sender.setPriority(2);

例15-5 TopicPublisherが送信するすべてのメッセージに対するデフォルトの優先順位の設定

/* Set default priority value to 2 for all messages sent by the TopicPublisher*/
TopicPublisher publisher;
publisher.setPriority(1);

15.5 AQjmsエージェントの作成

public void createAQAgent(java.lang.String agent_name,
                          boolean enable_http,
                   throws JMSException

このメソッドはAQjmsAgentを作成します。パラメータは次のとおりです。

パラメータ 説明
agent_name AQエージェントの名前。
enable_http TRUEに設定すると、このエージェントはHTTP経由でAQにアクセスできます。

15.6 メッセージの同期受信

タイムアウトを指定するか、待機なしで、メッセージを同期受信できます。また、変換を使用してメッセージを受信することもできます。

15.6.1 タイムアウト指定でのメッセージ・コンシューマの使用

public javax.jms.Message receive(long timeout)
                          throws JMSException

このメソッドは、タイムアウトを指定し、メッセージ・コンシューマを使用してメッセージを受信します。

パラメータ 説明
timeout タイムアウト値(ミリ秒単位)

例15-6 タイムアウト指定でのメッセージ・コンシューマの使用

TopicConnectionFactory    tc_fact   = null;
TopicConnection           t_conn    = null;
TopicSession              t_sess    = null;
TopicSession              jms_sess;
Topic                     shipped_orders;
int                       myport = 5521;

/* create connection and session */
tc_fact = AQjmsFactory.getTopicConnectionFactory(
   "MYHOSTNAME", "MYSID", myport, "oci8");
t_conn = tc_fact.createTopicConnection("jmstopic", "jmstopic");
jms_sess = t_conn.createTopicSession(true, Session.CLIENT_ACKNOWLEDGE);
shipped_orders = ((AQjmsSession )jms_sess).getTopic(
   "WS", "Shipped_Orders_Topic");

/* create a subscriber, specifying the correct CustomDatumFactory  and
selector */
subscriber1 = jms_sess.createDurableSubscriber(
   shipped_orders, 'WesternShipping',
   " priority > 1 and tab.user_data.region like 'WESTERN %'",
   false, AQjmsAgent.getFactory());
/* receive, blocking for 30 seconds if there were no messages */
Message = subscriber.receive(30000);

例15-7 JMS: メッセージが届くまでブロック

public BolOrder get_new_order1(QueueSession jms_session)
 {
   Queue            queue;
   QueueReceiver    qrec;
   ObjectMessage    obj_message;
   BolCustomer      customer;
   BolOrder         new_order = null;
   String           state;

   try
   {
   /* get a handle to the new_orders queue */
    queue = ((AQjmsSession) jms_session).getQueue("OE", "OE_neworders_que");
    qrec = jms_session.createReceiver(queue);

    /* wait for a message to show up in the queue */
    obj_message = (ObjectMessage)qrec.receive();
    new_order = (BolOrder)obj_message.getObject();
    customer = new_order.getCustomer();
    state    = customer.getState();
    System.out.println("Order:  for customer " + customer.getName());
   }
  catch (JMSException ex)
   {
     System.out.println("Exception: " + ex);
   }
   return new_order;
 }

15.6.2 待機なしでのメッセージ・コンシューマの使用

public javax.jms.Message receiveNoWait()
                                throws JMSException

このメソッドは、待機なしで、メッセージ・コンシューマを使用してメッセージを受信します。

例15-8 JMS: メッセージを非ブロック

public BolOrder poll_new_order3(QueueSession jms_session)
 {
   Queue            queue;
   QueueReceiver    qrec;
   ObjectMessage    obj_message;
   BolCustomer      customer;
   BolOrder         new_order = null;
   String           state;

   try
   {
    /* get a handle to the new_orders queue */
    queue = ((AQjmsSession) jms_session).getQueue("OE", "OE_neworders_que");
    qrec = jms_session.createReceiver(queue);

    /* check for a message to show in the queue */
    obj_message = (ObjectMessage)qrec.receiveNoWait();
    new_order = (BolOrder)obj_message.getObject();
    customer = new_order.getCustomer();
    state    = customer.getState();

    System.out.println("Order:  for customer " + customer.getName());
   }
   catch (JMSException ex)
   {
     System.out.println("Exception: " + ex);
   }
   return new_order;
 }

15.6.3 変換による宛先からのメッセージの受信

キューまたはトピックからメッセージを受信するときに変換を適用できます。メッセージを変換してから、JMSアプリケーションに戻します。

変換は、AqjmsQueueReceiverAQjmsTopicSubscriberまたはAQjmsTopicReceiversetTransformation()インタフェースを使用して指定できます。

例15-9 JMS: 変換による宛先からのメッセージの受信

西部地域向け出荷処理アプリケーションがOE_bookedorders_topicからメッセージを取り出すと仮定します。変換OE2WSを指定して、メッセージをOracleオブジェクト型WS_orderとして取り出します。WSOrder JavaクラスがJPublisherによって生成され、Oracleオブジェクト型WS.WS_orderにマップされると仮定します。

public AQjmsAdtMessage retrieve_bookedorders(TopicSession jms_session)
  AQjmsTopicReceiver  receiver;
  Topic               topic;
  Message             msg = null;

  try
  {
    /* get a handle to the OE_bookedorders_topic */
    topic = ((AQjmsSession)jms_session).getTopic("OE", "OE_bookedorders_topic");

    /* Create a receiver for WShip */
    receiver = ((AQjmsSession)jms_session).createTopicReceiver(
       topic, "WShip, null, WSOrder.getFactory());

    /* set the transformation in the publisher */
    receiver.setTransformation("OE2WS");
    msg = receiver.receive(10);
  }
  catch (JMSException ex)
  {
     System.out.println("Exception :", ex);
  }
       return (AQjmsAdtMessage)msg;
}

15.7 メッセージの受信に対するナビゲーション・モードの指定

public void setNavigationMode(int mode)
                       throws JMSException

このメソッドは、メッセージの受信に対してナビゲーション・モードを指定します。パラメータは次のとおりです。

パラメータ 説明
mode ナビゲーション・モードの新規値

例15-10 メッセージの受信に対するナビゲーション・モードの指定

TopicConnectionFactory    tc_fact   = null;
TopicConnection           t_conn    = null;
TopicSession              t_sess    = null;
TopicSession              jms_sess;
Topic                     shipped_orders;
int                       myport = 5521;

/* create connection and session */
tc_fact = AQjmsFactory.getTopicConnectionFactory(
   "MYHOSTNAME", "MYSID", myport, "oci8");
t_conn = tc_fact.createTopicConnection("jmstopic", "jmstopic");
jms_sess = t_conn.createTopicSession(true, Session.CLIENT_ACKNOWLEDGE);
shipped_orders = ((AQjmsSession )jms_sess).getTopic("WS", "Shipped_Orders_Topic");

/* create a subscriber, specifying the correct CustomDatumFactory and selector */
subscriber1 = jms_sess.createDurableSubscriber(
   shipped_orders, 'WesternShipping',
   "priority > 1 and tab.user_data.region like 'WESTERN %'", false,
   AQjmsAgent.getFactory());
subscriber1.setNavigationMode(AQjmsConstants.NAVIGATION_FIRST_MESSAGE);

/* get message for the subscriber, returning immediately if there was nomessage */
Message = subscriber.receive();

15.8 メッセージの非同期受信

メッセージを非同期に受信するには、次の2つの方法があります。

15.8.1 メッセージ・コンシューマに対するメッセージ・リスナーの指定

public void setMessageListener(javax.jms.MessageListener myListener)
                        throws JMSException

このメソッドは、メッセージ・コンシューマに対してメッセージ・リスナーを指定します。パラメータは次のとおりです。

パラメータ 説明
myListener コンシューマに対してメッセージ・リスナーを設定します。

例15-11 メッセージ・コンシューマに対するメッセージ・リスナーの指定

TopicConnectionFactory    tc_fact   = null;
TopicConnection           t_conn    = null;
TopicSession              t_sess    = null;
TopicSession              jms_sess;
Topic                     shipped_orders;
int                       myport = 5521;
MessageListener           mLis = null;

/* create connection and session */
tc_fact = AQjmsFactory.getTopicConnectionFactory(
   "MYHOSTNAME", "MYSID", myport, "oci8");
t_conn = tc_fact.createTopicConnection("jmstopic", "jmstopic");
jms_sess = t_conn.createTopicSession(true, Session.CLIENT_ACKNOWLEDGE);
shipped_orders = ((AQjmsSession )jms_sess).getTopic(
    "WS", "Shipped_Orders_Topic");

/* create a subscriber, specifying the correct CustomDatumFactory and selector */
subscriber1 = jms_sess.createDurableSubscriber(
   shipped_orders, 'WesternShipping',
   "priority > 1 and tab.user_data.region like 'WESTERN %'",
   false, AQjmsAgent.getFactory());
mLis = new myListener(jms_sess, "foo");

/* get message for the subscriber, returning immediately if there was nomessage */
subscriber.setMessageListener(mLis);
The definition of the myListener class
import oracle.AQ.*;
import oracle.jms.*;
import javax.jms.*;
import java.lang.*;
import java.util.*;
public class myListener implements MessageListener
{
   TopicSession   mySess;
   String         myName;
   /* constructor */
   myListener(TopicSession t_sess, String t_name)
   {
      mySess = t_sess;
      myName = t_name;
   }
   public onMessage(Message m)
   {
      System.out.println("Retrieved message with correlation: " ||
m.getJMSCorrelationID());
      try{
        /* commit the dequeue */
        mySession.commit();
      } catch (java.sql.SQLException e)
      {System.out.println("SQL Exception on commit"); }
   }
}

15.8.2 セッションに対するメッセージ・リスナーの指定

public void setMessageListener(javax.jms.MessageListener listener)
                        throws JMSException

このメソッドは、セッションに対してメッセージ・リスナーを指定します。

パラメータ 説明
listener このセッションに関連付けするメッセージ・リスナー

15.9 メッセージIDの取得

内容は次のとおりです。

15.9.1 相関識別子の取得

public java.lang.String getJMSCorrelationID()
          throws JMSException

AQjmsMessage.getJMSCorrelationID()は、メッセージの相関識別子を取得します。

15.9.2 メッセージ識別子の取得

public byte[] getJMSCorrelationIDAsBytes()
          throws JMSException

AQjmsMessage.getJMSMessageID()は、メッセージのメッセージ識別子をバイトまたは文字列として取得します。

15.10 JMSメッセージ・プロパティの取得

内容は次のとおりです。

15.10.1 Booleanメッセージ・プロパティの取得

public boolean getBooleanProperty(java.lang.String name)
          throws JMSException

AQjmsMessage.getBooleanProperty()は、メッセージ・プロパティをBooleanとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Booleanプロパティの名前

15.10.2 Stringメッセージ・プロパティの取得

public java.lang.String getStringProperty(java.lang.String name)
          throws JMSException

AQjmsMessage.getStringProperty()は、メッセージ・プロパティをStringとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Stringプロパティの名前

15.10.3 Integerメッセージ・プロパティの取得

public int getIntProperty(java.lang.String name)
          throws JMSException

AQjmsMessage.getIntProperty()は、メッセージ・プロパティをIntegerとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Integerプロパティの名前

15.10.4 Doubleメッセージ・プロパティの取得

public double getDoubleProperty(java.lang.String name)
                         throws JMSException

AQjmsMessage.getDoubleProperty()は、メッセージ・プロパティをDoubleとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Doubleプロパティの名前

15.10.5 Floatメッセージ・プロパティの取得

public float getFloatProperty(java.lang.String name)
          throws JMSException

AQjmsMessage.getFloatProperty()は、メッセージ・プロパティをFloatとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Floatプロパティの名前

15.10.6 Byteメッセージ・プロパティの取得

public byte getByteProperty(java.lang.String name)
          throws JMSException

AQjmsMessage.getByteProperty()は、メッセージ・プロパティをByteとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Byteプロパティの名前

15.10.7 Longメッセージ・プロパティの取得

public long getLongProperty(java.lang.String name)
          throws JMSException

AQjmsMessage.getLongProperty()は、メッセージ・プロパティをLongとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Longプロパティの名前

15.10.8 Shortメッセージ・プロパティの取得

public short getShortProperty(java.lang.String name)
                       throws JMSException

AQjmsMessage.getShortProperty()は、メッセージ・プロパティをShortとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Shortプロパティの名前

15.10.9 Objectメッセージ・プロパティの取得

public java.lang.Object getObjectProperty(java.lang.String name)
                                   throws JMSException

AQjmsMessage.getObjectProperty()は、メッセージ・プロパティをObjectとして取得します。パラメータは次のとおりです。

パラメータ 説明
name Objectプロパティの名前

例15-12 Objectメッセージ・プロパティの取得

TextMessage message;
message.getObjectProperty("empid", new Integer(1000);

15.11 クローズおよびシャットダウン

内容は次のとおりです。

15.11.1 MessageProducerのクローズ

public void close()
           throws JMSException

AQjmsProducer.close()MessageProducerをクローズします。

15.11.2 メッセージ・コンシューマのクローズ

public void close()
           throws JMSException

AQjmsConsumer.close()は、メッセージ・コンシューマをクローズします。

15.11.3 JMSコネクションの停止

public void stop()
          throws JMSException

AQjmsConnection.stop()はJMSコネクションを停止します。

15.11.4 JMSセッションのクローズ

public void close()
           throws JMSException

AQjmsSession.close()はJMSセッションをクローズします。

15.11.5 JMSコネクションのクローズ

public void close()
          throws JMSException

AQjmsConnection.close()はJMSコネクションをクローズし、コネクションのために割り当てられているすべてのリソースを解放します。通常、JMSのプロバイダは重要なリソースをコネクションのためにJVMの外部に割り当てるため、クライアントはこれらのリソースが必要ない場合はクローズする必要があります。ガベージ・コレクションによる最終的なリソースの解放を待つ必要はありません。

15.12 トラブルシューティング

内容は次のとおりです。

15.12.1 JMSエラー・コードの取得

public java.lang.String getErrorCode()

AQjmsException.getErrorCode()は、JMS例外のエラー・コードを取得します。

15.12.2 JMSエラー・番号の取得

public int getErrorNumber()

AQjmsException.getErrorNumber()は、JMS例外のエラー番号を取得します。


注意:

このメソッドは今後のリリースでは使用されなくなります。かわりに、getErrorCode()を使用してください。

15.12.3 JMS例外にリンクされた例外の取得

public java.lang.String getLinkString()

AQjmsException.getLinkString()は、JMS例外にリンクされた例外を取得します。一般に、この例外にはデータベースで発行されるSQL例外が含まれます。

15.12.4 JMS例外のスタック・トレースの出力

public void printStackTrace(java.io.PrintStream s)

AQjmsException.printStackTrace()は、JMS例外のスタック・トレースを出力します。

15.12.5 例外リスナーの設定

public void setExceptionListener(javax.jms.ExceptionListener listener)
                          throws JMSException

AQjmsConnection.setExceptionListener()は、コネクション用の例外リスナーを指定します。パラメータは次のとおりです。

パラメータ 説明
listener 例外リスナー

例外リスナーの登録が完了している場合は、コネクションに重大な問題が検出されると通知されます。これは、リスナーのonException()メソッドをコールして、問題を説明するJMS例外を渡すことによって実行されます。これによって、問題がJMSクライアントに非同期に通知されます。メッセージを処理するのみのコネクションもあるため、コネクションが失敗したことを知るための他の方法がありません。

例15-13 コネクション用の例外リスナーの指定

//register an exception listener
Connection jms_connection;
jms_connection.setExceptionListener(
    new ExceptionListener() {
        public void onException (JMSException jmsException) {
            System.out.println("JMS-EXCEPTION: " + jmsException.toString());
        }
    };
  );

15.12.6 例外リスナーの取得

public javax.jms.ExceptionListener getExceptionListener()
                                                 throws JMSException

AQjmsConnection.getExceptionListener()は、コネクション用の例外リスナーを取得します。

例15-14 コネクション用の例外リスナーの取得

//Get the exception listener
Connection jms_connection;
ExceptionListener el = jms_connection.getExceptionListener();