Weblogic配備EJB 2.0ローカルインタフェースを実現するSessionBean
最近のプロジェクトではEJB 2.0が必要なので、この技術を研究するのに時間がかかりました.以前EJB 3.0に接触したことがありますが、学習の過程でこの2つの間に大きな違いがあり、大部分はリモートインタフェースにアクセスし、リモートインタフェースにアクセスするコードを作成する際に、しかも以前はJBoss上に配置されていて、比較的簡単で、ネット上でも多くの関連例があります.コードを書く過程でローカルインタフェースにアクセスする時は比較的複雑であることを発見した(構成が複雑で、コードは基本的に同じで、クライアントがアクセスする時は異なる).ここでは、Web logicの導入EJB 2.0でローカルインタフェースを実現したSessionBeanの学習経験を共有し、役に立つことを期待しています.ローカルインタフェースにアクセスするクライアントはインタフェースと一緒に配置する必要がある(同じ仮想マシンで実行される)ため、ここでは配置時にAntで配置をパッケージ化するwebアプリケーションを構築します.
キー:プロジェクト全体をearパッケージにパッケージする必要があります.earパッケージにはwebモジュールとejbモジュールが含まれている必要があります.
1、weblogicのインストールと構成
2、一つのWeb工事を創立して、localインタフェースを編纂して、ソースコードは以下の通りです.
HelloWorldLocal.java
3、ホームインタフェースの作成:ソースコードは以下の通り:
HelloWorldLocalHome.java
4、Sessionbeanを作成し、ソースコードは以下の通りである.
SecondSessionBean.java
以上の3つのステップは解釈を行わず,論理によって実現も異なる.
4、ejb-jar.xmlファイルを構成する:
5、weblogic-ejb-jar.xmlの構成
6、このステップはかなり重要なステップで、web.xmlファイルを構成します.
7、クライアントアクセスコードの作成:
8、webプロジェクトのwebrootのmeta-infディレクトリの下にアプリケーション.xmlを作成する:
9、パッケージと導入、antによるパッケージと導入:
build.xml
注意build.xmlを実行する場合は、weblogic、weblogicのいくつかのプロパティを起動し、自分のマシンの構成に応じて変更する必要があります.
そして使えますhttp://localhost:7001/ejb2.0/index.jsp訪問しました.
キー:プロジェクト全体をearパッケージにパッケージする必要があります.earパッケージにはwebモジュールとejbモジュールが含まれている必要があります.
1、weblogicのインストールと構成
2、一つのWeb工事を創立して、localインタフェースを編纂して、ソースコードは以下の通りです.
HelloWorldLocal.java
package cn.com.servyou.ejb.session.local;
import javax.ejb.EJBLocalObject;
public interface HelloWorldLocal extends EJBLocalObject {
public String sayHello(String name) ;
}
3、ホームインタフェースの作成:ソースコードは以下の通り:
HelloWorldLocalHome.java
package cn.com.servyou.ejb.session.local;
import javax.ejb.CreateException;
import javax.ejb.EJBLocalHome;
// ejblocalhome
public interface HelloWorldLocalHome extends EJBLocalHome {
public HelloWorldLocal create() throws CreateException;
}
4、Sessionbeanを作成し、ソースコードは以下の通りである.
SecondSessionBean.java
package cn.com.servyou.ejb.session.local;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class SecondSessionBean implements SessionBean {
public void ejbActivate() throws EJBException, RemoteException {
}
public void ejbPassivate() throws EJBException, RemoteException {
}
public void ejbRemove() throws EJBException, RemoteException {
}
public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException {
}
public void ejbCreate() {
}
public String sayHello(String name) {
return name+ ", ";
}
}
以上の3つのステップは解釈を行わず,論理によって実現も異なる.
4、ejb-jar.xmlファイルを構成する:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar id="ejb-jar_ID">
<enterprise-beans>
<session>
<ejb-name>HelloWorld</ejb-name>
<local-home>cn.com.servyou.ejb.session.local.HelloWorldLocalHome</local-home>
<local>cn.com.servyou.ejb.session.local.HelloWorldLocal</local>
<ejb-class>cn.com.servyou.ejb.session.local.SecondSessionBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
5、weblogic-ejb-jar.xmlの構成
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>HelloWorld</ejb-name>
<jndi-name>HelloWorldName</jndi-name>
<local-jndi-name>HelloWorldNameTest</local-jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
6、このステップはかなり重要なステップで、web.xmlファイルを構成します.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<ejb-local-ref>
<description>xxx</description>
<ejb-ref-name>ejb/HelloWorldNameTest</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>cn.com.servyou.ejb.session.local.HelloWorldLocalHome</local-home>
<local>cn.com.servyou.ejb.session.local.HelloWorldLocal</local>
<ejb-link>HelloWorld</ejb-link>// ejb-name
</ejb-local-ref>
</web-app>
7、クライアントアクセスコードの作成:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ page import="java.util.Properties" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="cn.com.servyou.ejb.session.local.HelloWorldLocal" %>
<%@ page import="cn.com.servyou.ejb.session.local.HelloWorldLocalHome" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<%
try {
//Properties properties = new Properties();
//properties.put(Context.INITIAL_CONTEXT_FACTORY,
// "weblogic.jndi.WLInitialContextFactory");
//properties.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context ctx = new InitialContext();
HelloWorldLocalHome obj = (HelloWorldLocalHome) ctx
.lookup("java:comp/env/ejb/HelloWorldNameTest");// web.xml ejb-ref-name
HelloWorldLocal local = obj.create();
System.out.println(local.sayHello("ak47"));
} catch (Exception ee) {
ee.printStackTrace();
}
%>
</head>
<body>
This is my JSP page. <br>
</body>
</html>
8、webプロジェクトのwebrootのmeta-infディレクトリの下にアプリケーション.xmlを作成する:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'>
<application>
<display-name>ejb2.0</display-name>
<description></description>
<module>
<web>
<web-uri>sessionbean.war</web-uri>// web
<context-root>ejb2.0</context-root>//
</web>
</module>
<module>
<ejb>sessionbean.jar</ejb>// web
</module>
</application>
9、パッケージと導入、antによるパッケージと導入:
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="ejb" default="deploy" basedir="..">
<property name="app.dir" value="${basedir}/ejb"/>
<property name="src.dir" value="${app.dir}/src"/>
<property name="weblogic.home" location="D:\bea\weblogic81"/>
<property name="wls.username" value="weblogic"/>
<property name="wls.password" value="12345678"/>
<property name="wls.hostname" value="localhost"/>
<property name="wls.port" value="7001"/>
<property name="wls.server.name" value="myserver"/>
<property name="build.dir" value="${app.dir}/build"/>
<property name="build.classes.dir" value="${build.dir}/classes"/>
<property name="build.classes.metainf" value="${build.classes.dir}/META-INF"/>
<path id="build.classpath">
<fileset dir="${weblogic.home}/server/lib">
<include name="weblogic.jar"/>
</fileset>
<pathelement location="${build.classes.dir}"/>
</path>
<taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy"
classpathref="build.classpath"/>
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.classes.metainf}"/>
</target>
<target name="compile" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on"
optimize="off" includes="cn/**">
<classpath refid="build.classpath"/>
</javac>
<copy todir="${build.classes.metainf}">
<fileset dir="${app.dir}/WebRoot/META-INF">
<exclude name="application.xml"/>
</fileset>
</copy>
</target>
<target name="ear" depends="compile">
<jar jarfile="${app.dir}\sessionbean.jar">
<fileset dir="${build.classes.dir}">
<include name="**/*.*"/>
</fileset>
</jar>
<war warfile="${app.dir}/sessionbean.war" webxml="${app.dir}/WebRoot/WEB-INF/web.xml">
<fileset dir="${app.dir}/WebRoot">
<include name="*.*"/>
</fileset>
</war>
<ear earfile="${app.dir}/sessionbean.ear" appxml="${app.dir}/WebRoot/META-INF/application.xml">
<fileset dir="${app.dir}">
<include name="sessionbean.jar"/>
<include name="sessionbean.war"/>
</fileset>
</ear>
<delete file="${app.dir}/sessionbean.jar"/>
<delete file="${app.dir}/sessionbean.war"/>
</target>
<target name="deploy" depends="undeploy,ear">
<wldeploy action="deploy" name="sessionbean" source="${app.dir}/sessionbean.ear"
targets="${wls.server.name}" user="${wls.username}" password="${wls.password}"
adminurl="t3://${wls.hostname}:${wls.port}"
debug="true" verbose="true" failonerror="true"/>
<echo message=" http://${wls.hostname}:${wls.port}/sessionbean/ EJB"/>
</target>
<target name="undeploy" >
<wldeploy action="undeploy" name="sessionbean" source="${app.dir}/sessionbean.ear"
targets="${wls.server.name}" user="${wls.username}" password="${wls.password}"
adminurl="t3://${wls.hostname}:${wls.port}"
debug="false" verbose="false" failonerror="false"/>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
注意build.xmlを実行する場合は、weblogic、weblogicのいくつかのプロパティを起動し、自分のマシンの構成に応じて変更する必要があります.
そして使えますhttp://localhost:7001/ejb2.0/index.jsp訪問しました.