| 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ユーザーズガイド"を参照してください。
JMSメッセージを送信する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ユーザーズガイド"を参照してください。
目次
索引
![]()
|