J2EEとは、Java2 platform Enterprise Editionの略で、セッション管理、トランザクション処理、データベース処理、セキュリティなどに対応した、J2SEの大規模システム向けの環境です。
J2EEでは、サーブレットや、JSPなども使えます。
業務プログラムなどのビジネスロジックは、EJB部品を組み合わせたEJBコンテナとして提供されます。
これらのサービスは、JNDIによって名前解決されます。
Webサ−バ アプリケーションサ−バ +-------------------------+ +---------------------+ | +-----Webコンテナ-----+ | (RMI) | +---EJBコンテナ---+ | | | +-------+ +-------+ | | IIOP | | +-----+ +-----+ | | | | |Servlet| | JSP | |---------->| | EJB | | EJB | | | | | +-------+ +-------+ | | | | +-----+ +-----+ | | | +---------------------+ | | +-----------------+ | | +-------+ | | | | | JNDI | | +---------------------+ | +-------+ | +-------------------------+ |
J2EE 1.2には、以下のクラスが含まれています。
javax.rmi RMI/IIOP 1.0 javax.sql JDBC 2.0 javax.naming JNDI 1.2(Java Naming and Directory Interface) javax.servlets Servlet 2.2 javax.servlets.jsp JSP 1.1(JavaServer Pages) javax.mail JavaMail 1.1 javax.activation JavaBeans Activation Framework 1.0 javax.ejb EJB 1.1(Enterprise JavaBeans) javax.transaction JTA 1.0(Java Transaction API) javax.jms JMS 1.0(Java Message Service) |
EJBとは、Enterprise Java Beansの略で、以下の特徴があります。
EJBには、以下の種類があります。
Session BeanとEntity Beanを使ったシステム構成 Webサーバ アプリケーションサーバ +---------+ +--------------------------------+ +------+ |+-------+| |+-----------+ -->1 +-----------+| |client|-->||servlet||-->||SessionBean| -->2 |EntityBean1|| +------+ |+-------+| |+-----------+ -->3 +-----------+| +--+ | | |EntityBean2||-->|DB| +------+ |+-------+| |+-----------+ -->1 +-----------+| +--+ |client|-->||servlet||-->||SessionBean| -->2 |EntityBean3|| +------+ |+-------+| |+-----------+ -->3 +-----------+| +---------+ +--------------------------------+ |
SessionBeanのライフサイクルは、以下のようになります。
この状態が遷移するときに、EJBの種類により決められたメソッドが呼ばれます。
EJBを提供する場合は、このメソッドに対応する処理を記述することになります。
[未生成] (create) ↓↑ (remove) setSessionContext ↓↑ ejbRemove ejbCreate ↓↑ [活性状態/ready] ejbPassivate ↓↑ ejbActivate [非活性状態/passive]スワッピング |
[未生成] setSessionContext ↓↑ ejbRemove ejbCreate ↓↑ [活性状態/ready] |
EJBを呼び出す場合は、以下のようなコーディングとなります。 EJBでは、JNDIを利用し、名前解決をする必要があります。 JNDIには、サービスプロバイダという概念があり、LDAPやRMIなどのプロバイダを選択することができます。 JNDIで名前解決するためには、Contextを作成し、lookupメソッドを発行します。
import java.util.*; import javax.naming.*; // LDAPの場合 icf = 'com.sun.jndi.ldap.LdapCtxFactory'; url = 'ldap://localhost:389/c=jp/o=ash'; jndiName = 'JNDI名'; // WebLogicServerの場合 icf = 'weblogic.jndi.WLInitialContextFactory'; url = 't3://localhost:7001/examples/アプリケーション名'; jndiName = 'JNDI名'; // JNDI名から、ホームオブジェクトを取得 Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY, icf); p.put(Context.PROVIDER_URL, url); Context ctx = new InitialContext(p); Object home = ctx.lookup(jndiName); // createし、リモートオブジェクトを作成 EJBクラス名 EJB名 = (EJBクラス名) home.create(); // EJBのメソッドの呼び出し EJB名.メソッド名(); // EJBオブジェクトの削除 EJB名.remove(); |