送信側の実装
今回は説明を簡単にするために、送信側はJavaアプリケーションで実装します。MDBSample02という名前で新規にプロジェクトを作ります。Javaアプリケーションは前編で作成したPtpSenderを改良すればすぐに作成できます。リスト3が送信側のImoshochuCatalogSenderのメッセージ送信メソッドのsendMeigaraメソッドです。
001: public void sendMeigara() {
002: QueueConnectionFactory myConnectionFactory = null;
003: Queue myQueue = null;
004: Connection myConnection = null;
005: Session mySession = null;
006: MessageProducer messageProducer = null;
007: ObjectMessage objectMessage = null;
008: ImoshochuCatalogItem catalog = null;
009: try {
010: // コネクションファクトリとデスティネーションの取得(アノテーションは使用せず)
011: Context c = new InitialContext();
012: myConnectionFactory = (QueueConnectionFactory)c.lookup("jms/MDBSampleConnectionFactory");
013: myQueue = (Queue)c.lookup("jms/MDBSampleQueue");
014:
015: myConnection = myConnectionFactory.createQueueConnection();
016: mySession = myConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
017: // MessageProducerとTextMessageはSessionオブジェクトから生成される
018: messageProducer = mySession.createProducer(myQueue);
019: objectMessage = mySession.createObjectMessage();
020:
021: catalog = new ImoshochuCatalogItem();
022: catalog.setName("がんご焼酎屋");
023: catalog.setNameKana("がんごしょうちゅうや");
024: catalog.setDosu(25);
025: catalog.setKoji("白");
026: catalog.setSweetPotatoName("ジョイホワイト");
027: catalog.setManufacturer("大石酒造");
028: catalog.setVolume(1.8f);
029: catalog.setPrice(2630);
030:
031: objectMessage.setObject(catalog);
032: messageProducer.send(objectMessage);
033:
034: } catch (JMSException e) {
035: e.printStackTrace();
036: } catch (NamingException ne) {
037: ne.printStackTrace();
038: } finally {
039: try {
040: if (myConnection != null) {
041: myConnection.close();
042: }
043: } catch (Exception e) {
044: e.printStackTrace();
045: myConnection = null;
046: }
047: try {
048: if (mySession != null) {
049: mySession.close();
050: }
051: } catch (Exception e) {
052: e.printStackTrace();
053: mySession = null;
054: }
055: try {
056: if (messageProducer != null) {
057: messageProducer.close();
058: }
059: } catch (Exception e) {
060: e.printStackTrace();
061: messageProducer = null;
062: }
063: }
064: }
リスト3を説明します。MDBを見た後ではコーディングが非常に冗長に感じます。前編のPtpSenderとの大きな違いはメッセージタイプがTextMessageではなくObjectMessageであることです(7行目)。残りはImoshochuCatalogItemオブジェクトのフィールドに値を設定し、そのオブジェクトをObjectMessageのsetObjectメソッドで設定しているところくらいです。
ImoshochuCatalogItemクラスはフィールド変数のgetter/setterメソッドを持った単なるJava Beansクラスであるため説明は割愛します。サンプルコードで確認してください。1点だけ注意しなければならないのは、ObjectMessageに設定するオブジェクトはSerializableでなければならないことです。
