什么是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里创建数据库和表:
-
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
)
-
);
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表,有什么作用待会说
-
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逻辑:
-
@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
;
-
}
-
}
-
}
@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 框架的基础项目结构的工具,它通过简单的命令行交互式过程,帮助开发者构建项目的雏形,并且能够根据数据库信息自动生成管理数据库的 CRUD(Create, Read, Update, Delete)...
### seam-gen命令解析知识点 #### 一、Seam框架简介及seam-gen命令的作用 Seam框架是一款基于Java EE标准的轻量级企业级应用框架,它极大地简化了Java EE应用的开发流程,使得开发者能够更加高效地构建复杂的业务...
Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................
1. **项目生成**:`seam-gen`命令可以快速创建新的Seam项目,包括必要的目录结构和基础文件。 2. **组件添加**:通过`seam component`命令,可以方便地将Seam组件添加到项目中,如EJB、JSF等。 3. **自动构建**:...
java jboss seam jboss-seam-selectitems
Algorithm-seam-carving-js.zip,seam-carver的javascript实现。seam carver是一种基于内容的图像缩放算法,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
这个名为"Seam-Carving-Matlab-master.rar_boardkkc_seam_seam carving_seamca"的压缩包文件包含了Matlab实现的Seam Carving算法,非常适合学习和理解这一技术。 Seam Carving的基本思想是找到图像中的一条或几条...
seam-support.jar
seam-navigation.jar
Seam是一种Java EE框架,它在开发企业级应用程序时提供了高度集成和语境相关的组件模型。这个框架的主要目标是简化复杂性,使开发者能够更高效地构建动态、响应式的Web应用。Seam的核心理念是将不同的技术,如Java...
### Seam-Javapolis2007 知识点解析 #### 标题解析 - **标题**:“seam-javapolis2007” - **解释**:此标题表明了内容是关于 Seam 框架在 2007 年 Javapolis 大会上的演示或演讲材料。Javapolis 是一个重要的 Java...
seam-pageflow.jar
这个压缩包文件“mahmoudnafifi-seam-carving-b553f4e”可能包含相关的源代码、示例图像、教程或者演示,用于帮助理解并实践Seam Carving技术。通常,这样的资源会包括详细步骤的解释,可能的编程实现(可能是用...
最后,文档还介绍了如何在JBoss中使用JSF 1.2 RI运行Seam应用,以及如何使用Seam-gen工具快速启动新项目,包括从数据库生成应用程序、部署为EAR包和增量热部署。 Seam的核心是其上下文相关的组件模型,包括无状态上...
在资源包中,"seam-3.1.0.Beta5"可能是Seam 3.1.0的早期预览版本,尽管描述中提到可以使用"3.1.0.final",但Beta5可能包含了一些特定的实验性功能或bug修复。开发者通常会使用这样的预发布版本来测试新功能和稳定性...
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版本,这是一个稳定且通用的发布版。 1. **JBoss Seam框架**:Seam是基于组件的框架,它将Web层和业务层无缝连接,消除了传统...
### Seam-无缝集成JSF #### 一、概述 Seam作为一个强大的应用程序框架,旨在扩展JSF(JavaServer Faces)的功能,为Java Web应用程序开发者提供更完善的解决方案。JSF作为Java Web应用程序的标准框架之一,虽然...
**JBoss Seam——深度整合框架** JBoss Seam是一款开源的企业级应用框架,它以其深度集成的能力而闻名。这个框架的设计目标是简化Java EE(现在称为Jakarta EE)开发,通过提供一个统一的环境来整合各种技术和组件...