专栏首页Elton的技术分享博客EJB3入门(2)Stateful Session bean

EJB3入门(2)Stateful Session bean

有了上节无状态session bean的基础,这回试着做一个有状态的session bean。 有状态的session bean语法上跟无状态session bean只有一个元标记的区别,把实现类里面的@Stateless替换成@Stateful就可以了。

如果使用Stateful Sessionbean,客户端在使用同一个SessionBean对象实例时可以保存状态,也就是说,在多次引用该对象时实际上在服务端是使用的同一个Sessionbean的对象实例,而无状态sessionbean使用了不同的sessionbean对象实例,因此,是无法保存状态的。

最直接的例子就是购物车,购物车是跟着用户来的,需要保持状态,否则人家挑好的东西都不见了。

先写一个接口:

package me.prosight;

import java.util.List;
import javax.ejb.Remote;

@Remote
public interface ShoppingCartRemote {

	public void addProduct(String name);
	public List getAllProducts();
}
</pre>

再写一个实现类:
package me.prosight;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateful;

@Stateful
public class ShoppingCartBean implements ShoppingCartRemote {

	private List shoppingCart = new ArrayList();

	@Override
	public void addProduct(String name) {
		shoppingCart.add(name);

	}

	@Override
	public List getAllProducts() {
		return shoppingCart;
	}

}
</pre>

最后再写一个测试类
package me.prosight;

import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Client {

	public static void main(String[] args) throws NamingException {
		InitialContext ctx = new InitialContext();
		ShoppingCartRemote cart = (ShoppingCartRemote) ctx.lookup("ShoppingCartBean/remote");
		cart.addProduct("Apple");
		cart.addProduct("IBM");
		cart.addProduct("Dell");

		List products = cart.getAllProducts();
		for (String product : products)
		{
			System.out.println(product);
		}

	}

}
</pre>
在客户端调用时,需要将ShoppingCart接口复制到客户端,当然,@Remote可以去掉。别忘了引用JBoss安装目录中的client目录中的jar文件。客户端仍然使用了jndi.properties文件来配置相应的信息,该文件位于源代码目录下,内容如下;
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost

在执行上面的程序后,将输出如下的信息:
Apple
IBM
Dell

要注意的是,需要使用同一个sessionbean对象实例(cart)才能保存状态。如果在web应用程序中,需要将cart对象保存在Session中,这样在同一个会话中的用户就可以使用该购物车对象了。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.prosight.me/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • EJB3入门(4)实体Bean

    实体Bean就是跟数据库中某个表对应的一个类。 类的每个实例对应数据库的一行记录。如果用过hibernate的人一定很熟悉这个概念。这个就是所谓的ORM模型。J...

    EltonZheng
  • SSH的快捷方式

    这样的形式来登录远程主机,每次输入用户名和主机的ip地址很麻烦。 后来发现可以在~/.ssh/config中进行配置

    EltonZheng
  • EJB的简单介绍和使用[通俗易懂]

    大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说EJB的简单介绍和使用[通俗易懂],希望能够帮助大家进步!!!

    Java架构师必看
  • EJB3最新的EJB标准

    Spring可以部分简化EJB本地和远程调用。EJB3分消息驱动Bean、有、无状态Bean和实体Bean。分别服务于应用层和持久层。JBoss的EJB3实体...

    py3study
  • 在XCODE中替换__MyCompanyName__的名字

    在使用XCODE的时候,在注释中有一段公司版权的信息,但是始终是__MyCompanyName__,而且也没找到相应的界面去更改。后来发现,可以通过在命令行使用...

    EltonZheng
  • 关于Java持久化相关的资源汇集:Java Persistence API

    先来个BEA的网上技术交流会(Webinar):EJB3 Java Persistence API:好的、坏的和一般功能,附件是PPT资料。

    阿敏总司令
  • 经典笔试篇-EJB及Spring篇

    162、EJB 与JAVA BEAN 的区别?【基础】 答:Java Bean 是可复用的组件,对Java Bean 并没有严格的规范,理论上讲,任何一个Ja...

    cwl_java
  • Java面试之EJB & Spring

    答:Java Bean 是可复用的组件,对Java Bean 并没有严格的规范,理论上讲,任何一个Java 类都可以是一个Bean。但通常情况下,由于Java ...

    全栈程序员站长
  • 普天通信JavaEE开发岗面试题

    答:EJB中有Session Bean,Entity Bean,以及 Message Driven Bean。这两种的 Session Bean都能够将系统逻辑...

    全栈程序员站长
  • Spring Bean的作用域管理1. singleton2. prototype3. Request4. session5. global session

    JavaEdge
  • Java面试葵花宝典打印版【1】

    爱明依
  • Bean生命周期(2)---Spring源码从入门到精通(八)

    上篇文章介绍了,可以通过@Bean注解来指定bean创建和销毁方法,init-method和destory-method:

    用户9919783
  • EJB 3.0 规范的变化可以大致分成2大部分

    EJB 3.0 规范的变化可以大致分成2大部分: 1、 使用了jdk1.5中提供的 annotation 机制的编程模型。在EJB2.1中采用一些接口和部署时的...

    田春峰-JCJC错别字检测
  • Java面试葵花宝典打印版【6】

    71、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 主要相同点:Lock能完成synchronize...

    爱明依
  • 【EJB学习笔记】——有状态的会话Bean和无状态的会话Bean

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo
  • Java面试葵花宝典打印版【3】

    31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? SessionBean:Stateless Sessi...

    爱明依
  • DWR的简单使用

    3 标签是dwr中重要的标签,用来描述 java(服务器端) 与 javascript (客户端)的交互方式。 其中,creator和javascript...

    qubianzhong
  • 系统监控工具JavaMelody使用案例

    官方简介: JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session...

    小柒2012
  • 第2章:spring 依赖第2章:spring 依赖

    另外在声明具体的值上,我们可以是 Straight values(primitives, Strings),也可以使idref元素,或者是对其他bean的指向,...

    zhuanxu

扫码关注腾讯云开发者

领取腾讯云代金券