`

Seam-gen的试用手记

    博客分类:
  • JEE
阅读更多

什么是Seam-gen?
Seam-gen是Seam自带的一种项目生成工具。开发者只需要用cmd或者Eclipse的UI进行简单的配置就能自动生成一个项目,并且这 个项目还已经具备了完善的CRUD功能。开发者只需要基于需求对项目进行修改就可以了。从这点上和RoR非常类似,不知道是不是从它那偷来的。

开发环境准备
jdk1.5.0 -- 必须是Java 5 或以上;
jboss-4.2.2.GA -- 建议不要用最新的试用版,否则怎么死的都不知道,不值!
jboss-seam-2.0.2.SP1 -- 像jboss一样,下载下来直接解压就行;
MySQL Server 5.0 -- 各位爷们都装了无数次了吧?
完了当然不能忘记设置环境变量了。

这个Demo是干啥的?
小项目,只有三个表。user表存储了管理员帐号和普通用户帐号;suppliers表就是提供商,有id,name和code;deal表存储 交易信息,supplierid作为它的foreign key。这样一说大概也明白是干什么的吧。就是管理交易信息。完了我们就在MySql里创建数据库和表:

Java 代码
  1. create database seam;  
  2.   
  3. use seam;  
  4.   
  5. create table suppliers(  
  6.   id integer primary key auto_increment,  
  7.   name varchar(32 ) not  null ,  
  8.   code varchar(32 ) not  null   
  9. );  
  10.   
  11. create table deal(  
  12.   id integer primary key auto_increment,  
  13.   name varchar(32 ) not  null ,  
  14.   supplierid integer,  
  15.   Foreign Key (supplierid) references suppliers(id)  
  16. );  
  17.   
  18. create table user(  
  19.   id integer primary key auto_increment,  
  20.   name varchar(32 ),  
  21.   password varchar(32 ),  
  22.   role varchar(32 )  
  23. );  
create database seam;

use seam;

create table suppliers(
  id integer primary key auto_increment,
  name varchar(32) not null,
  code varchar(32) not null
);

create table deal(
  id integer primary key auto_increment,
  name varchar(32) not null,
  supplierid integer,
  Foreign Key (supplierid) references suppliers(id)
);

create table user(
  id integer primary key auto_increment,
  name varchar(32),
  password varchar(32),
  role varchar(32)
);


还要插一条管理员的记录进user表,有什么作用待会说

Java 代码
  1. insert into user values( '1' , 'admin' 'password' 'admin' );  
insert into user values('1','admin', 'password', 'admin');



这就是Seam-gen了
因为Seam-gen在Eclipse的plugin只更新到1.2,完全无视了时代的发展,所以只能用cmd来手动生成,再移植到 Eclipse。下面是配置的记录,后面我会慢慢解释:


C:\dev\jboss-seam-2.0.2.SP1是Seam的安装目录
seam setup -- 进入Seam项目的配置步骤;
project workspace -- 工作目录,随意;
JBoss home -- Jboss安装目录;
project name -- 项目名;
ICEFaces -- 可n可y,我这个demo用不上就没用;
RichFaces skin -- 几个都试过,我个人喜好wine,就是酒红色;
as an EAR -- 如果不需要用到EJB的东西,选war,否则ear;
package name -- 爱咋咋的;
database -- 那种数据库,候选里挑一个,我的是mysql;
Hibernate dialect -- 可不能写错了,不懂咋回事的上网google一下;
JDBC driver jar -- 你的jtds存放的位置;
JDBC driver class -- 我用的是com.mysql.jdbc.Driver;
JDBC url -- 就是连接数据库的url,比如我的是:jdbc:mysql://localhost:3306/seam
username -- 链接数据库的用户名;
password -- 密码;
database catalog -- 直接按Enter键跳过;
already exist -- y:数据库已有,n:重新创建数据库,我这里当然是y了;
drop and recreate -- 我选n;
搞定!快吧?
当然了,我们也有另外一种设置方式,就是直接在Seam的目录里的build.properties文件里直接编辑,这样可能效率更高:


下一步就是生成项目:seam new-project 。非常简单,一步搞定。有人也许会问,如果我是用 build.properties配置的,也是这样生成项目吗?对,配置完后进入seam的目录,直接输入命令就行。
生成实体:还是这么简单:seam generate-entities 。输入命令后,seam就会连接数据库,并把你数据库 里的表生成Java实体和mapping的配置文件。

还是得用Eclipse
打开Eclipse,按照以下步骤就能把项目import进来:
New project --> General project --> 你的项目名(provider)。就这样你就能在Eclipse开发了。

在Eclipse创建好了后我们就能尝试布置到应用服务器里运行。配置非常简单:


完了在cmd里输入以下命令:seam deploy ;再启动Jboss,在浏览器里输 入:http://localhost:8080/provider。牛!home page出来咯:


Login
项目生成的时候,Seam已经自动创建了一个Authenticator.java文件,里面只有一个method。当然了,最初肯定是没有任何 业务逻辑的,这些还得自己写。下面这段Java code就是就实现了简单的login逻辑:

Java 代码
  1. @Name ( "authenticator" )  
  2. public   class  Authenticator  
  3. {  
  4.     @Logger  Log log;  
  5.       
  6.     @In  Identity identity;  
  7.       
  8.     @In  EntityManager entityManager;  
  9.      
  10.     public   boolean  authenticate()  
  11.     {  
  12.         try   
  13.         {  
  14.            User user = (User) entityManager.createQuery(  
  15.            "from User where name = :username and password = :password" )  
  16.            .setParameter("username" , Identity.instance().getUsername())  
  17.            .setParameter("password" , Identity.instance().getPassword())  
  18.            .getSingleResult();  
  19.   
  20.            if  (user.getRole() !=  null )  
  21.            {  
  22.                Identity.instance().addRole(user.getRole());  
  23.            }  
  24.            return   true ;  
  25.         }  
  26.         catch  (NoResultException ex)  
  27.         {  
  28.            return   false ;  
  29.         }  
  30.     }  
  31. }  
@Name("authenticator")
public class Authenticator
{
    @Logger Log log;
    
    @In Identity identity;
    
    @In EntityManager entityManager;
   
    public boolean authenticate()
    {
    	try
        {
           User user = (User) entityManager.createQuery(
           "from User where name = :username and password = :password")
           .setParameter("username", Identity.instance().getUsername())
           .setParameter("password", Identity.instance().getPassword())
           .getSingleResult();

           if (user.getRole() != null)
           {
        	   Identity.instance().addRole(user.getRole());
           }
           return true;
        }
        catch (NoResultException ex)
        {
           return false;
        }
    }
}


功能很简单,就是检索数据库里是否存在用户输入用户名和密码,不存在就返回false;如果存在的话就把此用户的role赋给Identity object。这里,role是user表的一个字段,只存在两种可能值:user或admin,不允许为空。Identity是Seam一个 built-in的对象,我们拿来就可以用。我就不对它进行过多的解释,总之是和security有关的。

配置页面,限制访问权限
Seam为其自动生成的所有页面都配置了一个配置文件。比如菜单就有:menu.xhtml和menu.xhtml.xml.还有一个总的配置文 件:page.xml。一堆配置文件,确实有点烦。其实配置也很简单,在登录后才能访问的页面或菜单选项里加入login- required="true";在需要管理员身份才能访问的地方加上identity.loggedIn and s:hasRole(‘admin’)就能实现访问限制。简单!好,上pp吧:

菜单里只剩下home这个谁都能访问的链接了


普通用户登录后还是不能看到userList,但可以编辑deal和suppliers。


用管理员身份登录就啥都能干了。刚才说要手动插入一条管理员的记录进数据库,因为只有管理员身份登录以后才能在web里插入新的用户记录。

总结
pros:特别是那些针对数据库进行操作的中小型项目,并且简单,快捷,还有。。。。。爽!
cons:生成一大堆配置文件,虽然你能重新配置;不太适合大项目,否则你会发觉还不如自己配置后才开发呢。
总之啥都试试你才知道是不是你要的。ENJOY!

 

 

 

分享到:
评论

相关推荐

    Seam-gen生成基础项目骨架

    Seam-gen 是一款用于快速生成基于 Seam 框架的基础项目结构的工具,它通过简单的命令行交互式过程,帮助开发者构建项目的雏形,并且能够根据数据库信息自动生成管理数据库的 CRUD(Create, Read, Update, Delete)...

    seam-gen命令解析文档

    ### seam-gen命令解析知识点 #### 一、Seam框架简介及seam-gen命令的作用 Seam框架是一款基于Java EE标准的轻量级企业级应用框架,它极大地简化了Java EE应用的开发流程,使得开发者能够更加高效地构建复杂的业务...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    seam-forge dist

    1. **项目生成**:`seam-gen`命令可以快速创建新的Seam项目,包括必要的目录结构和基础文件。 2. **组件添加**:通过`seam component`命令,可以方便地将Seam组件添加到项目中,如EJB、JSF等。 3. **自动构建**:...

    jboss-seam-selectitems

    java jboss seam jboss-seam-selectitems

    Algorithm-seam-carving-js.zip

    Algorithm-seam-carving-js.zip,seam-carver的javascript实现。seam carver是一种基于内容的图像缩放算法,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Seam-Carving-Matlab-master.rar_boardkkc_seam_seam carving_seamca

    这个名为"Seam-Carving-Matlab-master.rar_boardkkc_seam_seam carving_seamca"的压缩包文件包含了Matlab实现的Seam Carving算法,非常适合学习和理解这一技术。 Seam Carving的基本思想是找到图像中的一条或几条...

    seam-support.jar

    seam-support.jar

    seam-navigation.jar

    seam-navigation.jar

    Seam - 语境相关的组件

    Seam是一种Java EE框架,它在开发企业级应用程序时提供了高度集成和语境相关的组件模型。这个框架的主要目标是简化复杂性,使开发者能够更高效地构建动态、响应式的Web应用。Seam的核心理念是将不同的技术,如Java...

    seam-javapolis2007

    ### Seam-Javapolis2007 知识点解析 #### 标题解析 - **标题**:“seam-javapolis2007” - **解释**:此标题表明了内容是关于 Seam 框架在 2007 年 Javapolis 大会上的演示或演讲材料。Javapolis 是一个重要的 Java...

    seam-pageflow.jar

    seam-pageflow.jar

    mahmoudnafifi-seam-carving-b553f4e_709com_数字图像处理_seamcarving_

    这个压缩包文件“mahmoudnafifi-seam-carving-b553f4e”可能包含相关的源代码、示例图像、教程或者演示,用于帮助理解并实践Seam Carving技术。通常,这样的资源会包括详细步骤的解释,可能的编程实现(可能是用...

    Seam - 语境相关的组件 .pdf

    最后,文档还介绍了如何在JBoss中使用JSF 1.2 RI运行Seam应用,以及如何使用Seam-gen工具快速启动新项目,包括从数据库生成应用程序、部署为EAR包和增量热部署。 Seam的核心是其上下文相关的组件模型,包括无状态上...

    seam-3.1.0资源包

    在资源包中,"seam-3.1.0.Beta5"可能是Seam 3.1.0的早期预览版本,尽管描述中提到可以使用"3.1.0.final",但Beta5可能包含了一些特定的实验性功能或bug修复。开发者通常会使用这样的预发布版本来测试新功能和稳定性...

    jsf-seam-jpa文档

    Seam 是一个强大的Java EE框架,它通过整合和强化Java EE 5的多个核心组件,如JSF(JavaServer Faces)和EJB 3.0,来提供一个统一且高效的开发体验。Seam的设计目标是简化Web应用的复杂性,特别是对于有状态的Web...

    jboss-seam-1.1.1.GA.tar.gz_easy

    在"jboss-seam-1.1.1.GA.tar.gz_easy"这个压缩包中,我们能够获取到JBoss Seam 1.1.1 GA版本,这是一个稳定且通用的发布版。 1. **JBoss Seam框架**:Seam是基于组件的框架,它将Web层和业务层无缝连接,消除了传统...

    Seam-无缝集成JSF

    ### Seam-无缝集成JSF #### 一、概述 Seam作为一个强大的应用程序框架,旨在扩展JSF(JavaServer Faces)的功能,为Java Web应用程序开发者提供更完善的解决方案。JSF作为Java Web应用程序的标准框架之一,虽然...

    JBoss Seam--A Deep Integration Framework

    **JBoss Seam——深度整合框架** JBoss Seam是一款开源的企业级应用框架,它以其深度集成的能力而闻名。这个框架的设计目标是简化Java EE(现在称为Jakarta EE)开发,通过提供一个统一的环境来整合各种技术和组件...

Global site tag (gtag.js) - Google Analytics