EJB开发第一个无状态会话bean、开发EJB客户端

article/2025/9/30 0:48:46

开发第一个无状态会话bean

EJB中的三中bean

会话BeanSession Bean

负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作。

 

实体BeanEntity Bean

它实际上属于java持久化规范(JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在HibernateTopLinkORM框架各自为营的局面。

 

消息驱动BeanMessageDriven Bean

         它是专门用于异步处理Java消息的组件。具有处理大量并发消息的能力。

 

会话bean

         无状态会话bean

平常我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高。正因为一个bean实例被多个用户使用,那么前一个用户设置的值可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的。

 

         有状态会话bean

有状态会话bean平常使用的并不多,因为它的一个bean实例只供一个用户使用,所以性能开销比较大,正因为它的实例只被一个用户使用,那么用户设置的值是不会被其他用户所修改的,所以可以正确保存用户设置的值,因此是有状态的。

 

开发一个无状态会话bean

         开发工具:MyEclipse

         开发EJB依赖的jar文件:Jboss安装路径下的client下,通常把所以的jar添加到项目。

结构:

         接口(可以是远程接口或本地接口)

         实现类

 

步骤:

1.新建一个JavaProject:HelloWorld

2.导入所有的client的jar包

 

 

3.新建一个接口HelloWorld 在cn.hqu.ejb3下

添加方法 String sayHello(String name);

 

4.创建实现类:

新建一个类HelloWorldBean,实现HelloWorld接口,在包 cn.hqu.ejb3.impl;

实现方法里面:

return name+"说:你好!";

5.把这两个类变成ejb3

HelloWorldBean加入注解 @Stateless

指定这个ejb是一个无状态会话bean;

 

指定这个接口是一个远程接口:(默认是本地接口)

在HelloWorldBean加入注解@Remote(HelloWorld.class) 。

Ejb开发完成

@Stateless

@Remote(HelloWorld.class)

public class HelloWorldBean implements HelloWorld {

    @Override

    public String sayHello(String name) {

        // TODO Auto-generated method stub

        return name+"说:你好!";

    }

}

 

6.进行发布:

打成jar包,可以通过eclipse打包或者通过ant打包。

这里使用MyEclipse,右击项目选择Export→jar file 。

 

发布:先启动JBoss,复制打包好的jar拷贝到JBoss的server/default/deploy下,这样就完成ejb的部署;这样就发布成功了;会话bean开发完了

 

开发EJB的客户端

Ejb在软件分层结构上,属于业务层,通常要被客户端调用,这里用Java类做ejb客户端。

新建类EJBClient 在包cn.hqu.test,在main里面编写EJB的调用代码:

 

package cn.hqu.test;import java.util.Properties;import javax.naming.InitialContext;
import javax.naming.NamingException;import cn.hqu.ejb3.HelloWorld;public class EJBClient {/*** @param args*/public static void main(String[] args) {Properties pros = new Properties();pros.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");pros.setProperty("java.naming.provider.url", "localhost:1099");try {InitialContext ctx = new InitialContext(pros);HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");System.out.println(helloworld.sayHello("苏志达"));} catch (NamingException e) {e.printStackTrace();}}}

执行客户端(main方法);调用成功;

 

代码含义:客户端要调用ejb,要通过JNDI去寻找EJB的xx代理对象,JNDI是一套用来访问命名服务器的API,也是JavaEE里面的规范。

 

设置JNDI访问环境信息

如同数据库一样,根据访问命名服务器不同,为上下文设置的驱动类和URL也是不同的,如下面是访问Sun应用服务器的上下文信息:


如果客户端运行在应用服务器内,我们不需要为InitlalContext设置应用服务器的上下文信息,也不建议设置。因为应用服务器启动时会把JNDI驱动类等上下文信息添加进系统属性,创建InitialContext对象时如果没有指定Properties参数,InitialContext内部会调用System.getProperty()方法从系统属性里获得必要的上下文信息。对本例子而言,可以省略传入的props参数,在实际应用中如果给InitialContext设置了参数,反而会带来不可移植的问题。

         注:创建InitialContext对象时如果没有指定Properties参数,InitialContext还会在classpath下寻找jndi.properties文件,并从该文件中加载应用服务器的上下文信息,这样避免了硬编码为InitialContext设置Properties参数。

InitialContext ctx = newInitialContext();

jndi.properties的配置如下:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.provider.url=localhost\:1099

 

提示:这里编写的客户端程序完全可以部署在另外一台计算机上,只需要修改其中的连接服务器IP地址和启动Jboss时绑定相应IP地址即可。这正是EJB的远程调用特性。在第19行返回的helloworld实例对象并不是我们在服务器编写的HelloWorldBean,而是一个也实现了HelloWorld接口的代理对象,这个代理对象最终远程调用我们自己编写的HelloWorldBean,在19后加入如下代码,即可看到这个代理对象的类名:

System.out.println(helloworld.getClass().getName())

 

       Jboss默认生成的JNDI名称

         当EJB发布到Jboss时,如果我们没有为它指定全局JNDI名称或者修改过其默认EJB名称,Jboss就会按照默认的命名规则为EJB生成全局JNDI名称,默认是命名规则如下:

         本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local

         远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

        

         EAR-FILE-BASE-NAME为ear文件的名称,EJB-CLASS-NAME为EJB的非限定类名。

例:把HelloWorld应用作为EJB模块打包进名为HelloWorld.ear的企业应用文件,它的远程接口的JNDI名称是:HelloWorld/HelloWorldBean/remote

 

         如果把EJB应用打包成后缀为*.jar的模块文件,默认全局JNDI名称是

         本地接口:EJB-CLASS-NAME/local

         远程接口:EJB-CLASS-NAME/remote

例:把HelloWorld应用打包成HelloWorld.jar文件,它的远程接口的JNDI名称是:

HelloWorldBean/remote

代码:http://pan.baidu.com/s/1dDckCXN


http://chatgpt.dhexx.cn/article/T2xNJXYq.shtml

相关文章

【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)

之前一直用的EJB开发环境是他们搭建好的,直接拿来用,不过还是感觉老吃别人嚼好的不太好吃,所以自己动手来玩一玩。 EJB开发依赖的最基本的环境:JDK、Eclipse、JBoss,这里简单介绍一下最基本的环境的搭建。 JDK、Eclip…

EJB开发web service

服务端的开发 用EJB就行服务端开发是非常简单的,EJB可以把无状态会话bean通过WebService注解瞬间暴露为web服务。 例子 Stateless Remote(JsunSer.class) WebService public class JsunSerImpl implements JsunSer{ WebMethod public String run() { return &…

ejb2.0详细开发过程

Ejb2.0 开发流程 一、开发环境准备 ①开发工具:myeclipse2013(里面集成了EJB2.0的开发工具) ②jdk:jdk142_08 二、Ejb服务器端的开发 1.1 建立工程 ①EJB Project单击 ②输入工程名称: ejbserver 选择Ejb版本2.0…

wildfly ejb开发环境搭建(一):wildfly安装及数据源配置

本文是作者搭建ejb开发环境的记录,仅供参考 一、软件下载及环境准备 环境:wildfly-11.0.0.Finalj2ee7ejb3.2idea2019.1maven3jdk1.8(32位),数据库oracle10g,驱动:ojdbc6.jar,操作系统:win7 64位 wildfly…

EJB开发环境配置

前段时间学了点EJB,为了不至于忘了,写一下基本的开发环境配置是必要的,不然每次重装后配置开发环境都是一个痛苦的过程。 EJB用NetBean开发挺方便的,目前我也是在NetBean下学习EJB的,所以本篇就用NetBean作为开发工具…

EJB - 环境设置

一、 本博客将根据tutorialspoint文档的指导进行EJB环境的设置。 二、 系统需求 EJB是Java的一个框架,所以第一个要求是在您的机器上安装一个Java开发工具包(JDK)。 JDK1.5 or above.Memoryno minimum requirement.Disk Spaceno minimum r…

EJB 开发环境与入门实例

文章目录 1.环境准备2.WildFly介绍下载配置与启动 3. EJB 服务创建4.客户端调用 1.环境准备 OS: Windows 8, 64 Bit JDK: 1.8 Eclipse: Photon Release (4.8.0) WildFly: 14.0.1.Final 2.WildFly 介绍 WildFly 是JBoss AS的新的项目的名称。 JBoss分为AS 和 EAP两个版本&am…

EJB开发第一期---EJB开发配置

一、EJB 3.0简介 1.1 什么是EJB Enterprise JavaBeans是一个用于分布式业务应用的标准服务端组件模型。采用Enterprise JavaBeans架构编写的应用是可伸缩的、事务性的、多用户安全的。采用ejb编写的这些应用,可以部署在任何支持Enterprise JavaBeans规范的服务器平台…

如何开发EJB?

EJB开发分为两部分:开发EJB和使用EJB 本文示例将使用EJB2.0 :1.工作需要;2.EJB3.0相对于2.0变动不大(添加注解,JPA替换实体Bean实现) 开发EJB的流程 以开发stateless SessionBean为栗. 1.编写SessionBean。需要实现SessionBean接…

数据库笔试题及答案

以下为某公司的数据库笔试题及个人整理的答案,小伙伴们有更好的答案欢迎指教! 数据表 Student(S#,Sname) 10000条记录Cource(C#,Cname,T#) 9条记录SC(S#,C#,Score) 89991条记录Teacher(T#,Tname) 3条记录 题目并没有指定表中有多少数据&am…

MySQL数据库期末考试试题及参考答案(09)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、 填空题 MySQL提供的____命令可以将数据库导出成SQL脚本,以实现数据的备份。mysqldump命令备份多个数据库时,数据库名称之间用____隔开。MySQL中…

数据库题库(一)

第一章 绪论(上) (1) (2)只要有大量数据就可以称之为数据库() (3)数据库管理系统DBMS有多种,比如PostgreSQL、Oracle等(√&#xf…

MySQL数据库期末考试试题及参考答案(07)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、 填空题 如果不想提交当前事务,可以使用_____语句回滚事务。每个事务都是完整不可分割的最小单元是事务的_____性。MySQL中,显式开启事务的语句…

数据库面试题(答案)

1、MySQL主键和唯一索引的区别? 1、主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 2、主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 3、唯一性索引列允许空值,而主键列不允许为空值…

MySQL数据库期末考试试题及参考答案(06)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、 填空题 普通索引使用KEY或____定义。在MySQL中,DROP VIEW语句用于____。MySQL中常见的索引大致分为普通索引、 ____ 、 ____ 、全文索引、空间索引。只有在…

数据库习题

习题一 数据库系统绪论 一、数据独立性包括数据的 物理独立性 和 逻辑独立性。 二、数据模型的组成三要素是数据结构 、 数据操作、 完整性约束条件。 三、两个实体型之间的联系分为三类,分别是 一对一关系、 一对多关系和 多对多关系 两个以上的实体型之间以及单…

MySQL数据库期末考试试题及参考答案(04)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、填空题 MySQL中提供了____关键字,可以在查询时去除重复的值。使用ORDER BY对查询结果进行排序时,默认是按____排列。SELECT语句中,用…

MySQL数据库题库

一、选择题 第1章 数据库系统概述 1.DBS是( A )的简写。 A.数据库系统 B.数据库管理系统  C.数据库 D.操作系统 2.DBMS是( B )的简写 A.数据库系统 B.数据库管理系统  C.数据库 D.数据 3.DB、DBMS和DBS之间的关系是 (…

MySQL数据库期末考试试题及参考答案(03)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、填空题 插入数据时,如果不指定____,必须为每个字段添加数据。MySQL中使用____语句来更新表中的记录。MySQL提供____语句用于删除表中的数据。在…

【数据库】数据库选择题练习及详解

练习1 1.允许取空值但不允许出现重复值的约束是______ A、NULL B、PRIMARY KEY C、UNIQUE D、FOREIGN KEY 解:NULL指当前值为空,不做其他约束,PRIMARY KEY为码约束,码必须唯一且不能为空,UNIQUE指的是当前值唯一&…