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(); } } }
目次 索引 |