欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webshpere下EJB2.0的helloworld

程序员文章站 2024-02-22 22:18:22
...
我以前用过EJB3.0开发过两个项目,除了它依赖于服务器容器的重量级外,我并没有看到它所谓的侵入性,所以当看到资料说EJB是侵入性的时候,会感到难以理解,因为使用EJB3的时候甚至感觉它比Spring还要好用。
但想不到2011年的今天,我竟然还能使用ejb2.0开发项目,虽则痛苦,其实也算是一种幸运吧。
至少让我体会到了遭到口诛笔伐的EJB2的侵入性,同时越是使用老的技术,才有更接近于原理之感,现贴上一个小例子,是自己写的ejb2的helloworld,只因网上并无实质资料,所以虽则简单,犹以能助后来者。

1,在ejb工程下,新建一個sessionbean:HelloBean,

package com.zjx;

/**
* Bean implementation class for Enterprise Bean: Hello
*/
public class HelloBean implements javax.ejb.SessionBean {

static final long serialVersionUID = 3206093459760846163L;

private javax.ejb.SessionContext mySessionCtx;

/**
* getSessionContext
*/
public javax.ejb.SessionContext getSessionContext() {
return mySessionCtx;
}

/**
* setSessionContext
*/
public void setSessionContext(javax.ejb.SessionContext ctx) {
mySessionCtx = ctx;
}

/**
* ejbCreate
*/
public void ejbCreate() throws javax.ejb.CreateException {
}

/**
* ejbActivate
*/
public void ejbActivate() {
}

/**
* ejbPassivate
*/
public void ejbPassivate() {
}

/**
* ejbRemove
*/
public void ejbRemove() {
}

public void sayHello() {
System.out.println("Hello World!");
}
}

2,会在client中生成一个Hello接口,在其中添加一个sayHello() 方法。
3,发布EAR文件,会自动生成多个java文件,且不必管。
4,配置文件信息:

<display-name>
testEJB</display-name>
<enterprise-beans>
<session id="Hello">
<ejb-name>Hello</ejb-name>
<home>com.zjx.HelloHome</home>
<remote>com.zjx.Hello</remote>
<ejb-class>com.zjx.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<ejb-client-jar>testEJBClient.jar</ejb-client-jar>


5,新建测试工程,类如下:

public static void main(String[] args) throws NamingException,
RemoteException {
String JNDIName = "ejb/com/zjx/HelloHome";
InitialContext initContext = new InitialContext();
Object obj = initContext.lookup(JNDIName);

HelloHome home = (HelloHome) javax.rmi.PortableRemoteObject.narrow(obj,
HelloHome.class);
try {
Hello hello = home.create();
hello.sayHello();
} catch (CreateException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}

测试成功,不过需要注意的是main方法只能测试remote,如果要测local宜用web。