| Interstage Studio プログラマーズガイド | 
			目次
			索引
			![]()  
		 | 
	
| 第2部 Java編 | > 第4章 Enterprise JavaBeans (EJB)を開発する | > 4.3 EJBのプログラミング | 
Session Beanが公開する機能(ビジネスメソッド)を使用するためには、以下の順序でプログラムする必要があります。
以下にSession Beanを呼び出す例を示します。
import java.rmi.*;
import javax.rmi.*;
import javax.ejb.*;
import javax.naming.*;
import PackageHelloEJB.*;
public class SessionClient {
        
        public static void main(String [] args) {
                final String beanName = "java:comp/env/ejb/HelloEJB";
                
                HelloEJBHome home = null;
                try {
                        javax.naming.Context ic = new javax.naming.InitialContext();
                        java.lang.Object obj = (Object)ic.lookup(beanName);
                        home = (HelloEJBHome)
                        javax.rmi.PortableRemoteObject.narrow(obj, HelloEJBHome.class);
                }
                catch (javax.naming.NameNotFoundException e) {
                        e.printStackTrace();
                }
                catch(javax.naming.NamingException e) {
                        e.printStackTrace();
                }
                
                HelloEJBRemote eb = null;
                try {
                        eb = home.create();
                }
                catch (java.rmi.RemoteException e) {
                        e.printStackTrace();
                }
                catch (javax.ejb.CreateException e) {
                        e.printStackTrace();
                }
                
                try {
                        System.out.println(eb.hello());
                }
                catch (java.rmi.RemoteException e) {
                        e.printStackTrace();
                }
                
                try {
                        eb.remove();
                        eb = null;
                }
                catch (java.rmi.RemoteException e) {
                        e.printStackTrace();
                }
                catch (javax.ejb.RemoveException e) {
                        e.printStackTrace();
                }
        }
}
Entity Beanを用いて永続データを操作するためには、以下の順序でプログラムする必要があります。なお、lookup処理以降は、データ挿入、データ削除、データ検索(更新)、インスタンスに依存しないなどのデータ操作によって処理が異なります。
以下にEntity Beanを呼び出す例を示します。
import java.rmi.*;
import javax.rmi.*;
import javax.ejb.*;
import javax.naming.*;
import Sample.*;
public class EntityClient {
        public static void main(String [] args) {
                final String lookupId = "java:comp/env/ejb/MemberBmp";
                
                MemberBmpHome home = null;
                MemberBmpRemote eb = null;
                try {
                        javax.naming.Context ic = new javax.naming.InitialContext();
                        java.lang.Object obj = (Object)ic.lookup(lookupId);
                        home = (MemberBmpHome)javax.rmi.PortableRemoteObject.narrow(obj, MemberBmpHome.class);
                }
                catch (javax.naming.NameNotFoundException e) {
                        e.printStackTrace();
                }
                catch (javax.naming.NamingException e) {
                        e.printStackTrace();
                }
                
                try {
                        java.util.Collection ebCollection = home.findBySalary(100);
                        java.util.Iterator ebs = ebCollection.iterator();
                        while(ebs.hasNext()) {
                                eb = (MemberBmpRemote)javax.rmi.PortableRemoteObject.narrow(ebs.next(),MemberBmpRemote.class);
                                System.out.println("NAME:" + eb.getNAME());
                                System.out.println("ID:" + eb.getID());
                                System.out.println("AGE:" + eb.getAGE());
                                System.out.println("SALARY:" + eb.getSALARY());
                        }
                }
                catch (java.rmi.RemoteException e) {
                        e.printStackTrace();
                }
                catch (javax.ejb.FinderException e) {
                        e.printStackTrace();
                }
        }
}
Message-driven Beanの場合は、直接呼出しは行わず、メッセージサービスにメッセージを送信します。
メッセージを送信する手順を以下に示します。

Interstage Application Server V9.0.1以降では、Webアプリケーション、EJBアプリケーションまたはJ2EEクライアントアプリケーションからJNDIを使用してJMS Destinationをlookupすることで、Message-driven Beanを呼び出すことができます。詳細は、"J2EE1.4 Message-driven Beanの呼び出し方法"を参照してください。
以下にキューにメッセージを送信する例を示します。
import javax.ejb.*;
import javax.naming.*;
import Sample.*;
public class QueueSender {
        public static void main(String [] args) {
                final String factoryName = "java:comp/env/jms/TestQueueFactory ";
                final String queueName = "java:comp/env/jms/TestQueue ";
                
                javax.jms.QueueConnectionFactory factory = null;
                javax.jms.Queue queue = null;
                javax.jms.QueueConnection queueConnection = null;
                javax.jms.QueueSession queueSession = null;
                javax.jms.QueueSender queueSender = null;
                javax.jms.TextMessage textMessage = null;
                try {
                        javax.naming.InitialContext ic = new javax.naming.InitialContext();
                        factory = (javax.jms.QueueConnectionFactory)ic.lookup(factoryName);
                        queue = (javax.jms.Queue)ic.lookup(queueName);
                        queueConnection = factory.createQueueConnection();
                        queueSession = queueConnection.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
                        queueSender = queueSession.createSender(queue);
                        
                        textMessage = queueSession.createTextMessage();
                        
                        queueSender.send(textMessage);
                        
                        queueConnection.close();
                }
                catch (javax.naming.NamingException ex) {
                        ex.printStackTrace();
                }
                catch (javax.jms.JMSException ex) {
                        ex.printStackTrace();
                }
        }
}
以下にトピックにメッセージを送信する例を示します。
import javax.ejb.*;
import javax.naming.*;
import Sample.*;
public class TopicClient {
        public static void main(String [] args) {
                final String factoryName = "java:comp/env/jms/TestTopicFactory ";
                final String topicName = "java:comp/env/jms/TestTopic ";
                
                javax.jms.TopicConnectionFactory factory = null;
                javax.jms.Topic topic = null;
                javax.jms.TopicConnection topicConnection = null;
                javax.jms.TopicSession topicSession = null;
                javax.jms.TopicPublisher topicPublisher = null;
                javax.jms.TextMessage textMessage = null;
                try {
                        javax.naming.InitialContext ic = new javax.naming.InitialContext();
                        factory = (javax.jms.TopicConnectionFactory)ic.lookup(factoryName);
                        topic = (javax.jms.Topic)ic.lookup(topicName);
                        topicConnection = factory.createTopicConnection();
                        topicSession = topicConnection.createTopicSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
                        topicPublisher = topicSession.createPublisher(topic);
                        
                        textMessage = topicSession.createTextMessage();
                        
                        topicPublisher.publish(textMessage);
                        
                        topicConnection.close();
                }
                catch (javax.naming.NamingException ex) {
                        ex.printStackTrace();
                }
                catch (javax.jms.JMSException ex) {
                        ex.printStackTrace();
                }
        }
}
			目次
			索引
			![]()  
		 |