以weblogic为处事器开拓会话EJB
副标题#e#
开拓运行情况:j2eesdk1.4+weblogic8.1
说明:本试验已开拓一个会话EJB为例,系统回收的应用处事器为weblogic8.1
1、编写bean代码(代码的目次在c:\ejbhello下)
① 界说Home Interface
EJB容器通过EJB的Home Interface来建设EJB实例,和Remote Interface一样,执行Home Interface的类由EJB生成东西生成。代码如下:
package ejb.hello;
import javax.ejb.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.*;
/**
*只界说create要领
*/
public interface HelloHome extends EJBHome {
public Hello create() throws CreateException,
RemoteException;
}
②界说EJB长途接口(Remote Interface)
任何一个EJB都是通过Remote Interface被挪用,首先要在Remote Interface中界说这个EJB可以被外界挪用的所有要领。执行Remote Interface的类由EJB生成东西生成,试验的代码如下:
package ejb.hello;
import java.rmi.RemoteException;
import java.rmi.Remote;
import javax.ejb.*;
public interface Hello extends EJBObject, Remote {
//界说供长途挪用的业务逻辑要领
public String getHello() throws RemoteException;
public String getStr() throws RemoteException;
}
③ EJB类的实现
在EJB类中,必需给出在Remote Interface中界说的长途要领的详细实现。EJB类中还包罗一些EJB类型中界说的必需实现的要领,这些要领都有较量统一的实现模版,只需耗费精神在详细业务要领的实现上。试验的代码如下:
package ejb.hello;
import javax.ejb.*;
import java.util.*;
import java.rmi.*;
//类的实现
public class HelloBean implements SessionBean {
static final boolean verbose = true;
private SessionContext ctx;
// Implement the methods in the SessionBean
// interface
public void ejbActivate() {
if (verbose)
System.out.println("ejbActivate called");
}
public void ejbRemove() {
if (verbose)
System.out.println("ejbRemove called");
}
public void ejbPassivate() {
if (verbose)
System.out.println("ejbPassivate called");
}
//Sets the session context.
public void setSessionContext(SessionContext ctx) {
if (verbose)
System.out.println("setSessionContext called");
this.ctx = ctx;
}
/**
* This method corresponds to the create method in
* the home interface HelloHome.java.
* The parameter sets of the two methods are
* identical. When the client calls
* HelloHome.create(), the container allocates an
* instance of the EJBean and calls ejbCreate().
*/
public void ejbCreate () {
if (verbose)
System.out.println("ejbCreate called");
}
//以下业务逻辑的实现
public String getStr()
throws RemoteException
{
return("...My First EJB Test??Lenper_xie...!");
}
}
#p#副标题#e#
④会话Bean的代码完成后,编写客户端,代码如下:
package ejb.hello;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Hashtable;
import javax.ejb.*;
import java.rmi.RemoteException;
/**
*用weblogic
*/
public class HelloClient{
public static void main(String args[]){
String url = "t3://localhost:7001";
Context initCtx = null;
HelloHome hellohome = null;
try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, url);
initCtx = new InitialContext(env);
}catch(Exception e){
System.out.println("Cannot get initial context: " + e.getMessage());
System.exit(1);
}
try{
hellohome = (HelloHome)initCtx.lookup("HelloHome");
Hello hello = hellohome.create();
String s = hello.getStr();
System.out.println(s);
}catch(Exception e){
System.out.println(e.getMessage());
System.exit(1);
}
}
}
2、将代码举办编译
先在c:\ejbhello目次下建一个目次build,然后执行编译呼吁如下:
javac ?Cd build *.java //-d build 暗示编译后的class放到build目次下
编译完之后会在build成立包的文件夹。
3、建设ejb-jar.xml陈设描写文件
ejb-jar.xml文件是EJB的陈设描写文件,包括EJB的各类设置信息,如是有状态Bean(Stateful Bean) 照旧无状态Bean(Stateless Bean),生意业务范例等。以下是HelloBean的设置文件:
<?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>
<description>Sidney.Xie EJB Test example</description>
<display-name>>Sidney.Xie EJBTest</display-name>
<small-icon></small-icon>
<large-icon></large-icon>
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<home>ejb.hello.HelloHome</home>
<remote>ejb.hello.Hello</remote>
<ejb-class>ejb.hello.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Hello</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
4、建设weblogic-ejb-jar.xml文件
此文件合用于weblogic陈设是用的
#p#分页标题#e#
<?xml version="1.0" encoding="UTF-8"?>
<!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>Hello</ejb-name>
<jndi-name>HelloHome</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
5、建设jar文件用于陈设随处事器上
在建设jar文件之前要将文件的目次设定好,首先在ejbhello\build 成立一子目次META-INF,将weblogic-ejb-jar.xml文件和ejb-jar.xml要放到该目次下,然后建造jar文件.呼吁如下:
jar cvf Hello2.jar META-INF ejb //将META-INF和包ejb中的文件打包
6、建设能陈设到weblogic上的jar文件
由于差异的厂商的应用处事器有差异的机制,所以要别离建造个处事器所识此外jar文件,试验中使weblogic,利用以下呼吁:
java weblogic.ejbc -complier javac build\Hello2.jar build\Hello.jar
7、陈设EJB到weblogic
首先要启动weblogic处事,然后在欣赏器中输入http://localhost:7001/console,打开网页后输入帐号和暗码进入weblogic的节制台,在节制台中可以陈设EJB,画面如下:
进入陈设页面后按照提示将Hello.jar文件陈设随处事器上去,会有显示陈设乐成。
8、测试功效
在呼吁行执行client端措施来测试,进入目次build下,执行呼吁java ejb.hello.HelloClient