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

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訪問しました.