由于本人英语水平和精力都有限,无法完成全部翻译,只是对其中重点文字作了翻译,依照这几处重点指示,应该就能把问题解决了,若欲详细探究请阅读英文原文,原文出处:http://code.google.com/p/seaminaction/wiki/DeployingToJBossAS5
DeployingToJBossAS5
在JBoss 5上部署Seam应用程序
Provides guidance for running the sample application on JBoss AS 5
Overview
JBoss AS 5 is a fully compliant Java EE 5 application server. It was first released to the community in December 2008, post dating the release of the book by several months. This page documents migration problems that may be encountered running the sample application on JBoss AS 5 and guidance on how to get the deployment working.
Persistence unit problems
If you take the WAR version of the sample application and attempt to deploy it to JBoss AS 5, you likely get the following exception when you attempt to look at a listing page:
如果您将WAR版本的样例应用程序部署到JBoss AS 5上,在运行时,可能会得到如下的错误提示:
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: Facility is not mapped [select facility from Facility facility]
The problem stems from the fact that JBoss AS 5 handles the deployment of persistence units different than JBoss AS 4. Namely, JBoss AS 5 will load any persistence unit defined in META-INF/persistence.xml automatically. That means when Seam loads the persistence unit, there are now two runtime instances of the persistence unit. (In addition, JBoss AS 5 doesn't scan for entity classes in WEB-INF/classes when bootstrapping the persistence unit manually or in Seam). Either way, you only need to load the persistence unit once.
To fix the problem of how the persistence unit is loaded, make the following changes to the project.
要解决持久化单元的加载问题,须对项目的某些配置进行更改,接下来将教您具体如何做:
- Instruct the Hibernate JPA provider to bind the runtime persistence unit to JNDI by adding this property to the resources/META-INF/persistence-*.xml files
-
往/META-INF/persistence-*.xml配置文件中添加属性
<property name="jboss.entity.manager.factory.jndi.name" value="java:/open18EntityManagerFactory"/>
- Disable the Seam-managed persistence unit in resources/WEB-INF/components.xml (or just remove this component definition altogether)
-
修改/WEB-INF/components.xml中的配置节(或者干脆把这个配置节删除)
<persistence:entity-manager-factory name="open18EntityManagerFactory" persistence-unit-name="open18" installed="false"/>
-
Switch the Seam-managed persistence context to use the persistence unit in JNDI by modifying this component definition in resources/WEB-INF/components.xml
-
修改/WEB-INF/components.xml中的配置节
<persistence:managed-persistence-context name="entityManager" auto-create="true" entity-manager-factory="#{open18EntityManagerFactory}" persistence-unit-jndi-name="java:/open18EntityManagerFactory"/>
This solution may seem a bit "hackish" because you are resorting to the proprietary JNDI binding that I spoke about in chapter 9. If you want to do it right, simply follow the instructions I give in chapter 9 for binding a persistence unit to JNDI on a Java EE 5 compliant server. Namely, define a persistence unit reference in web.xml:
<persistence-unit-ref>
<persistence-unit-ref-name>open18/emf</persistence-unit-ref-name>
<persistence-unit-name>open18</persistence-unit-name>
</persistence-unit-ref>
Then use the following JNDI name in components.xml to refer to it:
java:comp/env/open18/emf
Retrieving the persistence unit runtime from JNDI is the only way in JBoss AS 5 to ensure the persistence unit loads once and Seam uses it. I am not sure at this point how to prevent JBoss AS 5 from automatically loading the persistence unit.
GlassFish handles this more correctly, in my mind. If the persistence unit reference is not defined in web.xml, then GlassFish doesn't load the persistence unit.
Further explanation
The reason this problem crops up is because Seam was designed under the assumption that the application server would not load persistence units in a WAR project (I talk about this in depth in chapter 9). JBoss AS 5 is compliant with Java EE 5 and therefore does load the persistence unit (well, the spec is loose here and JBoss AS 5 doesn't wait for a persistence unit reference to give the green light).
Resources
-
Running Seam Examples on JBoss AS
- This page on the seamframework.org Knowledge Base gives the latest status of running the Seam distribution examples on JBoss AS. You'll notice that most problems surround the persistence issue described above.
分享到:
相关推荐
8. **RESTful的Seam应用程序:Blog示例**:通过一个博客系统,演示了如何使用Seam构建RESTful风格的服务。 - **使用“拉”风格的MVC**:解释了如何通过Seam实现客户端发起请求、服务器响应数据的经典MVC模式。 - *...
- **使用JSF 1.2 RI**:提供了如何在JBoss平台上使用JSF 1.2参考实现来部署和运行Seam应用的具体步骤。 #### 三、结语 通过以上内容的学习,读者可以全面了解JBoss Seam框架的核心功能和技术特点,掌握如何使用...
JBoss是Red Hat公司开发的一款开源Java应用服务器,基于Java EE(Enterprise Edition)标准,用于运行和管理Java应用程序和服务。本教程将帮助读者理解以下关键知识点: 1. **安装与配置**:了解如何下载、安装和...
### 如何部署Seam的例子程序 #### 一、前言 Seam是一个强大的JavaEE框架,它简化了企业级应用的开发过程。Seam自带了一系列示例程序来帮助开发者更好地理解其特性和功能。通常情况下,这些示例是通过集成开发环境...
标题中的“Geronimo服务器下部署Seam程序”是指在Apache Geronimo应用服务器上安装和运行JBoss Seam应用程序的过程。Apache Geronimo是一个开源的应用服务器,它支持Java EE规范,而JBoss Seam是一个用于Java EE平台...
本节通过一个酒店预订系统示例展示了如何使用 Seam 开发复杂的应用程序。 **1.6.1 简介** - **应用场景**:酒店预订系统是一个典型的电子商务应用。 - **功能需求**:包括房间查询、预订、支付等功能。 **1.6.2 ...
- **在 JBoss AS 上运行示例**:这是最直接的方式之一,可以快速验证环境配置是否正确,并且熟悉 Seam 在 JBoss AS 上的运行方式。 - **在 Tomcat 服务器上运行示例**:如果开发者已经熟悉了 Tomcat,那么这种方式...
JBoss 是一个开源的应用服务器,基于Java EE标准,用于托管企业级Java应用程序。在这个配置及项目部署文档中,我们将深入探讨如何配置JBoss环境以及如何将项目部署到这个环境中。 首先,确保你已经安装了Java ...
1.6. 一个完整的Seam 应用程序:宾馆预订范例............................................................................................................ 45 1.6.1. 介绍......................................
这部分内容介绍了如何在 JBoss AS 和 Tomcat 上运行 Seam 应用程序的基本步骤,包括配置环境、部署应用程序等。 - **在 JBoss AS 上运行示例**:首先确保已正确安装并配置了 JBoss AS,然后将 Seam 应用程序部署到 ...
**JBoss Seam** 是一款强大的开源框架,它在**Java EE** 的基础上提供了更为简单且功能强大的开发方式,旨在简化企业级应用的开发过程。Seam 的核心优势在于其对状态管理、会话管理、集成数据模型与表现层以及业务...
JBoss Seam 是一款开源的Java框架,主要用于简化企业级Java应用程序的开发,它结合了JSF(JavaServer Faces)和EJB(Enterprise JavaBeans)等技术,提供了强大的组件模型和事件驱动机制。Seam工程的创建是开发Seam...
JBoss Seam 是一款开源的企业级Java框架,它集成了...解决这些问题后,你应该能够成功地在Tomcat上运行Seam应用程序。在迁移过程中,保持耐心和仔细检查配置是关键,同时理解Seam和Tomcat之间的差异也是非常重要的。
- **运行示例测试:** 解释了如何使用自动化测试工具验证Seam应用程序的功能。 2. **第一个Seam应用:注册示例** - **理解代码:** 分析了用于实现用户注册功能的核心代码片段。 - **工作原理:** 解释了Seam是...
Seam 是一个开源的 Java 框架,主要用于简化企业级 Java 应用程序的开发,特别是与 JBoss 服务器的集成。它提供了一个统一的框架来整合多种技术,包括 JavaServer Faces (JSF)、Java Persistence API (JPA) 和 Java ...
JBoss Seam 是一个开源的应用程序框架,它整合了JavaServer Faces (JSF)、Enterprise JavaBeans (EJB)、Java Persistence API (JPA) 和其他Java EE技术,旨在简化开发过程,提高开发效率。本资料集合包括《Seam in ...
Seam调试是一个基于JSF的调试工具,能够帮助开发者快速 Debug Seam应用程序。Seam调试提供了一个统一的编程模型,能够将JSF、EJB、JPA等技术整合在一起,提供了一个强大且灵活的开发环境。 Seam和JSF Seam和JSF是...
5. **热部署支持**:在JBoss应用服务器上,Seam允许开发者在运行时修改代码并立即生效,无需重启服务器,大大提高了开发效率。 6. **安全与身份验证**:Seam集成了JAAS(Java Authentication and Authorization ...
JBoss Seam是一个旨在提升开发者生产力和增强企业Web应用程序扩展性的框架,它弥补了Java EE 5.0标准框架在集成和简化开发过程方面的不足。 Java EE 5.0的核心框架包括EJB 3.0和JSF 1.2。EJB 3.0是一个基于POJO的轻...