Java之旅EJB(2)——三种bean之会话bean

2024-05-26 07:38

本文主要是介绍Java之旅EJB(2)——三种bean之会话bean,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面我们大致讲过ejb是什么,这里不再对定义进行讲解,主要是讲解内部的组成。

 1.      Bean分类

  会话bean(session bean)

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

  实体bean(Entity bean)

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

  消息驱动bean(message-driven bean)

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

 2.      会话bean详解

  无状态的会话bean

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

  有状态的会话bean

  这个的使用频率并不是很高,因为它的一个实例只能被一个用户所使用,故而性能开销较大,正因为它的实例只被一个用户使用,那么,用户设置的值是不会被其他用户修改的,所有可以正确保存用户设置的信息。故而是有状态的,例如,淘宝时的购物车就是一个有状态的。

 小试牛刀(开发一个无状态的会话bean)

  建立接口HelloWorld

package baidu.com.ejb;public interface HelloWorld {public String sayHello(String name);
}

  建立实现类

package baidu.com.ejb.impl;import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;import baidu.com.ejb.HelloWorld;
import baidu.com.ejb.Other;@Stateless
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld {@Overridepublic String sayHello(String name) {
<span style="white-space:pre">		</span>return name + "说:你好,世界!";
<span style="white-space:pre">	</span>} catch (NamingException e) {
<span style="white-space:pre">		</span>System.out.println(e.getMessage());
<span style="white-space:pre">	</span>}}
}

  建立查找相应ejb服务的目录接口的配置文件 

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

  将建立的ejb服务进行打包处理


  我们选择jar包的形式


  之后点击下一步即可;

  建立客户端测试程序

public class EJBClient {public static void main(String[] args) {// Properties props = new Properties();// props.setProperty("java.naming.factory.initial",// "org.jnp.interfaces.NamingContextFactory");// props.setProperty("java.naming.provider.url", "localhost:1099");try {// InitialContext ctx = new InitialContext(props);// 放到一个公共的文件处,这样可以在new InitialContext自动去查找,避免这样写繁琐,也可以是的公用// 在jndi.properties文件中InitialContext ctx = new InitialContext();HelloWorld helloWorld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");System.out.println(helloWorld.sayHello("<span style="font-family: 'Microsoft YaHei';">中国</span>"));} catch (NamingException e) {System.out.println(e.getMessage());}}
}

  部署服务

  测试前先部署服务,在IDE(myeclipse)启动服务

  之后将打好的包拷贝到jboss默认配置项下面的deploy包中:


  因为jboss是热部署,拷贝的是只要jboss已经启动将会自动进行部署。

  查看部署是否成功:

  进入jboss后台:http://localhost:8080,,

 

  部署的程序一般都在jndi中:


  点击jndi进入此页:


  我们发布的程序一般在全局命名空间内:


  测试服务结果输出


  至此,一个例子讲解完毕。

 3.      小结

  实践是解决疑问最好的方式,当你学习一个新的东西或者是充满着疑问的时候,问别人不如自己亲手实践来证明或者加深理解一下,这样也会很有帮助的~

  细心的人可能会发现,发现什么呢?我的部署的包是手动拷贝过去的,那么有没有什么办法可以解决手动拷贝呢?这样也太不方便了,答案当然是肯定的,有不便的地方,肯定有好的解决方案,请期待下一篇吧~

这篇关于Java之旅EJB(2)——三种bean之会话bean的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003838

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis