废话不多讲,先介绍下开发环境: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,说明测试成功。就此我们完成了全部工作。
分享到:
相关推荐
VB控制计算机并口示例(含完整可以运行源代码) 可以通过并口直接控制MCU,做SW控制不错,关键还可以学习并口硬件控制学习。含详细源代码哦
python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码),本资源中的源码都是经过本地编译过可运行的,评审分达到98分,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、毕业设计、期末大作业和课程设计使用需求,如果有需要的话可以放心下载使用。 python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代
基于Unet的树种分别识别模型
精选毕设项目-富文本解析,折线图,MD5,bluebird
《图书管理系统(基于ASP .NET)》是一款专为学习者设计的应用程序,旨在提供一个全面的图书管理平台。系统的设计采用ASP .NET技术,这是一款由微软开发的用于构建动态网站、web应用和web服务的强大工具。ASP .NET框架以其高效、安全和易于维护的特点,深受开发者的喜爱。 该系统包含了多个核心模块,这些模块覆盖了图书管理的主要功能。有图书录入模块,它允许管理员录入图书的基本信息,如书名、作者、出版社、ISBN号、分类等。图书查询模块提供给用户方便快捷的搜索功能,用户可以根据书名、作者、关键词等条件进行检索。此外,借阅与归还模块确保图书的流通管理,记录图书的借阅状态,提醒用户按时归还,并处理超期罚款等事务。 系统还具备用户管理模块,允许用户注册、登录、修改个人信息。对于权限管理,后台有专门的管理员角色,他们可以对用户进行操作,如分配权限、冻结或解冻账户。同时,系统的统计分析模块能够生成各类报表,如图书借阅量、热门书籍、用户活跃度等,这些数据对于图书馆运营决策有着重要参考价值。 在。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
精选毕设项目-查拼音
精选毕设项目-音乐在线歌词搜索
本专刊的主要目的是帮助初学者系统化和结构化地掌握会计知识。我们采用思维导图的形式,将复杂的会计概念和流程进行有效的简化,旨在让学习者能够更清晰地理解这些内容,并增强记忆效果。通过视觉化的方式,读者不仅能够感受到会计知识的关联性,还能轻松掌握关键点,提升学习效率。无论是在学习新知识还是复习旧知识时,这种方法都能够为学习者提供极大的便利和帮助。
配网两阶段鲁棒优化调度模型 关键词:两阶段鲁棒优化,CCG算法,储能 仿真算例采用33节点,采用matlab+yalmip+cplex编写,两阶段模型采用CCG算法求解。 模型中一阶段变量主要包括01变量和无功优化变量,核心变量主要存在于二阶段,因此在叠加二阶段变量优化过程中更容易得到最优解,所以有限次迭代即得到收敛的结果。 模型以网损为目标,包括功率平衡、网络潮流、电压电流、蓄电池出力以及无功设备出力等约束。 复现《两阶段鲁棒优化的主动配电网动态无功优化》-熊壮壮,具体内容可自行下载了解。
1..1行列式的定义.ppt
精选毕设项目-地图定位
MMC整流器平均值模型simulink仿真,19电平,采用交流电流内环,直流电压外环控制,双二阶广义积分器锁相环,PI解耦环流抑制器,调制方式为最近电平逼近调制,完美运行。 波形一二为直流侧电压电流,波形三四分别为主控制器及环流抑制器输出调制信号。
Spring Boot是Spring框架的一个模块,它简化了基于Spring应用程序的创建和部署过程。Spring Boot提供了快速启动Spring应用程序的能力,通过自动配置、微服务支持和独立运行的特性,使得开发者能够专注于业务逻辑,而不是配置细节。Spring Boot的核心思想是约定优于配置,它通过自动配置机制,根据项目中添加的依赖自动配置Spring应用。这大大减少了配置文件的编写,提高了开发效率。Spring Boot还支持嵌入式服务器,如Tomcat、Jetty和Undertow,使得开发者无需部署WAR文件到外部服务器即可运行Spring应用。 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现为Oracle公司的一部分)在1995年首次发布。Java以其“编写一次,到处运行”(WORA)的特性而闻名,这一特性得益于Java虚拟机(JVM)的使用,它允许Java程序在任何安装了相应JVM的平台上运行,而无需重新编译。Java语言设计之初就是为了跨平台,同时具备面向对象、并发、安全和健壮性等特点。 Java语言广泛应用于企业级应用、移动应用、桌面应用、游戏开发、云计算和物联网等领域。它的语法结构清晰,易于学习和使用,同时提供了丰富的API库,支持多种编程范式,包括面向对象、命令式、函数式和并发编程。Java的强类型系统和自动内存管理减少了程序错误和内存泄漏的风险。随着Java的不断更新和发展,它已经成为一个成熟的生态系统,拥有庞大的开发者社区和持续的技术创新。Java 8引入了Lambda表达式,进一步简化了并发编程和函数式编程的实现。Java 9及以后的版本继续在模块化、性能和安全性方面进行改进,确保Java语言能够适应不断变化的技术需求和市场趋势。 MySQL是一个关系型数据库管理系统(RDBMS),它基于结构化查询语言(SQL)来管理和存储数据。MySQL由瑞典MySQL AB公司开发,并于2008年被Sun Microsystems收购,随后在2010年,Oracle公司收购了Sun Microsystems,从而获得了MySQL的所有权。MySQL以其高性能、可靠性和易用性而闻名,它提供了多种特性来满足不同规模应用程序的需求。作为一个开源解决方案,MySQL拥有一个活跃的社区,不断为其发展和改进做出贡献。它的多线程功能允许同时处理多个查询,而其优化器则可以高效地执行复杂的查询操作。 随着互联网和Web应用的快速发展,MySQL已成为许多开发者和公司的首选数据库之一。它的可扩展性和灵活性使其能够处理从小规模应用到大规模企业级应用的各种需求。通过各种存储引擎,MySQL能够适应不同的数据存储和检索需求,从而为用户提供了高度的定制性和性能优化的可能性。
这是一种全屏轮播风格的特效,使用HTML、CSS和Javript编写。轮播图包含多张图片和对应的文本介绍,通过自动滑动和手动切换两种方式,展示出不同的内容。该轮播图在网页头部或者特定板块上使用,能够为用户提供直观的视觉体验和丰富的内容呈现。而且,该轮播图可以灵活地设置大小、位置、动画等属性,便于根据实际需求进行个性化定制。
精选毕设项目-图片预览带后端
精选毕设项目-番茄时钟
精选毕设项目-简单的商城小应用
精选毕设项目-仿zcool站酷
精选毕设项目-录音机
南京理工大学毕业论文overleaf LaTex模板,按照我个人的写作需求修改后的版本