用JDK+记事本来完成一个无状态SessionBean
来源:互联网 发布:数据库系统原理第四版 编辑:程序博客网 时间:2024/05/15 23:51
搭好环境是第一步在这里就一笔带过,之后把j2ee.jar这个文件随便找一个目录放下,在这里我放的是C:/lib目录。对EJB稍微熟悉点的人应该知 道无状态SessionBean应该实现一个Remote接口、一个Home接口和一个最终的实体类。前两个接口都是需要暴露给客户端进行调用的,真正具 体的逻辑是封装在实体类当中。我们就从这两个接口开始。
我们先实现Romte接口,我们先建立一个工程目录在这里假设是TestEJB,再按照包层次结构把相应的目录建好,之后新建一个文本文件命名为Count.java ,在其中写入一个抽象方法。
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Count extends EJBObject {
public abstract int count(int a, int b) throws RemoteException;
}
可以看到count(int a, int b)其实是个抽象方法,这个方法的具体实现在是在继承了SessionBean的那个实体类中。客户端通过接口调用容器中的具体实现,因为是远程的RMI 调用,所以可能会抛出RemoteException这个异常。完成了Romte接口之后来完成Home接口。新建文本文件并命名为 CountHome.java。
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import java.rmi.RemoteException;
public interface CountHome extends EJBHome {
public abstract Count create() throws RemoteException, CreateException;
}
在客户端中,客户通过JNDI得到的就是这个接口。然后通过Home接口的create()方法在容器里产生一个实例之后用户再通过刚刚实现的那个Remote接口来调用容器中的SessionBean。因为也是远程调用所以程序也可能会抛出RemoteException这个异常,如果创建不出实例则会抛出CreateException这个异常。两个客户端接口都实现了。接下来就是实现最重要的SessionBean这个实体类了,文类名为CountBean.java。
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class CountBean implements SessionBean {
public void ejbCreate(){
}
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 int count(int a, int b){
return a+b;
}
}
这个CountBean 的实体类实现了SessionBean这个接口,ejbCreate()这个方法可以看成是这个SessionBean的构造函数,在这个SessionBean被产生实例的时候就会执行这个方法。而最后的count(int a, int b)这个方法就是Remote接口方法的具体实现了。下来我们来写配置文件在与com文件夹平级的目录建一个META-INF文件夹,新建文本文件保存为ejb-jar.xml。
<!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>
<enterprise-beans>
<session>
<display-name>My Count Stateless SessionBean</display-name>
<ejb-name>mycount</ejb-name>
<home>com.chnic.CountHome</home>
<remote>com.chnic.Count</remote>
<ejb-class>com.chnic.CountBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
从节点的名字上不难发现一些配置的含义,这个ejb的名字是mycount。下面三个描述了Home、Remote、和实体Class的实现类。 session-type描述的是这个Bean是有状态Bean还是无状态SessionBean。至于两种Bean的区别在这里就不啰唆了,以后有空解 释吧。transaction-type则描述的是transaction的管理类型,有Container和Bean两种方式。搞定了ejb-jar.xml这个xml之后我们来写另外的一个xml命名为weblogic-ejb-jar.xml
<!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>
mycount
</ejb-name>
<jndi-name>count</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
这个文件就不多解释,从节点名字上就能看的很清楚,一个是ejb的名字一个是jndi的路径。其实这里还有很多可选的配置选项,但因为这篇博文的重点的是如何实现一个EJB。所以这些深入的话题以后再介绍。
OK,所有代码编写工作都已经完成,下面就是打包发布了。CMD打开控制台进入包含.java文件的那个目录,输入命令
c:/lib就是存放j2ee.jar这个文件的目录,因为我们刚刚编写的一些API是属于这个jar包的,所以要把这个jar包放在classpath 下。至于-extdirs的含义可以去看一下虚拟机类加载原理的相关信息。编译完成我们把.java文件剪切到别处因为接下来打jar包不需要这些文件。 cmd控制台进入工程目录(TestEJB)输入命令
这时在工程目录就会生成Count.jar这个文件。我们不用理会,接着在控制台输入命令
因为我的weblogic安装在C盘根目录,具体路径根据实际情况而定。编译完之后就可以发现原来的Count,jar文件变胖了,用winrar打开之后发现增加了不少新的文件。做到这一步就可以说一个EJB已经被完成了,接下来就是发布。weblogic发布很简单进入后台页面upload这个jar文件接下来一路下一步就是。
发布成功就开始测试我们这个bean,新建一个Test.java测试文件。
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
public class Test {
public static void main(String[] args){
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001/");
try {
Context ctx = new InitialContext(ht);
Object o = ctx.lookup("count");
CountHome home = (CountHome)PortableRemoteObject.narrow(o, CountHome.class);
Count ac = home.create();
System.out.println(ac.count(2, 2));
}catch(Exception e) {
e.printStackTrace();
}
}
}
编译之后,控制台进入相应目录输入执行命令
执行之后发现控制台返回一个4,说明测试成功。就此我们完成了全部工作。
- 用JDK+记事本来完成一个无状态SessionBean
- 有状态sessionbean 无状态sessionbean
- 有状态sessionbean 无状态sessionbean
- 【EJB二】有状态SessionBean和无状态SessionBean
- Ejb-有状态&无状态SessionBean
- EJB - 无状态SessionBean简单示例
- 用jb7+weblogic6.1实现 客户端+无状态sessionbean+实体bean的调用
- jboss3.2.3下无状态sessionBean的成功例子
- EJB学习笔记三(有状态和无状态SessionBean的区别)
- Weblogic 连接池 + Oracle + Servlet" 的无状态SessionBean 全攻略
- eclipse + JBoss 5 + EJB3开发指南(1):编写第一个无状态的SessionBean
- eclipse + JBoss 5 + EJB3开发指南(1):编写无状态的SessionBean
- 本地接口与远程接口的无状态SessionBean的实现
- 生命本来就是一个奇迹
- hdoj 1501 (import,本来以为这是个搜索题,后来发现是一个dp,而且第一次还没有设置状态)
- 本来
- 在新疆一个月网站完成时无数据快照
- 记事
- 推荐一篇TestFrame自动化测试的经典文章:Test Automation Frameworks
- 在Tomcat5.0.28 和5.5.15 配置JNDI数据源
- 深入探讨Spring与Struts的集成方案(转)
- Eclipse3.1使用tk.eclipse.plugin.struts的问题
- 辞职的艰难历程
- 用JDK+记事本来完成一个无状态SessionBean
- 关于聚会
- 视频软件功能需求
- 客服中心的笑话
- sql-server排序规则浅谈
- VC中调用外部程序
- MP3/MP4产业的魅族模式和纽曼模式
- 获得本地主机名和IP地址
- 人生的旅途【视频链接】