Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【EJB学习笔记】——建立一个简单的EJB应用

【EJB学习笔记】——建立一个简单的EJB应用

作者头像
DannyHoo
发布于 2018-09-13 04:27:50
发布于 2018-09-13 04:27:50
66600
代码可运行
举报
文章被收录于专栏:Danny的专栏Danny的专栏
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337113

  这里创建一个简单的EJB应用,结构如下:

  EJB_DEMO项目类型为EJB Project,是需要部署到JBoss上的EJB应用。EJB_DEMO_CLIENT项目类型为普通的Java Project,是用来模仿调用EJB的远程客户端。

建立EJB项目—EJB_DEMO


  New—EJB Project

  核心代码:

  EJB接口FirstEjb.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface FirstEjb {
    public String saySomething(String name);
}

  实现类FirstEjbBean.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Stateless
@Remote
public class FirstEjbBean implements FirstEjb {
    public String saySomething(String name) {
        return "恭喜您:"+name+",您的EJB应用创建成功了!";
    }
}

  这不就是个普通的 类吗?EJB就是JavaBean,只不过它是企业级的(JavaBeanEnterprise JavaBean),EJB分为三种Bean,即会话Bean(Session Bean)、实体Bean(Entity Bean)、消息驱动Bean(Message Driven Bean),会话Bean又分为有状态的会话Bean和无状态的会话Bean,这里不再多说,后面会一一介绍。

  这个Demo中,起键作用的就是类头那两个注解:@Stateless定义这个EJB是无状态的会话Bean;@Remote定义这个EJB所实现的接口是用来被远程调用的。

  至此,服务端的EJB应用就建立好了,跟部署普通的java web项目一样,可以把它部署到JBoss上了。

建立客户端—EJB_DEMO_CLIENT


  New—Java Project

  客户端既然调用EJB,肯定需要它的接口,所以EJB_DEMO_CLIENT需要引用由FirstEjb.java所打的jar包,为了开发简便,也可以直接让EJB_DEMO_CLIENT引用EJB_DEMO项目,如果客户端不是运行在EJB容器中(如JBoss),则需要引用JBoss下的相关jar包(如果用的服务器是JBoss5或JBoss6的话,则引用JBoss安装目录下client中的jar包),此外,客户端还必须引用jnp-client.jar。

  建立客户端测试类FirstEjbClient.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FirstEjbClient {
    public static void main(String[] args) throws Exception {
        InitialContext ctx = new InitialContext();
        FirstEjb ejb = (FirstEjb)ctx.lookup("FirstEjbBean/remote");
        String s = ejb.saySomething("Danny");
        System.out.println(s);
    }
}

  InitialContext是javax.naming包下的一个类,可以看做是一个工厂或是Spring中的BeanFactory,用来实现JNDI,所以,客户端还需要一个配置文件jndi.properties,用来配置jndi的信息。

  jndi.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost

  这时,一个简单的EJB应用+EJB客户端就完成了。在JBoss启动的情况下,运行一下客户端,是不是成功调用EJB并且输出信息了呢?


【 转载请注明出处——胡玉洋《EJB——建立一个简单的EJB应用》】

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年03月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EJB学习日志
public interface HelloWord { public String sayHello(String name); }
全栈程序员站长
2022/11/11
6070
EJB3入门(2)Stateful Session bean
有了上节无状态session bean的基础,这回试着做一个有状态的session bean。 有状态的session bean语法上跟无状态session bean只有一个元标记的区别,把实现类里面的@Stateless替换成@Stateful就可以了。
EltonZheng
2021/01/26
5930
本地&远程访问一个EJB | 从开发角度看应用架构4
一、前言 本文仅代表作者的个人观点; 本文的内容仅限于技术探讨,不能作为指导生产环境的素材; 本文素材是红帽公司产品技术和手册; 本文分为系列文章,将会有多篇,初步预计将会有9篇。 二、对EJB的访问方式 EJB是一个包含在应用程序服务器上运行的业务逻辑的可移植组件。 如果客户端和EJB是同一应用程序的一部分,则客户端可以在本地访问EJB,如果EJB在远程运行,则客户端可以通过远程接口访问EJB。 如果客户端和EJB是本地的,也就是说,它们在相同的JVM进程中运行,则客户端可以调用EJB中的所有公共方法。
魏新宇
2018/06/25
1.4K0
EJB的简单介绍和使用[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说EJB的简单介绍和使用[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/09/12
4.6K0
EJB的简单介绍和使用[通俗易懂]
【EJB学习笔记】——实体Bean
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51006184
DannyHoo
2018/09/13
5950
【EJB学习笔记】——实体Bean
超经典的JBOSS入门文章
前言   本文是为想在JBOSS环境下进行EJB开发的读者而写的,在阅读本文之前,你最好对EJB有一个基本了解。   JBOSS是一个开放源码的免费EJB服务器,它实现了其它J2EE所规定的大多数功能,现在sun公司已经把JBOSS作为J2EE1.4的标准实现服务器了,本文就带领大家从Jboss3.2.6的安装开始,一直到开发出一个完整的”hello,world”的ejb为止。   JBOSS的安装与启动   如果你是第一次使用JBOSS,你一定会感到很沮丧,因为它虽然是开放源码,并可以免费下载,但是它的
张善友
2018/01/19
2.5K0
EJB3入门(4)实体Bean
实体Bean就是跟数据库中某个表对应的一个类。 类的每个实例对应数据库的一行记录。如果用过hibernate的人一定很熟悉这个概念。这个就是所谓的ORM模型。Jboss就是使用的Hibernate来实现的。
EltonZheng
2021/01/26
4650
was ejb学习[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 最近因为项目需要,对ilog进行了学习,包括ilog在was的安装以及客户端连接ilog等内容。 个人感觉很多是通过ejb来进行查找及调用的,所以,特意自己做了一个ejb在was上部署以及客户端连接的例子: [b][color=red]1、ejb方面[/color][/b] ejb采用ejb 2,分三个类:Hello、HelloHome、HelloWord; [color=cyan]Hello:[/color] public class Hello implements SessionBean { /** The session context */ private SessionContext context; public Hello() { super(); // TODO Auto-generated constructor stub } /** * Set the associated session context. The container calls this method * after the instance creation. * * The enterprise bean instance should store the reference to the context * object in an instance variable. * * This method is called with no transaction context. * * @throws EJBException Thrown if method fails due to system-level error. */ public void setSessionContext(SessionContext newContext) throws EJBException { context = newContext; } public void ejbCreate() throws EJBException, RemoteException { // TODO Auto-generated method stub System.out.println(“ejb create”); } public void ejbRemove() throws EJBException, RemoteException { // TODO Auto-generated method stub } public void ejbActivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } public void ejbPassivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } /** * An example business method * * @ejb.interface-method view-type = “remote” * * @throws EJBException Thrown if method fails due to system-level error. */ public String sayIt() throws EJBException { System.out.println(“hello didi”); return “hello didi.”; } } [color=cyan][b]HelloHome[/b][/color] public interface HelloHome extends javax.ejb.EJBHome { public com.rox.HelloWorld create() throws javax.ejb.CreateException,java.rmi.RemoteException; } [color=cyan]HelloWorld[/color] public interface HelloWorld extends EJBObject{ public String sayIt() throws RemoteException; } [color=red][b]2、发布ejb到was中[/b][/color] 注意:在ejb的jndi项,填写e
全栈程序员站长
2022/11/11
4280
EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean「建议收藏」
关掉Jboss控制台新闻Ctrl+c,在MyEclipse→Servers→Jboss可配置JBoss。
全栈程序员站长
2022/07/06
3720
EJB学习一
一、一个企业级Bean是由几个文件共同组成: 1、Bean类 SessionBean实现javax.ejb.SessionBean接口; EntityBean实现javax.ejb.EntityBean接口。
全栈程序员站长
2022/09/27
7570
【EJB学习笔记】——远程调用和本地调用
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/50973453
DannyHoo
2018/09/13
1.2K0
EJB学习笔记
Sample:Browser——Web Server——EJB Server——Database
全栈程序员站长
2022/11/11
1.2K0
需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)
一,Remote EJB 服务接口定义: 1 package yjmyzz.ejb.server.helloworld; 2 3 public interface HelloWorldService { 4 5 public String sayHello(String name); 6 7 } 实现: 1 package yjmyzz.ejb.server.helloworld; 2 3 import javax.annotation.security.RolesAllowe
菩提树下的杨过
2018/01/24
6690
【EJB学习笔记】——JMS和消息驱动Bean
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/50996458
DannyHoo
2018/09/13
6510
【EJB学习笔记】——JMS和消息驱动Bean
EJB学习心得
一:当EJB发布到JBOSS时,如果我们没有为它指定全局JNDI名称或修改其默认的EJB名称, JBOSS就会按照默认的命名规则为EJB生成全局JNDI名称。默认的命名规则如下: 如果把EJB作为模块打包进后缀*.ear的JAVA EE企业应用文件,默认的全局JNDI名称是 本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local 远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote 如果把EJB应用打包成后缀为*.jar的模块文件,默认的全局JNDI名称是 本地接口:EJB-CLASS-NAME/local 远程接口:EJB-CLASS-NAME/remote 二:通过远程接口调用EJB的过程 首先客户端需要和EJB服务器建立Socket通信,在通信管道上他们需要来回发送IIOP协议消息。 因为数据要在网络进行传输,存放数据的JAVA对象必须要序列化。 三:通过本地接口调用EJB的过程 通过本地接口调用EJB,直接在内存中进行交互,这样可以避免网络开销、协议解析的开销和对象序列化的开销。 但是大家必须要注意,只有客户端与EJB应用在同一个JVM内运行的时候,我们才能调用本地接口 。 四:如何通过使用注解方式注入并使用其他的EJB和服务 注入和使用其他EJB的方式如下: @EJB EJB的接口 EJB的变量 通过注解”@EJB”可以注入并使用其他的EJB,如果有多个EJB的类实现了同一个接口,那么在使用”@EJB”的时候 需要明确指定是注入和使用哪一个EJB的Bean。指定方式如下: @EJB(beanName=”EJB类的名称”) EJB的接口 EJB的变量 注入和使用其他服务的方式如下: @Resource 服务名称 服务变量 注意在指定数据源的使用需要配置mappedName的属性值,例如: @Resource(mappedName=”数据库的JNDI名称”) DataSource dataSource 五:JMS中的消息 消息传递系统的中心是消息,一条消息有三部分组成 头(Header),属性(property),主体(body) 消息有以下几种类型,他们都是派生自Message接口 StreamMessage:一种主体中包含JAVA基原值流的消息,如填充和读取均按顺序进行。 MapMessage:一种主体中包含一组名-值对的消息,没有定义条目顺序 TextMessage:一种主体中包含JAVA字符串的消息(例如:XML消息) ObjectMessage:一种主体中包含序列化的JAVA对象的消息 BytesMessage:一种主体中包含连续字节流的消息 消息的传递模型为以下两种: 点对点(point-to-point:PTP):该消息传递模型规定,一条消息只能传递给一个接收方,可以接受过时的消息。采用javax.jms.Queue表示。 发布/订阅(publish/subscribe):该消息传递模型规定,一条消息可以传递给多个接收方,只能接受实时的消息。采用javax.jms.Topic表示。 六:如何发送消息(以Queue为例,如果是Topic则应把所有的Queue改为Topic) 1.得到一个JNDI的初始化上下文(Context) InitialContext ctx = new InitialContext(); 2.根据上下文查找一个连接工厂QueueConnectionFactory。该连接工厂是用JMS提供的,不需要我们自己创建, 每个工厂都绑定一个全局的JNDI,我们通过全局的JNDI来获取它 QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup(“QueueConnectionFactory”); 3.通过连接工厂得到一个连接QueueConnection QueueConnection conn = factory.createQueueConnection(); 4.通过连接来建立一个会话(Session) QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE); 建立一个不需要事物的并且能启动确认消息已接受的会话 5.查找目标地址 Destination destination = (Destination)ctx.lookup(配置文件的JNDI名称); 6.根据会话和目标地址来建立消息生产者MessageProducer MessageProducer producer = session.crea
全栈程序员站长
2022/11/11
5870
weblogic EJB 学习
大家好,又见面了,我是你们的朋友全栈君。 EJB 学习笔记 1、ejb 基础知识 (1) 无状态会话bean 不保存客户机的会话状态 优点:使用小量的实例即可满足大量的客户。每个实例都没
全栈程序员站长
2022/11/19
1.3K0
eclipse + JBoss 5 +
有时客户端程序(如JSP、Servlet)会和EJB组件运行在同一个JVM上,如在同一个J2EE服务器(JBoss、Weblogic等)中运行。这时就没必要 再通过远程(remote)接口访问Session Bean了,因为客户端和session bean都在同一个jvm上,只需要通过本地接口(local)访问即可。就象直接访问本地类一样(当然,不能直接访问EJB类,需要使用jndi和local接口来获得本地接口对象。当然,也可以通过remote接口来访问ejb,不过这样会有一些性能损失。就象在同一台机器上还通过socket进行访问一样,很多性能都损耗在网络上了。下面我们来举个简单的例子来看一下如何使用本地接口来访问session bean。     先建立一个session bean本地接口,代码如下:
py3study
2020/01/14
6820
【EJB学习笔记】——有状态的会话Bean和无状态的会话Bean
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/50970565
DannyHoo
2018/09/13
1.2K0
关于 Java 中的 RMI-IIOP
在写完《Java中RMI、JNDI、LADP、JRMP、JMX、JMS那些事儿(上)》的时候,又看到一个包含RMI-IIOP的议题,在16年Blackhat JNDI注入议题中也提到了这个协议的利用,当时想着没太看到或听说有多少关于IIOP的漏洞(可能事实真的如此吧,在下面Weblogic RMI-IIOP部分或许能感受到),所以那篇文章写作过程中也没去看之前那个16年议题IIOP相关部分。网上没怎么看到有关于IIOP或RMI-IIOP的分析文章,这篇文章来感受下。
Seebug漏洞平台
2020/02/10
1.3K0
Java 中 RMI、JNDI、LADP、JRMP、JMX、JMS那些事儿(上)
之前看了SHIRO-721这个漏洞,然后这个漏洞和SHIRO-550有些关联,在SHIRO-550的利用方式中又看到了利用ysoserial中的JRMP exploit,然后又想起了RMI、JNDI、LDAP、JMX、JMS这些词。这些东西也看到了几次,也看过对应的文章,但把他们联想在一起时这些概念又好像交叉了一样容易混淆。网上的一些资料也比较零散与混乱,所以即使以前看过,没有放在一起看的话很容易混淆。下面是对RMI、JNDI、LDAP、JRMP、JMX、JMS一些资料的整理。
Seebug漏洞平台
2019/12/16
4.4K0
Java 中 RMI、JNDI、LADP、JRMP、JMX、JMS那些事儿(上)
相关推荐
EJB学习日志
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验