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"; HelloEJBLocalHome home = null; try { javax.naming.Context ic = new javax.naming.InitialContext(); home = (HelloEJBLocalHome)ic.lookup(beanName); } catch (javax.naming.NameNotFoundException e) { e.printStackTrace(); } catch(javax.naming.NamingException e) { e.printStackTrace(); } HelloEJBLocal eb = null; try { eb = home.create(); } catch (javax.ejb.CreateException e) { e.printStackTrace(); } System.out.println(eb.hello()); try { eb.remove(); eb = null; } catch (javax.ejb.RemoveException e) { e.printStackTrace(); } } }
リモート環境のクライアントからEJBにアクセスする場合は、Homeインタフェース、Remoteインタフェースを使用します。
Homeインタフェースのオブジェクト取得では以下のように記述します。・・・ 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); } ・・・
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"; MemberBmpLocalHome home = null; MemberBmpLocal eb = null; try { javax.naming.Context ic = new javax.naming.InitialContext(); home = (MemberBmpLocal)ic.lookup(lookupId); } 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 = (MemberBmpLocal)ebs.next(); 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 (javax.ejb.FinderException e) { e.printStackTrace(); } } }
Webアプリケーション、EJBアプリケーションまたはJ2EEアプリケーションクライアントからMessage-driven Beanを呼び出す場合、JNDIを使用してJMS Destinationをlookupします。
J2EE1.4のMessage-driven Beanを呼び出す手順を以下に示します。
クライアントアプリケーションの形態に応じて以下のdeployment descriptorにJMS Destinationについて記述を定義する必要があります。
クライアントアプリケーションの形態 |
deployment descriptor |
---|---|
WebアプリケーションからJMSメッセージを送信する場合 |
web.xml |
EJBアプリケーションからJMSメッセージを送信する場合 |
ejb-jar.xml |
J2EEアプリケーションクライアントからJMSメッセージを送信する場合 |
application-client.xml |
<?xml version="1.0" encoding="UTF-8" ?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> ・・・ <message-destination-ref> <description>JMS Destination</description> <message-destination-ref-name>jms/Topic</message-destination-ref-name> <message-destination-type>javax.jms.Topic</message-destination-type> <message-destination-usage>Produces</message-destination-usage> </message-destination-ref > </web-app>
deployment descriptorのタグの詳細は、"Interstage Application Server J2EEユーザーズガイド"を参照してください。
JNDIを使用してJMS Destinationオブジェクトをlookupして、メッセージを送信します。
java:comp/env/[deployment descriptorの<resource-ref>に指定したコネクションファクトリ名]
java:comp/env/[deployment descriptorの<message-destination-ref-name>に指定したDestination名]
package sample; import javax.jms.*; import javax.naming.*; public class TopicClient { public static void main(String[] args) { try { InitialContext initialContext = new InitialContext(); ConnectionFactory connectionFactory = (ConnectionFactory) initialContext.lookup("java:comp/env/jms/ConnectionFactory"); Destination destination = (Destination) initialContext.lookup("java:comp/env/jms/Topic"); Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(destination); TextMessage Message = session.createTextMessage( ); Message.setText( "Message" ); messageProducer.send(Message); connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
J2EEアプリケーションクライアントからJNDIを使用する場合は、JNDIサービスプロバイダの環境設定をする必要があります。JNDIサービスプロバイダの環境設定については、"Interstage Application Server J2EEユーザーズガイド"を参照してください。
目次
索引
![]() ![]() |