a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 143|回复: 1

[专业语言] JAVA认证:开发SessionBean

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Cabin实体已经就绪,我们需要创建一个session bean,作为和Cabin实体交互的接口。该session bean将承担业务流程和(实体)访问代理的职责,我们称其为TravelAgent EJB。   TravelAgentRemote:远程接口
/ l) b7 v  E% r1 v" O3 O  创建TravelAgent EJB的第一步是定义它的远程接口。该接口规定了允许客户端调用的EJB业务方法。客户端与TravelAgent的createCaben()和findCabin()方法进行交互,以控制Cabin实体。
# h$ Y) [: G: b) i  package com.titan.travelagent;
5 h8 l" I. ~+ L# r* u3 D  import javax.ejb.Remote; " ]0 ?0 k& I3 v! i4 C) W" l
  import com.titan.domain.Cabin;
2 k: o# Y* a2 \3 f( S  @Remote
; C, P- ~# V8 j+ B  O& X( x  public interface TravelAgentRemote { ! X3 p+ S- T5 E/ T: e
  public void createCabin(Cabin cabin); 9 {& j0 U$ x7 y3 i
  public Cabin findCabin(int id);
# Q9 V) ~4 Q7 h$ k  }   ?, O. o4 e& \: G9 y/ g
  TravelAgent EJB的远程接口实在没有什么特别之处。除了被标以@javax.ejb.Remote外,它看起来就像一个普通的Java接口。该注解告诉EJB容器,这一特定接口是TravelAgent EJB的远程业务接口。还要注意的是,业务方法不必再像EJB2.1那样抛出java.rmi.RemoteException了。如果想抛的话依然还可以抛,但是这并非是必须的。; ^& S" R4 `. d# l: |& u6 z2 |
  TravelAgentBean: Bean Class6 c( G6 ]# z2 J+ k
  TravelAgentBean: The Bean Class
5 [# R5 O, B9 y7 B9 U: {  我们既已定义好针对TravelAgent EJB的远程接口,就要为该session bean实现包含业务逻辑的bean class了。TravelAgent EJB被定义为stateless bean。我们使用@javax.ejb.Stateless; v- M& O" H( B; S# T* O
  注解来表达此意图。尽管不是必要的,但对stateless session bean而言,实现其全部业务接口是一条不错的实践,这样,client/bean契约就能够通过Java编译器得到强化。在本例中,业务接口即 TravelAgentRemote。下面是TravelAgentBean的完整定义。6 B/ P) e- |1 }
  package com.titan.travelagent;
  B2 t7 B3 \5 Y2 g  import javax.ejb.Stateless;
' j/ c% }8 Q* h/ W( z$ H4 W  import javax.persistence.EntityManager;
' s7 x4 Z& T1 ?! J6 t. `  import javax.persistence.PersistenceContext;
% {& L- B6 T' H' J5 @  import com.titan.domain.Cabin;
3 Q1 L1 ^- B, X, I) }9 A1 J% V- U
0 x  D! D- `: a7 h8 t5 a+ J- l7 U6 V  @Stateless
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:45 | 显示全部楼层

JAVA认证:开发SessionBean

</p>1 _0 z6 L' B; a
  public class TravelAgentBean implements TravelAgentRemote{ 2 T/ x! j% E: C* d1 p+ o
  @PersistenceContext(unitName= "titan") private EntityManager manager;
2 T3 J3 h, W- e: v  public void createCabin(Cabin cabin) { , E# ~; X  v3 o
  manager.persist(cabin);
* B8 z: z& L" u& v+ c) @  }
$ M# o6 I! s/ g4 [2 d; y/ K5 z  public Cabin findCabin(int pKey) { " g: z3 I  K( T# U- {& ]/ W1 P
  return manager.find(Cabin.class, pKey);
  f5 v* o; E# w  } $ l; m  y1 f" C8 }. S/ s9 I
  } " r3 ^4 X# e7 a( D9 r' {
  在该实现中,还有若干问题需要进一步阐明。首先,TravelAgentBean类使用了@javax. persistence. PersistenceContext注解来获得对EntityManager服务的访问,以此来创建和查找Cabin实体。注解 @PersistenceContext告知EJB容器,必须用一个EntityManager实例来设置manager数据成员。EJB容器发现数据成员的类型为javax.persistence.; B; ]( I) U7 ?
  EntityManager,便知道应该将数据成员设置为一个指向EntitiyManager服务的引用,此服务指向我们在 persistence.xml文件里定义的Titan persistence unit。这一数据成员将在bean实例被创建时初始化。
3 t% |4 h& z$ ?+ ]8 P" I  接下来的两个方法与 EntityManager服务进行交互,用以在数据库中创建Cabin实体,并依据主键对其进行定位。createCabin()方法调用 EntityManager.persist(),并传入一个要进行持久化的实体实例。待该操作完成后,Cabin实例就会被纳入持久化管理机制,并被存储到数据库中。稍后我们将会看到,创建Cabin实例与创建任何其他普通Java对象一样没有什么区别。findCabin()方法将数据库中Cabin 实体的一个主键作为其参数。它调用EntityManager.find()方法,并传入Cabin bean的类型和实际的主键作为参数。Cabin bean的类型参数告知EntityManager,它在数据库中试图查找的是何种实体。随后findCabin()方法将找到的Cabin实体并返回给远程客户端。- b! k* a7 o: T. S+ z$ D  K; x' f" Q
  titan.jar: JAR文件! @! S% l' l% a
  JAR文件是一种平台独立的文件格式,用于将若干文件一并压缩、打包和发布。开发基于Zip文件格式和zlib压缩标准的 JAR(Java Archive)工具,其初衷是为了让Java applet的下载效率更高。然而作为一种打包机制,JAR文件格式是一种将组件及其他软件进行“压缩-包装”(shrink-wrap)以便发布给第三方的非常便捷的手段。在EJB部署中,JAR文件会把与bean有关的所有类和接口打成包。除了EJB定义和类以外,它还允许你将entity bean及其persistence.xml部署描述文件打入包中。9 z4 V# X+ h. t& M) R  C9 ~+ {3 v
  创建用于部署的JAR文件是很容易的。定位到dev目录,该目录恰好位于com/titan目录树之上,然后执行如下命令:& z+ y$ a0 M8 I3 j
  C:\dev> jar cf titan.jar com/titan/domain/*.class4 p( `4 b. O6 t/ w
  com/titan/travelagent/*.class - z) E$ r* ~/ z, t0 z
  META-INF/persistence.xml ' y5 m; k( Z# j$ M/ P
  选项c告知jar命令工具,新建一个JAR文件以包含后续参数中所指定的文件。该选项还告知jar工具,将生成的JAR文件输出至标准输出设备。选项f告诉jar,将标准输出重定向到一个新的文件(titan.jar),该文件由第二个参数指明。选项字母的次序和与之匹配的命令行参数很重要。你可以在Java in a Nutshell或Learning Java中(均已由O'Reilly出版)学到更多有关jar工具和java.util.zip包的知识。
# h  m1 a+ y$ ?2 r. c9 ~  jar工具在dev目录下创建了titan.jar文件。假如你对查看JAR文件的内容很感兴趣,可以使用任何标准的Zip应用程序(WinZip、PKZIP等),或者使用命令jar tvf titan.jar。图4-2展示了该Jar文件的结构。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-3 11:46 , Processed in 0.435497 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表