废话不多讲,先介绍下开发环境:JDK 1.4 + Weblogic 8.1 + j2ee.jar(这个jar包能在很多IDE的J2EE Library Container找到)。无状态SessionBean应该是Enterprise JavaBean里使用最普遍的一种bean,今天就从这种最普遍使用的bean开始。
搭好环境是第一步在这里就一笔带过,之后把j2ee.jar这个文件随便找一个目录放下,在这里我放的是C:\lib目录。对EJB稍微熟悉点的人应该知道无状态SessionBean应该实现一个Remote接口、一个Home接口和一个最终的实体类。前两个接口都是需要暴露给客户端进行调用的,真正具体的逻辑是封装在实体类当中。我们就从这两个接口开始。
我们先实现Romte接口,我们先建立一个工程目录在这里假设是TestEJB,再按照包层次结构把相应的目录建好,之后新建一个文本文件命名为Count.java ,在其中写入一个抽象方法。
java 代码
- package
com.chnic;
-
- 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。
java 代码
- package
com.chnic;
-
- 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。
java 代码
- package
com.chnic;
-
- 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。
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
>
- <
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
。
xml 代码
- <?
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
>
- mycount
- </
ejb-name
>
- <
jndi-name
>
count
</
jndi-name
>
- </
weblogic-enterprise-bean
>
- </
weblogic-ejb-jar
>
这个文件就不多解释,从节点名字上就能看的很清楚,一个是ejb的名字一个是jndi的路径。其实这里还有很多可选的配置选项,但因为这篇博文的重点的是如何实现一个EJB。所以这些深入的话题以后再介绍。
OK,所有代码编写工作都已经完成,下面就是打包发布了。CMD打开控制台进入包含.java文件的那个目录,输入命令
- javac -extdirs c:\lib *.java
c:\lib就是存放j2ee.jar这个文件的目录,因为我们刚刚编写的一些API是属于这个jar包的,所以要把这个jar包放在classpath下。至于-extdirs的含义可以去看一下虚拟机类加载原理的相关信息。编译完成我们把.java文件剪切到别处因为接下来打jar包不需要这些文件。cmd控制台进入工程目录(TestEJB)输入命令
- jar cvf Count.jar com/chnic META-INF/ *.
class
这时在工程目录就会生成Count.jar这个文件。我们不用理会,接着在控制台输入命令
java -Djava.ext.dirs=C:\bea\weblogic81\server\lib;C:\bea\jdk142_05\lib weblogic.ejbc Count.jar
因为我的weblogic安装在C盘根目录,具体路径根据实际情况而定。编译完之后就可以发现原来的Count,jar文件变胖了,用winrar打开之后发现增加了不少新的文件。做到这一步就可以说一个EJB已经被完成了,接下来就是发布
。weblogic发布很简单进入后台页面upload这个jar文件接下来一路下一步就是。
发布成功就开始测试我们这个bean,新建一个Test.java测试文件。
java 代码
- package
com.chnic;
-
- 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();
- }
- }
- }
编译之后,控制台进入相应目录输入执行命令
- java -Djava.ext.dirs=c:\lib;C:\bea\weblogic81\server\lib Test
执行之后发现控制台返回一个4,说明测试成功。就此我们完成了全部工作。
分享到:
相关推荐
在线教学质量评价系统可以方便和全面地收集教师教学工作的数据,提供师生网上评教的评分结果,快速集中收集各方面的评教信息,使教务管理部门能够及时了解教学动态和师资情况,为教务老师提供相关决策支持,为职称评聘提供教学工作质量的科学依据,同时减轻了教务老师的工作量。
python-3.10.7-amd64.zip
自研扩散模型高光谱修复网络 基于MST_Plus_Plus 网络改造。 试验数据 扩散模型loss初步测试降到了0.005,比不加扩散loss小了20倍, 训练入口 train_cos_img.py
企业数据治理之数据安全治理方案
这是历年的毕业设计的项目,基于Android的一个红外防盗报警。需要自己添加蜂鸣器和热释电的硬件访问服务。
短视频用户价值研究报告2022
基于springboot的java毕业&课程设计
可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) java期末大作业毕业设计项目管理系统计算机软件工程大数据专业 内容概要:首先在日常的出行中,老旧城区道路狭窄,容易造成车辆的堵塞,每天早晚,接送孩子的车辆数密集,会造成相应的交通堵塞情况。而同样的,在停车的管理上,一方面我国的停车场面积较少,停车位一位难求,特别是在现在的一些小区里,为了抢停车位而产生的矛盾也日益突出。另一方面在停车场的管理上也存在着较大的管理问题,进车容易出车难是当下的停车场所出现的主要问题。而现在的停车场管理系统眼花缭乱,效果水平也良莠不齐,停车场的管理是当下各大城市的公共设施发展的一大难题,而国家、各大省市也都开 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。
基于springboot的java毕业&课程设计
微信小程序设计之相关行业源码及图文导入教程
网络游戏开发是一项很大的工程,需要很多综合性的知识。这对于刚刚入门的开发者来说很难理解。本论文从研究开发一个模仿泡泡堂网络游戏的例子出发,讲述网络游戏开发中用到的一些最基本的知识和设计思想,使大家清晰的理解游戏开发的过程。 整个设计中利用java中的swing编程,结合游戏的操作流程,对整个游戏进行精心的设计和大量的测试,实现游戏软件服务器端和客户端的开发,为玩家提供一个友好美观的操作界面,并添加聊天等功能以增加玩家之间的互动性,此外实现了可编辑场景地图的功能,使得游戏内容的更加丰富,玩家交互性更好,确保了游戏更具有趣味性、灵活性,以满足玩家对这款网络游戏的要求。
外东洪路中段.m4a
软考3333333333
附件是Elasticsearch 的全文搜索功能使用方法,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于springboot的java毕业&课程设计
CCNP TSHOOT 642-832 Official Certification Guide
MySQL8.4.0 LTS(mysql-server_8.4.0-1ubuntu22.04_amd64.deb-bundle.tar)适用于Ubuntu 22.04 Linux (x86, 64-bit)
课设毕设基于SpringBoot+Vue的某银行OA系统 LW+PPT+源码可运行.zip