论坛首页 Java版 JBoss

JBOSS SEAM 起步(翻译一)

浏览 3492 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-09-04
在此分享下JBOSS SEAM的东西,翻译中肯定有不对和不足的地方,希望大家提出
或者点出错误的地方!

 这里讲下JBOSS SEAM官方文档的起步,让大家对JBoss Seam有个大体的认识。
大家认真的看完一定能有收获的,很多的配置文件可以在IDE中自动完成,
我附上这么多文件只是为了更好的说明JBOSS SEAM。










          User.java


@Entity                                                                                                                         (1)
@Name("user")                                                                                                           (2)
@Scope(SESSION)                                                                                                   (3)
@Table(name="users")                                                                                              (4)
public class User implements Serializable
{
private static final long serialVersionUID = 1881413500711441951L;
private String username;                                                                                             (5)
private String password;
private String name;
public User(String name, String password, String username)
{
this.name = name;
this.password = password;
this.username = username;
}
public User() {}                                                                                                             (6)
@NotNull @Length(min=5, max=15)                                                                         (7)
public String getPassword(){
return password;
}
public void setPassword(String password)
{
this.password = password;
}
@NotNull
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Id @NotNull @Length(min=5, max=15)                                                                 (8)
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
}

大家注意看代码后面括号中的数字和下面的对应
(1)
@Entity 是EJB3.0中用来声明实体bean的注释,

           学过EJB3.0的很容易就能看出来。

(2)
@Name("user")  这个便是JBOSS SEAM中两个核心概念中的一个
(JBOSS SEAM 两个核心概念context和component)component,
即你在此处注释实体bean在JBOSS SEAM上下文中name,
以后可以通过这个name在JBOSS SEAM上下文中找到此entity bean,
这里要说明的是name这个注释的名字必须唯一,
还有在EJB3.0中entity bean得到简化,
所以JSF中可以直接通过这个name的名字来访问entity bean。
在JSF中可以通过组件的属性value=#{user.name} 
or 
value=#{user.password} 来关联这个entity bean。

(3)因为上面已经把entity bean用
@Name("user")
绑定到了JBOSS SEAM的上下文中,
@Scope(SESSION)  这个注释就表示
这个entity bean是个session 范围的
component。

(4)
@Table(name="users")   这个注释是EJB3.0中映射到数据库的注释
,即映射到数据库名为
users的数据表格。

(5)name, password , username即entity bean  User的属性。

(6)
public User() {}    这个就不多说 了,学JAVA的都知道,
不过这里要说的是
public User() {} 
不管在entity bean或者jboss seam都是必须的。

(7)@NotNull @Length(min=5, max=15)
这里是hibernate的验证框架的部分,
因为jboss seam整合了hibernate让你使用他的数据验证机制
(即使你不使用hibernate来持久化数据)。

(8)@Id这里是EJB3.0的主键注释,
即表示这个entity bean的属性对应数据库中的主键。


The stateless session bean class: RegisterAction.java

@Stateless                                                                                                                           (1)
@Name("register")
public class RegisterAction implements Register
{
@In                                                                                                                                         (2)
private User user;
@PersistenceContext                                                                                                          (3)
private EntityManager em;
@Logger                                                                                                                                (4)
private Log log;
public String register()                                                                                                          (5)
{
List existing = em.createQuery(
"select username from User where username=#{user.username}")                                (6)
.getResultList();
if (existing.size()==0)
{
em.persist(user);
log.info("Registered new user #{user.username}");                                                           (7)
return "/registered.xhtml";                                                                                                      (8)
}
else
{
FacesMessages.instance().add("User #{user.username} already exists");                   (9)
return null;
}
}
}


现在来说下EJB3.0中的
stateless session bean  RegisterAction.java
(1)
@Stateless
这个注释说明
RegisterAction.java为stateless session bean 这个就不多说。

(2)
@In,
通过JBOSS SEAM注入
标记这个bean的属性,
事实上通过一个名为user的上下文变量来注入这个属性的



(3)
@PersistenceContext  
这个是EJB3.0中关于
EntityManager的注释,
可以去查看EJB3.0相关书籍,也可以通过上面的代码理解它的意思。


(4)
@Logger    这个是表示日志实体的注释。


(5)
public String register()   
这个方法就是JSF的事件方法 了
即JSF的动作组件通过Action属性与之关联在后面的页面中能看到。

(6)"select username from User where username=#{user.username}")
呵呵,看到这个大家应该有点触动才对,
在一个JPA查询语句中使用JSF的EL表达式,
难道不值得感叹下吗?!相当于JPA 的setParameter()。

(7)
log.info("Registered new user #{user.username}");
还有这个地方也是使用JSF的EL表达式,
估计大家能想到JBOSS SEAM强大之处了吧,
强a,我当时看的时候也佩服!

(8)
return "/registered.xhtml";
这个就不用说了,是JSF里导航的String.

(9)FacesMessages.instance().add("User #{user.username} already exists");
这里要说明一个JBOSS SEAM 中的component即built-in ,
用来解决共同的问题。
在这里你可以很容易的通过FacesMessages component来显示成功或错误消息。
对与Built-in Seam components可以通过注入获得也可以通过instance()调用。


The session bean local interface: Register.java


@Local
public interface Register
{
public String register();
}


这个看下EJB3.0的书吧,很容易明白。



JBOSS SEAM的部署描述文件components.xml







很多人做过项目的话都知道,
在开发的过程中会有很多的component classes配置在各种不同的XML文件中
,这样的话XML中的配置越来越多,而且日后可能很难管理。
不过对于JBOSS SEAM你可以松口气了,
因为上面的这些在JBOSS SEAM中不是必须的,
虽然JBOSS SEAM也会需要数量很少的XML,
但不会使你感觉到臃肿。
对与JBOSS SEAM的XML文件,他只是为了提供一些额外的components配置,
components.xml被放在WEB-INF目录下。
这个XML能告诉JBOSS SEAM怎么样在JNDI中找到我们的EJB components.


The web deployment description: web.xml




The JSF configration: faces-config.xml




The EJB deployment descriptor: ejb-jar.xml




The EJB persistence deployment descriptor: persistence.xml



register.xhtml





registered.xhtml




The EAR deployment descriptor: application.xml








oK,希望大家能认真的看完,相信收获会不少的
(我怎么不知道图片怎么插入了,有人知道告诉下,下次插图片了)
弄这些代码的布局比自杀还难!!!!!!
   
最后更新时间:2007-09-01
格式也可以重新排列一下,现在看起来很乱
   
0 请登录后投票
最后更新时间:2007-09-01
弄图片就弄了半天
而且还限制图片的上传空间10M
想哭
这么点,那够啊!
   
0 请登录后投票
最后更新时间:2007-09-01
LZ可以试着重新压制成PDF的格式,供大家下载
   
0 请登录后投票
最后更新时间:2007-09-04
其实每个技术都会有优点和缺点,主要看那种更适合你去,或者那种是你在项目中所需要的
   
0 请登录后投票
最后更新时间:2007-09-08
Seam是一个很值得使用的集成框架,也许将来会成为标准(还很难讲),Spring何去何从呢?支持楼主文章,有个小小的问题,把排版好好整理一下,效果会更好,或者弄个PDF。
   
0 请登录后投票
论坛首页 Java版 JBoss

跳转论坛:
JavaEye推荐