论坛首页 Java企业应用论坛

JBOSS SEAM 起步(翻译一)

浏览 8033 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-01  
在此分享下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

<components xmlns="http://jboss.com/products/seam/components"></components>
<core:init jndi-pattern="@jndiPattern@">
</core:init>



很多人做过项目的话都知道,
在开发的过程中会有很多的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
<web-app version="2.5"></web-app><session-config></session-config><session-timeout></session-timeout>
<web-app version="2.5"></web-app><servlet-mapping></servlet-mapping><session-config></session-config><session-timeout></session-timeout>


The JSF configration: faces-config.xml

<faces-config version="1.2"></faces-config><faces-config version="1.2"></faces-config>


The EJB deployment descriptor: ejb-jar.xml
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"></ejb-jar><assembly-descriptor></assembly-descriptor><ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"></ejb-jar>



The EJB persistence deployment descriptor: persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"></persistence> <persistence-unit name="userDatabase"></persistence-unit> <jta-data-source></jta-data-source>

<persistence xmlns="http://java.sun.com/xml/ns/persistence"></persistence>
<persistence-unit name="userDatabase"></persistence-unit> <jta-data-source></jta-data-source> <properties></properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"></property> <properties></properties> register.xhtml

<f:view><h:form><s:validateall><h:panelgrid columns="2"><h:inputtext value="#{user.username}" required="true"><h:messages><h:commandbutton value="Register" action="#{register.register}"></h:commandbutton></h:messages></h:inputtext></h:panelgrid></s:validateall></h:form></f:view>


<f:view><h:form><s:validateall><h:panelgrid columns="2"><h:inputtext value="#{user.username}" required="true"><h:inputtext value="#{user.name}" required="true"></h:inputtext><h:messages><h:commandbutton value="Register" action="#{register.register}"></h:commandbutton></h:messages></h:inputtext></h:panelgrid></s:validateall></h:form></f:view>
registered.xhtml

<f:view></f:view>


The EAR deployment descriptor: application.xml
<application xmlns="http://java.sun.com/xml/ns/javaee"></application><module></module><java></java>
<application xmlns="http://java.sun.com/xml/ns/javaee"></application><module></module>






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企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics