a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 140|回复: 1

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

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Cabin实体已经就绪,我们需要创建一个session bean,作为和Cabin实体交互的接口。该session bean将承担业务流程和(实体)访问代理的职责,我们称其为TravelAgent EJB。   TravelAgentRemote:远程接口* b! O" R1 r4 ?) V/ b# J! n6 T" F
  创建TravelAgent EJB的第一步是定义它的远程接口。该接口规定了允许客户端调用的EJB业务方法。客户端与TravelAgent的createCaben()和findCabin()方法进行交互,以控制Cabin实体。" g5 Z' j( y: m" l. k
  package com.titan.travelagent; ) W/ l9 U2 u8 `! r
  import javax.ejb.Remote; 0 W# y& h. _" ^9 b! }7 m
  import com.titan.domain.Cabin; ( R+ \: }) K$ u( u; O9 f5 X
  @Remote
( f6 F# }' y4 [3 r. z& {; m  public interface TravelAgentRemote {
( f  I" ]$ r2 i* E) ~) y  public void createCabin(Cabin cabin); $ ~# D- m( ]; X
  public Cabin findCabin(int id);
! D5 u; h( l7 e# i5 A5 |  }
% s+ G) s* G1 F/ q# E8 J% |  TravelAgent EJB的远程接口实在没有什么特别之处。除了被标以@javax.ejb.Remote外,它看起来就像一个普通的Java接口。该注解告诉EJB容器,这一特定接口是TravelAgent EJB的远程业务接口。还要注意的是,业务方法不必再像EJB2.1那样抛出java.rmi.RemoteException了。如果想抛的话依然还可以抛,但是这并非是必须的。
/ @- S0 Y3 c  R' `  u  TravelAgentBean: Bean Class
# m- e+ m. O# \5 F% i+ a  TravelAgentBean: The Bean Class
# _+ ]" C* K' ^+ e* j  我们既已定义好针对TravelAgent EJB的远程接口,就要为该session bean实现包含业务逻辑的bean class了。TravelAgent EJB被定义为stateless bean。我们使用@javax.ejb.Stateless! b! O5 c# }$ e2 J6 r; ?* ~* U' E- h
  注解来表达此意图。尽管不是必要的,但对stateless session bean而言,实现其全部业务接口是一条不错的实践,这样,client/bean契约就能够通过Java编译器得到强化。在本例中,业务接口即 TravelAgentRemote。下面是TravelAgentBean的完整定义。
) c$ v6 z( O/ C1 s: p, ^" V: f  package com.titan.travelagent;
" r- E( o; G$ O1 i+ M* k  import javax.ejb.Stateless; , U+ z) N: B: U
  import javax.persistence.EntityManager;
4 \5 x  g9 ~* L; X7 y( \  import javax.persistence.PersistenceContext;   j$ }* ^+ N# \+ v7 U& g7 J0 A8 x
  import com.titan.domain.Cabin;
) X2 q, X" q8 S. i9 |' m( _/ v+ C' y# {7 ^4 _2 N
  @Stateless
回复

使用道具 举报

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

JAVA认证:开发SessionBean

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 07:19 , Processed in 0.271773 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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