weblogic部署EJB2.0 实现本地接口的SessionBean

由于在最近的项目中需要用到EJB2.0,所以花了一段时间去研究这项技术;以前接触过EJB3.0,但是在学习的过程中这两者之间有很大的差别,大部分都是访问远程接口,在编写访问远程接口的代码时,而且以前是在JBoss上部署的,相对比较简单,在网上也有很多相关的例子;在写代码的过程中发现访问本地接口时相对比较复杂(配置比较复杂,代码基本都一样,就是客户端访问的时候不一样);在此跟大家分享下weblogic部署EJB2.0 实现本地接口的SessionBean的一些学习经验,希望对大家有用。因为访问本地接口的客户端需要跟接口部署在一起(运行在同一个虚拟机里),所以在这里我将建立一个web应用,在部署时用Ant打包部署。
关键点:需要把整个工程打包成一个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、编写home接口:源代码如下:
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目录下创建一个application.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进行访问了。

你可能感兴趣的:(java,xml,Web,weblogic,ejb)