Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2292353
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Java

2014-12-24 13:42:43

内容:Stateless Session Bean 和 Stateful Session Bean的区别

1. 建立一个新项目StatefulStatelessSessionBean如下:

1

 

2. 建立StatefulSessionEJB的接口

2

为这个接口编写的代码如下:

  1. package com.pnft.test;

  2. public interface StatefulSessionEJB
  3. {
  4.          public void Calculate(int anInteger);
  5.          public int getResult();

  6. }

3. 建立StatelessSessionEJB的接口

   重复2的各步骤。代码如下:

  1. package com.pnft.test;

  2. public interface StatelessSessionEJB
  3. {
  4.          public void Calculate(int anInteger);
  5.          public int getResult();

  6. }

可见23中两个接口除了接口名外,其他的内容都是一样的。

4. 实现StatefulSessionEJB接口

3

实现代码如下:

  1. package com.pnft.test;

  2. import javax.ejb.Remote;
  3. import javax.ejb.Stateful;

  4. @Stateful
  5. @Remote
  6. public class StatefulSessionEJBBean implements StatefulSessionEJB
  7. {
  8.          private int state;
  9.          public void Calculate(int anInteger)
  10.          {
  11.                    state += anInteger;
  12.          }
  13.          public int getResult()

  14.          {
  15.                    return state;
  16.          }

  17. }

5. 实现StatelessSessionEJB接口

   4。所实现的代码如下:

  1. package com.pnft.test;

  2. import javax.ejb.Remote;
  3. import javax.ejb.Stateless;

  4. @Stateless
  5. @Remote

  6. public class StatelessSessionEJBBean implements StatelessSessionEJB
  7. {
  8.          private int state;
  9.          public void Calculate(int anInteger)
  10.          {
  11.                    state += anInteger;
  12.          }
  13.          public int getResult()
  14.          {
  15.                    return state;
  16.          }
  17. }
45中除了实现类的名称、标注(@Stateful@Stateless)不同外其他代码均相同,上述步骤完成后,两个Session Bean的编码工作已经完成。

4

由上图可见,这两个Session Bean是在同一个项目中的,因此打包时,这个两个ejb会处于同一个jar包中。

 

6. 部署

5

7. 将两个ejbinterface打包,并存放在指定的目录

6


7

8. 开发StatefulSessionEJBStatelessSessionEJB的客户端

a. 如下图建立一个java项目

8

b. 为项目加入必要的jar包和库

9

点击Add External JARs按钮

10

再加入ejb3client

11

c. 新建一个javaStatefulSessionEJBClient

12

编写代码如下:

  1. package com.pnft.test;
  2. import javax.naming.InitialContext;
  3. import javax.naming.NamingException;

  4. public class StatefulSessionEJBClient
  5. {
  6.          public static void main(String[] args)
  7.          {
  8.                    try
  9.                    {
  10.                             InitialContext ctx = new InitialContext();
  11.                             //Session1

  12.                             StatefulSessionEJB sfejb1 =

  13. (StatefulSessionEJB)ctx.lookup("StatefulSessionEJBBean/remote");

  14.                             System.out.println(sfejb1.getResult());
  15.                             sfejb1.Calculate(1);

  16.                             System.out.println(sfejb1.getResult());

  17.                             sfejb1.Calculate(2);

  18.                             System.out.println(sfejb1.getResult());

  19.                             sfejb1.Calculate(3);

  20.                             System.out.println(sfejb1.getResult());

  21.                             //Session2

  22.                             StatefulSessionEJB sfejb2 =

  23. (StatefulSessionEJB)ctx.lookup("StatefulSessionEJBBean/remote");

  24.                            
  25.                             System.out.println(sfejb2.getResult());

  26.                             sfejb2.Calculate(1);

  27.                             System.out.println(sfejb2.getResult());

  28.                             sfejb2.Calculate(2);

  29.                             System.out.println(sfejb2.getResult());

  30.                             sfejb2.Calculate(3);

  31.                             System.out.println(sfejb2.getResult());

  32.                    }

  33.                    catch(NamingException ne)
  34.                    {
  35.                             ne.printStackTrace();
  36.                    }
  37.          }
  38. }

d. 新建另一个javaStatelessSessionEJBClient

   c。代码如下:

  1. package com.pnft.test;

  2. import javax.naming.InitialContext;
  3. import javax.naming.NamingException;

  4. public class StatelessSessionEJBClient

  5. {
  6.          public static void main(String[] args)
  7.          {
  8.                    try
  9.                    {
  10.                             InitialContext ctx = new InitialContext();

  11.                             //Session1

  12.                             StatelessSessionEJB sfejb1 =

  13. (StatelessSessionEJB)ctx.lookup("StatelessSessionEJBBean/remote");

  14.                             System.out.println(sfejb1.getResult());

  15.                             sfejb1.Calculate(1);

  16.                             System.out.println(sfejb1.getResult());

  17.                             sfejb1.Calculate(2);

  18.                             System.out.println(sfejb1.getResult());

  19.                             sfejb1.Calculate(3);

  20.                             System.out.println(sfejb1.getResult());

  21.                             //Session2

  22.                             StatelessSessionEJB sfejb2 =

  23. (StatelessSessionEJB)ctx.lookup("StatelessSessionEJBBean/remote");

  24.                             System.out.println(sfejb2.getResult());

  25.                             sfejb2.Calculate(1);

  26.                             System.out.println(sfejb2.getResult());

  27.                            

  28.                             sfejb2.Calculate(2);

  29.                             System.out.println(sfejb2.getResult());

  30.                             sfejb2.Calculate(3);

  31.                             System.out.println(sfejb2.getResult());

  32.                    }
  33.                    catch(NamingException ne)
  34.                    {
  35.                             ne.printStackTrace();
  36.                    }
  37.          }
  38. }
e. 给项目增加jndi.properties文件

13

f. 运行StatefulSessionEJBClient,即StatefulSessionEJBClient.java,结果如下:

14

g. 运行StatelessSessionEJBClient,即StatelessSessionEJBClient.java,结果如下:

   0

   1

   3

   6

   6

   7

   9

   12

内存不够时,上面的数据或许会不正确。

转自:http://patmusing.blog.163.com/blog/static/1358349602010017103154936/




阅读(1229) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~