Главная » Java, Web » Пример приложения с использованием компонента EJB

0

Приложение работает на сервере Tomcat. Структура каталогов приложения выглядит следующим образом (табл. 5.20).

Таблица 5.20. Структура каталогов приложения

code/StatefulMakeApp/MakeAppClient

 

Build.xml

 

Index.jsp

 

WEB-

IN E

 

 

Web.xml

 

 

App.tld

 

 

Struts-bean.tld

Клиентский код включает в себя класс GetBeanAction — файл code/ StatefulMakeApp/MakeAppClient/WEB-INF/classes/code/eolymp/actions/ GetBeanAction.java (листинг 5.27).

Листинг 5.27. Файл GetBeanAction.java                                                                                         j

package code.eolymp.actions; import java.util.Vectors- import java.io.IOException;

import j ava.lang.reflect.InvocationTargetException;

import java.util.Locales-

import java.util.Hashtable;

import javax.servlet.*;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import org.apache.struts.util.*;

Таблица 5.20 (окончание)

import code.eolymp.beans.MakeAppClientBean;

public final class GetBeanAction extends Action { public GetBeanAction() {}

public ActionForward perform (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

HttpSession session = request.getSession(); MakeAppClientBean clientbean = new MakeAppClientBean(); clientbean.startup();

session.setAttribute("greeting", clientbean.sayGreeting("MakeApp from a stateful EJB!"));

return (mapping.findForward("success")) ;

Приложение использует клиентский компонент — класс MakeAppClientBean, файл code/MakeApp/MakeAppClient/WEB-INF/classes/code/eolymp/beans/ MakeAppClientBean.java (листинг 5.28).

Листинг 5.28. Файл MakeAppClientBean/java                                                                                 I

package code.eolутр.beans;

impo rt j avax.naming.*;

import java.util.Hashtable;

import j avax.rmi.PortableRemoteObj ect;

impo rt j avax.ej b.*;

public class MakeAppClientBean

code.eolymp.MakeAppEJBClasses.MakeApp MakeApp = null; code.eolymp.MakeAppEJBClasses.MakeAppHome home = null; public MakeAppClientBean() {

I*

Создает экземпляр компонента MakeApp на сервере и вызывает метод ‘sayMakeApp()’, выводит результат в виде String.

public void startup () {

System.setProperty("java.naming.factory.initial",

"org.jnp.interfaces.NamingContextFactory"); System.set Property("j ava.naming.provider.ur1", "localhost:1099");

try {

InitialContext jndiContext = new InitialContext(); System.out.println("Got context \n"); Object ref = jndiContext.lookup("MakeApp"); System.out.println("Got reference \n"); home = (code.eolymp.MakeAppEJBClasses.MakeAppHome) PortabieRemoteObj ect.narrow (ref, code.eolymp.MakeAppEJBClasses.MakeAppHome.class); MakeApp = home.create();

}

catch(Exception e) {

System.out.println(e.toString());

}

}

public String sayGreeting(String greeting) { String output = new String(""); try {

output += MakeApp.sayMakeApp(greeting);

}

catch(Exception e) {

System.out.println(e.toString() ) ;

}

return(output);

}

}

Серверный компонент EJB располагается в каталоге MakeAppEJB, который имеет следующую структуру (табл. 5.21).

Домашний интерфейс описан в файле code/StatefulMakeApp/ MakeAppEJB/code/eolymp/MakeAppEJBClasses/MakeAppHome.java (листюг 5.29).

j Листинг 5.29. Файл MakeAppHome.java                                                                                         j

package code.eolутр.MakeAppEJBClasses; import java.io.Serializable; import java.rmi.RemoteException; import j avax.ej b.CreateException; import javax.ejb.EJBHome;

Задание домашнего интерфейса для ‘MakeApp’. public interface MakeAppHome extends EJBHome

Экземпляр класса ‘MakeAppBean’ на сервере

MakeApp create() throws RemoteException, CreateException;

Таблица 5.21. Структура компонента EJB

Файл code/StatefulMakeApp/MakeAppEJB/code/eolymp/MakeAppEJBClasses/ MakeApp.java содержит удаленный интерфейс (листинг 5.30).

Листинг 5.30. Файл MakeApp.java                                                                                                     j

package code.eolутр.MakeAppEJBClasses; import javax.ejb.EJBObject; import java.rmi.RemoteException;

public interface MakeApp extends EJBObject

public void setGreeting(String newGreeting) throws RemoteException; public String getGreeting() throws RemoteException; public String sayMakeAppO throws RemoteException;

Класс компонента EJB содержит методы getGreeting и setGreeting, а также переменную greeting, которая служит для хранения информации о состоянии сессии — файл code/StatefulMakeApp/MakeAppEJB/code/eolymp/ MakeAppEJBClasses/MakeAppBean.java (листинг 5.31).

Листинг 5.31. Файл MakeAppBean.java                                                                                           j

package code.eolymp.MakeAppEJBClasses; import java.rmi.RemoteException; import javax.ejb.SessionBean; import j avax.ej b.SessionContext;

public class MakeAppBean implements SessionBean

String greeting;

public void setGreeting(String newGreeting) { greeting = newGreeting;

public String getGreeting() { return (greeting);

public String sayMakeAppO

return(getGreeting()) ;

public MakeAppBean() {}

public void ejbCreate() {} public void ejbRemoveO {} public void ejbActivate() {} public void ejbPassivate() {}

public void setSessionContext(SessionContext sc) {}

Файл описания размещения ejb-jar.xml представлен ниже (листинг 5.32).

Листинг 5.32. Файл ejb-jar.xml

<?xml version="l.0"?> <!DOCTYPE ejb-jar PUBLIC

‘-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN’ ‘http://j ava.sun.com/dtd/ej b-jar_2_0.dtd’>

<ejb-jar>

<display-name>MakeApp</display-name>

<enterprise-beans>

<session>

<display-name>MakeApp</display-name> <ej b-name>MakeApp</ej b-name>

<home>code.eolymp.MakeAppEJBClasses.MakeAppHome</home> <remote>code.eolymp.MakeAppEJBClasses.MakeApp</remote> <ejb-class>code.eolymp.MakeAppEJBClasses.MakeAppBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Bean</transaction-type> <security-identity> <descriptionx/description> <use-caller-identity></use-caller-identity> </security-identity> </session> </enterprise-beans> </ejb-jar>

Скрипт build.xml служит для задания информации, используемой утилитами code/StatefulMakeApp/MakeAppClient/build.xml (листинг 5.33).

Листинг 5.33. Файл build.xml

<project name="MakeAppClient" default="dist" basedir=".">

<!— set global properties for this build —>

<property environment="env"/>

<property name="top" value="."/>

<property name="src" value="."/>

<property name="build" value="build"/>

<property name="dist" value="dist"/>

<property name="war_dir" value="${dist}/lib"/>

<property name="war_file" value="${war_dir}/MakeAppClient.war"/>

<property name="webinf" value="${top}/WEB-INF"/> <property name="web.xml" value="${webinf}/web.xml"/> <property name="classes" value="${webinf}/classes"/> <property name="lib" value="${top}/WEB-INF/lib"/>

<property name="struts.jar" value="${env.STRUTS_HOME}/lib/struts.jar"/>

<property name="servlet.jar" value="${env.TOMCAT_HOME}/lib/servlet.jar"/>

<property name="ejb.src" value="${top}/../MakeAppEJB"/>

<propertу name="ejb.jar" value="${env.JBOSS_HOME}/1ib/ext/j boss- j2ee.jar"/>

<property name="deploy" value="${env.JBOSS_HOME}/deploy"/>

ctarget name="clean">

<!— Delete our the ${build} and ${dist} directory trees —> <delete dir="${build}"/> <delete dir="${dist}"/> <delete dir="${war_dir}"/> </target>

<target name="init">

<!— Create the build directory structure used by compile and dist —> cmkdir dir="${build}"/> <mkdir dir="${dist}"/> <mkdir dir="${war_dir}"/> </target>

ctarget name="compile" depends="init">

<!— Compile the java code from ${src} into ${build} —> <javac

srcdir="${ejb.src}" destdir="${build}" classpath="${ejb.jar}"/> <javac

srcdir="${top}/${src}" destdir="${build}"

classpath="${servlet.jar}:${struts.jar}:${ejb.jar}"/> </target>

<target name="dist" depends="compile">

<!— Put everything in a war file —>

<war warfile="${war_file}" webxml="${web.xml}">

<!— include all JSPs in root level, and all .properties files anywhere —>

<fileset dir="${top}/${src}">

cinclude name="*.jsp"/>

<include name="**/*.properties"/>

</fileset>

<!— include all tag libraries in WEB-INF, and all .xml config files, but not web.xml (that’s handled separately) —>

<webinf dir="${webinf}">

<include name="*.tld"/>

<include name="*.xml"/>

<exclude name="web.xml"/>

</webinf>

<!— include all libraries in WEB-INF/lib (like struts.jar) —> <lib dir="${lib}"/>

<!— include all compiled classes —> cclasses dir="${build}"/> </war> </target>

<target name="deploy">

<!— Copy the war file to the JBoss deploy directory —> <copy file="${war_file}" todir="${deploy}"/> </target>

<target name="all" depends="clean,dist,deploy"/> </project>

Скрипт конфигурации code/StatefulMakeApp/MakeAppEJB/build.xml представлен ниже (листинг 5.34).

Листинг 5.34. Файл MakeAppEJB/build.xml

<project name="MakeAppEJB" default="dist" basedir=".">

<!— set global properties for this build —>

<property environment="env"/>

<property name="top" value="."/>

<property name="src" value="."/>

<property name="build" value="build"/>

<property name="dist" value="dist"/>

<property name="jar_dir" value="${dist}/lib"/>

<property name="jar_file" value="${jar_dir}/MakeAppEJB.jar"/>

<property name="webinf" value="${top}/WEB-INF"/>

<property name="web.xml" value="${webinf}/web.xml"/>

<property name="classes" value="${webinf}/classes"/>

<property name="lib" value="${top}/WEB-INF/lib"/>

<property name="ejb.jar" value="${env.JBOSS_HOME}/lib/ext/ jboss-j2ee.jar"/>

<property name="deploy" value="${env.JBOSS_HOME}/deploy"/>

<target name="clean">

<!— Delete our the ${build} and ${dist} directory trees —> <delete dir="${build}"/> <delete dir="${dist}"/> <delete dir="${jar_dir}"/> </target>

<target name="init">

cmkdir dir="${build}"/> <mkdir dir="${dist}"/> <mkdir dir="${jar_dir}"/> </target>

ctarget name="compile" depends="init">

<!— Compile the java code from ${src} into ${build} —> <javac

srcdir="${top}/${src}" destdir="${build}" classpath="${ejb.jar}"/> </target>

<target name="dist" depends="compile"> <!— Put everything in a jar file —> <jar jarfile="${jar_file}"> <!— include all compiled class files —> <fileset dir="${build}">

<include name="**/*.class"/> </fileset>

<!— include ejb-jar.xml —> <fileset dir="${top}">

<include name="META-INF/ejb-jar.xml"/> </fileset> </jar> </target>

<target name="deploy">

<!— Copy the jar file to the JBoss deploy directory —> ссору file="${jar_file}" todir="${deploy}"/> </target>

<target name="all" depends="clean,dist,deploy"/> </project>

И, наконец, скрипт конфигурации code/StatefulMakeApp/build.xml (листинг 5.35).

\ Листинг 5.35. Файл code/StatefulMakeApp/build.xml                                                                    )

<project name="StatefulMakeApp" default="all" basedir=".">

<target name="all">

<ant dir="MakeAppClient" target="all"/> <ant dir="MakeAppEJB" target="all"/> </target>

<target name="clean">

<ant dir="MakeAppClient" target="clean"/> <ant dir="MakeAppEJB" target="clean"/> </target> </project>

Все приложение компилируется и размещается на сервере с применением утилиты ant, которая запускается из каталога StatefulMakeApp (ant all). Приложение запускается путем обращения из браузера к ресурсу http://localhost:8080/MakeAppClient/getEJB.do.

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии