[SEAM] 一年磨一剑: seam学习杂谈
netkiss.li
2009-10-19
http://hoyoba.com
我曾经加入过一些所谓的高级Seam论坛,但我看到的只是偏见,自以为是和误导。 Seam是有点难,但并非难得不可接近。学习的方法和顺序的混乱,也造成了入门的困难。 我最近一年来,做过3个seam的项目,从技术上来说,应该是可以说是略知一二了。 那么如何学习,理解seam呢?我想从我的经验来说,给出如下的建议: 1. 组件的生命周期是核心 如果你不理解seam组件的生命周期,你就没有办法选择合适的组件来开发,尤其是在ejb的情况下,如何选择有状态,无状态的bean,是个难点。当然如果不考虑性能,你都使用有状态bean,就不会出现问题了,但事实上没人那么干的。不想多说,建议买一本《Ejb 3.0 中文版》注意封面是袋鼠图案的,国内出版的所谓入门经典,简直不堪入目 2. 熟悉jsf,和richfaces(或者icefaces等) jsf,如果你不开发自己的控件的话(比如利用richfaces),那么你完全可以把它当作struts tag libs来使用。 3. 搞清楚如何初始化页面: 细粒度的框架,没有标准的入口,所以你可以采用@Factory, page.xml或者actionMethod来完成 4. 其他的兵来将挡,边做边查资料吧,满江红翻译的就不错。 5. 不要好高骛远 常听人说:我要使用xxx高级特性,你他娘的连死活(生命周期)都搞不清楚 还搞什么高级? http://hoyoba.com这个是我最近完成的一个实例,有兴趣,可以拿来参考一下。 |
|
Mrpublic
2009-10-20
頂一個,兄弟帮解个问题,怎么在后台方法中获取数据源的信息 如 用户与密码,uRl地址等,因为我用存储过程返回一个结果集,但在方法中 直接用
String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@10.171.0.1:1521:XXXX"; 太不方便了要是数据源稍有改变就得改代码 。谢谢 |
|
netkiss.li
2009-10-20
刚好前段时间有个兄弟帮我写了段代码:
采用解析xml的方式来获取,连接信息,自己研究吧。 @Scope(ScopeType.APPLICATION) @BypassInterceptors @Name("catalogConfig") @Startup public class CatalogConfig extends ActionHome { private static final long serialVersionUID = -3426776881165378544L; private List<Catalog> catalogList; private List<String> catalogValueList; @Logger private Log log; @Create public void initCatalog() { catalogList = getCatalog(); catalogValueList = loadCatalogList(catalogList); } public List<Catalog> getCatalogList() { return catalogList; } public void setCatalogList(List<Catalog> catalogList) { this.catalogList = catalogList; } public List<String> getCatalogValueList() { return catalogValueList; } public void setCatalogValueList(List<String> catalogValueList) { this.catalogValueList = catalogValueList; } private List<String> loadCatalogList(List<Catalog> catalogList) { List<String> list = new ArrayList<String>(); for (Catalog c : catalogList) { list.add(c.getCatalogName()); } return list; } private List<Catalog> getCatalog() { Document doc = getDoc(); if (doc == null) { return null; } List<Catalog> catalogs = new ArrayList<Catalog>(); int nodeCount = doc.getRootElement().nodeCount(); Element root = doc.getRootElement(); for (int i = 0; i < nodeCount; i++) { Node node = root.node(i); if (node instanceof Element) { Element e = (Element) node; if (e.getName().equals("persistence-unit") && !e.attributeValue("name").equalsIgnoreCase("auditMonitor")) { Catalog catalog = new Catalog(); catalog.setCatalogName(e.attributeValue("name")); for (int j = 0; j < e.nodeCount(); j++) { Node node1 = e.node(j); if (node1 instanceof Element) { Element e1 = (Element) node1; if (e1.getName().equals("properties")) { for (Element e2 : (List<Element>) e1.elements()) { if (e2.attributeValue("name").equals("hibernate.default_catalog")) { catalog.setDbName(e2.attributeValue("value")); } else if (e2.attributeValue("name").equals("hibernate.default_schema")) { catalog.setSchema(e2.attributeValue("value")); } else if (e2.attributeValue("name").equals( "jboss.entity.manager.factory.jndi.name")) { catalog.setFactoryJndiName(e2.attributeValue("value")); } } } } } catalogs.add(catalog); } } } return catalogs; } private Document getDoc() { Document doc = null; try { String filePath = this.getClass().getResource("/").getPath() + "audit.jar/META-INF/persistence.xml"; File file = new File(filePath); if (file.exists()) { FileInputStream in = new FileInputStream(file); SAXReader reader = new SAXReader(); doc = reader.read(in); } else { log.info("The configuration file is not existed."); } } catch (Exception e) { log.error(e.getMessage()); } return doc; } } |
|
Mrpublic
2009-10-20
謝謝先 有點長 慢慢看
|
|
q_wong
2009-10-20
樓主你好,小菜鳥請教個問題哈:
你這個網站是用的什麽服務器呢? Jboss嗎? 那服務器是放在哪裡呢? 因為我之前查過一些資料,好像國內的域名空間提供主要是php和asp的,Java的很少吧,而且還都要貴一些,那用Java做web有什麽優勢呢? 還有,你這個網站是用seam做的嗎?那爲什麽url後綴都是.html,而不是.seam呢? 因為我接觸的seam工程一般使用的頁面是.xhtml,訪問時url地址里顯示是.seam 。 |
|
netkiss.li
2009-10-20
樓主你好,小菜鳥請教個問題哈:
你這個網站是用的什麽服務器呢? Jboss嗎? netkiss: jboss 那服務器是放在哪裡呢? 因為我之前查過一些資料,好像國內的域名空間提供主要是php和asp的,Java的很少吧,而且還都要貴一些,那用Java做web有什麽優勢呢? netkiss: 凑份子买个刀片机,托管到机房,如果你不使用ejb的话,国内还是能找到合适的tomcat服务器的。 java做web的优势其实要看项目,java的协同性是最好的,无论是可维护性,健壮性都很好;接口复杂的项目,优势更是明显。一个人开发当然用你最熟悉的技术,那是最好了。 還有,你這個網站是用seam做的嗎?那爲什麽url後綴都是.html,而不是.seam呢? 因為我接觸的seam工程一般使用的頁面是.xhtml,訪問時url地址里顯示是.seam 。 netkiss: http://www.hoyoba.com这个站点的确使用seam做的,至于为什么看起来是html,这个使用到了seam的url重写,比如: <rewrite pattern="/individual/download.html" /> 这个主要是为了迷惑搜索引擎用的。 |
|
q_wong
2009-10-20
嗯 明白了 謝謝樓主
![]() |
|
Mrpublic
2009-10-21
呵呵,我用这个直接就搞定了 不需那么繁琐
HibernateSessionProxy proxy=(HibernateSessionProxy)this.getEntityManager().getDelegate(); Connection connection=proxy.connection(); |
|
jmzwcn
2009-10-21
www.ctask.com,也是用seam作的,有空可以参考参考...
|
|
netkiss.li
2009-10-21
这段代码本来是为多个数据源准备的,和繁琐业务相关,所以复杂了点
![]() |
相关讨论
相关资源推荐
- MYSQL v4.1(中文)
- SQL 提示“CREATE、DROP 或 ALTER 语句中使用了未知的对象类型 ‘SEQUENCE‘。”
- SQL 2008 从零基础到如今(不断更新中)
- 从MySQL OCP考题中学知识2-临时表temporary table
- 数据库作业13:SQL练习8 - CHECK / CONSTRAINT / TRIGGER / PROCEDURE/ FUNCTION
- mysql4.1乱码_MySQL 4.1(或以上) 中文乱码原因及解决方法
- 引用了未知的对象类型cluster
- MySQL 4.1.0 中文参考手册 --- 6.6 基本的 MySQL 用户实用命令
- 数据库系统概论5版第三章关系数据库标准语言SQL【上】——数据定义(create、drop、alter)
- MySQL 4.1.0 中文参考手册 --- 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE