`
dontsan
  • 浏览: 41036 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

JBoss tool/seam, JSF, Richfaces, A4J, Eclipse 备忘录

阅读更多
项目一开始就陷入细节,企图在一些细节方面做得完美。岂知这样浪费了很多时间,客户还不一定买账,得不偿失。
原来打算用Ajax将界面做的快一点,方便一点,用户完成一个功能不需要很多页面。这些锦上添花的东西完全可以放到以后做。

今天用A4J又出一点麻烦,commandlink 没有反应。检查浏览器 web page 源文件发现调用的JS语句中form位置的参数为null。原来用<form>不行,要用<h:form>


Hibernate的实体Bean的Annotation一定要放在get方法前面,Toplink Essentials放在Field前就可以。如果Hibernate在get方法前没有发现@OneToOne这些Annotation,就会将对象字段生成tinyblob类型的数据。
Hibernate 的 ManyToMany 很奇怪。记得在 toplink essentials 中只要声明一方就好了。 而在 Hibernate 里要声明两方。否则不能确定 Type. 一旦声明了两方他又试图创建两个连接表,创建的时候又出错。结果一个查询出错,不能找到表。最后用 Native SQL 解决。
Hibernate的实体Bean如果有一个getXXX,他将被看作一个属性,并且试图确定它的Type.如果不用持久化,标记@Transient.

虽然设置了 <property name="hibernate.hbm2ddl.auto" value="update"/>, 但是修改EntityBean's annotation后,hibernate不会更新数据表结构定义。例如:
	@ManyToMany(targetEntity=Page.class, cascade=CascadeType.ALL)
	@JoinTable(name="sku_page",joinColumns={@JoinColumn(name="skus_id",referencedColumnName="id" )},inverseJoinColumns={@JoinColumn(name="pages_id",referencedColumnName="id" )},uniqueConstraints={@UniqueConstraint(columnNames={"skus_id","pages_id"})})
	public Set<Page> getPages() {
		return pages;
	}


	@ManyToMany(targetEntity=Sku.class, cascade=CascadeType.ALL,mappedBy="pages")
	public Set<Sku> getSkus() {
		return skus;
	}  



到数据库里面一看,连接表的外键约束还是restrict. 删除表重新部署,hibernate生成了一个表,但是约束仍然不对。后来自己修改数据表的外键为cascade.


facelet 的 include 标签如果找不到src文件会导致渲染出错。最后创建了一个defaultMap.html,里面只有一行。

navigator.xhtml

<!--if ui:include's src is resolved to null or empty, EL will throw a overflow exception	-->
<!--if ui:include's src is resolved to other string than a file path, it will take it as an jndi name-->
<ui:include src="#{navigator.mapFilePath}" /> 



NavigatorBean
	public String getMapFilePath() {
		String s = "";
		try {
			s = mapPath + getPageNumber() + mapExtName;
		} catch (Exception e) {

			s = mapPath + "defaultMap" + mapExtName;
		}
		return s;

		// return mapFilePath;
	}



JSF RI的panelgrid很方便,将很多元素排列整齐,但是不够灵活。最后首页上的排版还是用div完成。

今天jboss seam偶尔出现 failed to get lock on Synchronized component 错误。估计是a4j调用component时候线程冲突。试一试 @Synchronized(timeout=xxxxxxxxxx),然后调整一下web page上的 a4j 标签的时间类属性。加上@Synchronized(timeout=xxxxxxxxxx)后Eclipse的代码编辑器出现NullPointerException,不能打开文件,因为不能解析那个@Synchronized annotation。后来在外部编辑器中去掉它。

Query使用第二次出现hibernate抛出的 exception:session is closed。将PersistenceContext的type设成EXTENDED,解决。
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;


用Integer,Long,Float不如用int,long,float,不用初始化有初值,不易出错。

Jboss seam 的components 生命周期。 今天在一个Conversation component 里面引用了一个javabean,缺省的是Event context,也就是调用一次就消失了。我用@In注入,结果在conversation 结束之前他就消失了。并不会因为你有引用jboss seam 就替你留着。后来还是new了一个解决问题。
@In
FacesMessages facesMessages;
将注入全局消息组件。变量必须是facesMessages。否则出错。看来是变量名和seam组件的@Name("XXX")绑定。


如果Conversation组件没有开始conversation,例如用@Begin,那么它的表现就像event 组件一样。

I added an attribute class="xxx" to rich:panel tag. Facescontext threw an exception: setter not found on property class. wasted almost one hour to debug this. becasue "class" is not an attribute for that tag. I'd better set those attribute in properties panel than code it in code editor.

关于属性。有一个属性US_desc,虽然惯例应该小写开头,我想这个大写是有意义的,只要getter setter没错就好了吧。结果EL抛出错误,找不到属性。改为us_desc, OK.

今天 Hibernate 抛出异常 Caused by: java.lang.NullPointerException
at org.hibernate.type.IntegerType.next(IntegerType.java:59)
at org.hibernate.engine.Versioning.increment(Versioning.java:108)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getNextVersion(DefaultFlushEntityEventListener.java:365) at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:128)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:515)


看来是flush的时候出了问题,但是为什么即使只有一个读操作也是这样?后来发现我的Entity里面有一个没有veriosn,其他的由Jboss Seam工具生成,但是setVersion是私有的。一一改过来,问题依旧。后来发现我在数据库里用外部工具插入很多行,这些行的version为null,将他们设为1,问题解决。

如果将id的css都放在全局css文件里会导致这个文件较大。而这些设置通常只是对一个页面。最好将id的css放在页面上,class的css放在全局css文件中。


Web App 2.5和以前的版本有些不同。Tag Lib 不需要配置。将tag lib jar拷贝到web-inf 的lib下就可以用了。

垂直居中:*{vertical-align: middle;}
应用于rich:panel的margin总是不起作用。原来CSS中没有写单位px。真粗心。

Jboss Seam 调试页面 。。。debug.seam

又出错了,
aused by: java.lang.InstantiationException: org.hibernate.ejb.QueryImpl
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.jboss.serial.classmetamodel.ClassMetaData.newInstance(ClassMetaData.java:334)
... 133 more
不知道是不是内存设置不够。


在实体bean中注入组件。
I can inject a seam component in Entity with:
Code:
EncryptionController anEncryptionController = (EncryptionController) Component.getInstance("encryptionController", true);


But is it possible to inject it with In annotation or some other annotation ?

No, bijection (and almost all other Seam annotations) doesn't happen in entities. It makes it harder to use a bad architecture/design ;)

今天Hibernate出了一点问题。在Eclipse重新启动Jboss问题依旧。不能找到JNDI绑定catalogEntityManagerFactory。下面是persistence.xml

           
   <persistence-unit name="catalog">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/catalogDatasource</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/catalogEntityManagerFactory"/>
      </properties>
   </persistence-unit>

后来重启了Eclipse,故障消失。


测试服务器上的MySQL是4.1.2的。很奇怪用终端运行mysql命令查询正常,但用Connector5.1,3.1都查询不到记录集,也没有错误提示。

用ssh输入密码服务器很麻烦,做了一个批处理文件,内容:putty -load testserver -l root -pw w3bs3rv3r -C
其中 testserver 是保存好的profile.


在windows下开发的web app放到Linux下根本不能运行。原来的表名是小写,到了Linux下Hibernate自动生成大写首字母的表。查询也不能用了。不知道问题在哪里。看来还是要在Linux下开发才行。如果在Linux下可以运行,放到Windows下会怎样呢?看来跨平台真不容易呀。


RedHat EL4自带MySQL4.12,太低。卸载还出错。后来解压了一个MySQL5.0 for generic linux 到/usr/local/mysql,OK. 数据库位置不变。在/etc/my.cfg中设定。也试过RPM版,安装不成功,缺少文件。

考虑安装Ubuntu8.04.从硬盘安装,需要启动管理器Grub,启动文件vmlinuz,initrd.gz,下载了一个Ubuntu-alternate-amd64.iso.解压它得到那两个启动文件。

RichFaces SKINs:
 <context-param>
  <param-name>org.richfaces.SKIN</param-name>
  <!-- blueSky, classic,deepMarine,DEFAULT,emeraldTown,japanCherry,NULL,plain,ruby,wine -->
  <param-value>NULL</param-value>
 </context-param>



客户的 WebService 响应写得很简单,我想用JAXB来解决。每个请求、响应对应一个class,用XSteam转换。他的响应XML如下:
<DealerWholesalePriceRequest>
	<company>0100</company>
	<dealer>1006523</dealer>
	<item>20000</item>
	<quantity>1</quantity>
</DealerWholesalePriceRequest>


错误响应:
<OrderCancelResponse>
	<orderHeader>
		<CoastOrderNumber>12345678</CoastOrderNumber>
		<Error>
			<ErrorCode>000</ErrorCode>
			<ErrorMsg>Request Accepted</ErrorMsg>
		</Error>
		<Error>
			<ErrorCode>998</ErrorCode>
			<ErrorMsg>Order has already been shipped.  It is too late to cancel it.</ErrorMsg>
		</Error>
		<Error>
			<ErrorCode>999</ErrorCode>
			<ErrorMsg>Order not found</ErrorMsg>
		</Error>
	</orderHeader>
</OrderCancelResponse>


但是他的错误响应和成功响应要分析XML才能判断,不利于JAXB转换,类型不对会抛出错误。要和他商量看能不能扩展HTTP协议头来表示错误响应,简单的办法是增加状态码,反正还有很多保留的。2开头或者5开头都可以。5开头可能不合理,因为不是一个技术错误,而是业务错误。299或者200.123都可以。
HTTP协议状态码表示的意思 
  1××  保留 
  2××  表示请求成功地接收 
  3××  为完成请求客户需进一步细化请求 
  4××  客户错误 
  5××  服务器错误 


今天将客户发过来的classes打包成jar,参考进工程,很奇怪还是不能解析符号。class里面也看不到方法和字段。其他jar可以看到里面的方法字段等。--几天后重启Eclipse问题消失。


朋友要建一个网站,不过好像没有支持JBOSS AS, Glassfish这些服务器的空间。最多也就asp.net。常见的是asp,php。 在DW8里面试一试PHP,结果链接MYSQL出错。到时候一定要做了再去看看其他的吧。听说有delphi for php, zde,phpde.如果能找到现成的CMS就好了。

JBoss AS 有时候启动时失败。Connector不能绑定端口。 后来发现是QQ占用了端口。奇怪。
分享到:
评论

相关推荐

    seam+jsf+richfaces+ajax4jsf 电子书

    Seam、JSF、RichFaces 和 Ajax4jsf 是四个重要的Java Web开发框架和技术,它们在构建现代、交互式Web应用程序中发挥着关键作用。让我们深入探讨这些技术及其结合使用时的知识点。 **1. Seam** Seam是一个开源的Java...

    《SeamInAction》+《JbossSeam》+《官方中文指南》

    标签中提到的“seam jsf richfaces jboss”,分别对应Seam框架、JSF、RichFaces和JBoss。JSF是Java EE的一部分,用于构建Web用户界面;RichFaces是Seam中的一个增强JSF功能的库,提供了丰富的AJAX支持;JBoss是Red ...

    jboss seam 中文文档集合

    JBoss Seam 是一个开源的应用框架,它结合了JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.0 和其他Java EE组件,旨在简化企业级开发。这个文档集合包含了对Seam及其相关技术...

    Simple JSF application with RichFaces

    根据给定文件的信息,我们可以提炼出关于如何构建一个简单的JSF应用并集成RichFaces的关键知识点。下面将对这些知识点进行详细的阐述。 ### 一、简述 本文档旨在指导开发者如何构建一个简单的JavaServer Faces ...

    jboss-richfaces-3.0.0

    **JBoss RichFaces 3.0.0:一个强大的AJAX和JSF组件库** **一、RichFaces概述** RichFaces是JBoss公司推出的一款基于JavaServer Faces (JSF) 技术的开源UI组件库,它极大地扩展了JSF的功能,特别是提供了丰富的AJAX...

    JBoss Seam入门介绍

    Seam支持多个开源JSF AJAX库,如JBoss RichFaces和JBoss ICEFaces,甚至内置了一个AJAX远程调用层,极大地提升了Web应用的交互性和响应速度。 #### 4. 声明式状态管理 Seam扩展了Servlet规范中的三个上下文(请求、...

    Jboss Seam 三本最受欢迎的教材

    【JBoss Seam】是Java企业级应用开发框架,它整合了JSF(JavaServer Faces)、EJB(Enterprise JavaBeans)3.0、JPA(Java Persistence API)以及一系列其他技术,为开发人员提供了一个强大的全栈式解决方案。Seam...

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

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

    Practical_JBoss_Seam书的源代码

    Seam是一种开源的企业级Java框架,它整合了多种技术和概念,如JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB)、Contexts and Dependency Injection (CDI)以及RichFaces等,为开发...

    seam框架相关知识总结

    Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...

    深入浅出-jbossseam说明

    4. **整合框架**:Seam与多个框架有良好的集成,如JSF、Hibernate、Spring、RichFaces等,这使得开发者可以在同一个项目中自由选择合适的工具和技术。 5. **安全和身份验证**:Seam提供了内置的身份验证和授权机制...

    beginning jboss seam

    《 Beginning JBoss Seam》是一本面向初学者的指南,详细介绍了JBoss Seam框架的各个方面,旨在帮助读者快速理解和掌握这一强大的企业级Java开发工具。这本书深入浅出地讲解了Seam如何简化Java EE应用程序的开发过程...

    ext,richfaces,seam的结合demo

    标题“ext,richfaces,seam的结合demo”以及描述“一个ext,richfaces,seam的结合demo”,表明这是一个展示如何将Ext JS、RichFaces与Seam框架结合使用的示例项目。下面,我们将深入探讨这三个技术的关键知识点...

    richFaces帮助文档

    xmlns:a4j="http://richfaces.org/a4j"&gt; &lt;title&gt;Ajax Echo&lt;/title&gt; &lt;/h:head&gt; &lt;h:inputText id="input" value="#{dataBean.input}" /&gt; &lt;a4j:commandButton value="Submit" action="#{dataBean.submit}" ...

    jsf框架

    - JBoss Seam是一个用于构建企业级应用程序的框架,可与JSF和RichFaces集成。 - 配置Seam以支持RichFaces组件。 #### Portlet支持 - 富客户端组件可以在Portlet容器中运行。 - 需要确保服务器支持portlet模式,并...

    richfaces-usersguide

    RichFaces提供了大量的富组件,如`&lt;a4j:ajaxListener&gt;`、`&lt;a4j:keepAlive&gt;`、`&lt;a4j:outputPanel&gt;`等,它们分别用于监听AJAX请求、保持会话活跃、动态更新页面区域等功能。掌握这些组件的关键属性和使用方法,对于...

    Richfaces操作手册

    - JBoss Seam 是一款基于 JSF 的企业级应用程序框架,RichFaces 与之有良好的集成。 6. **Portlet 支持:** - RichFaces 支持在 Portlet 规范下运行,适用于构建门户应用。 7. **Sybase EAServer:** - 描述了在 ...

    RichFaces 3.3 帮助文档(英文)

    - **JBoss Seam支持:** 针对与JBoss Seam框架的集成进行了详细介绍,包括配置和最佳实践。 - **Portlet支持:** 介绍了如何在Portlet环境中使用RichFaces,并提供了一些优化建议。 - **Sybase EAServer:** 对于...

    Seam-gen生成基础项目骨架

    此外,Seam-gen 生成的项目也可以很好地与 Eclipse 等 IDE 集成,利用 JBoss Tools 插件进行进一步的开发和调试。总的来说,Seam-gen 是一个强大的工具,极大地加速了基于 Seam 的 Java EE 项目的开发流程。

Global site tag (gtag.js) - Google Analytics