浏览 8033 次
锁定老帖子 主题:JBOSS SEAM 起步(翻译一)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-01
或者点出错误的地方! 这里讲下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,希望大家能认真的看完,相信收获会不少的 (我怎么不知道图片怎么插入了,有人知道告诉下,下次插图片了) 弄这些代码的布局比自杀还难!!!!!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-01
格式也可以重新排列一下,现在看起来很乱
|
|
返回顶楼 | |
发表时间:2007-09-01
弄图片就弄了半天
而且还限制图片的上传空间10M 想哭 这么点,那够啊! |
|
返回顶楼 | |
发表时间:2007-09-01
LZ可以试着重新压制成PDF的格式,供大家下载
|
|
返回顶楼 | |
发表时间:2007-09-04
其实每个技术都会有优点和缺点,主要看那种更适合你去,或者那种是你在项目中所需要的
|
|
返回顶楼 | |
发表时间:2007-09-08
Seam是一个很值得使用的集成框架,也许将来会成为标准(还很难讲),Spring何去何从呢?支持楼主文章,有个小小的问题,把排版好好整理一下,效果会更好,或者弄个PDF。
|
|
返回顶楼 | |