`
angellin0
  • 浏览: 115939 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

解决JPA工程在Glassfish下部署失败问题

阅读更多
    关键字:org.xml.sax.SAXParseException: cvc-complex-type.2.4.d: Invalid content was found starting with element 'class'. No
child element is expected at this point.
  
    这段时间做的一个项目,部署环境是GlassFish,但始终部署失败,但在tomcat下一切正常。错误如下:
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.d: Invalid content was found starting with element 'class'. No child element is 
expected at this point.
	at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.read(DeploymentDescriptorFile.java:304)
	at com.sun.enterprise.deployment.archivist.ExtensionsArchivist.open(ExtensionsArchivist.java:115)
	at com.sun.enterprise.deployment.archivist.PersistenceArchivist.readPersistenceDeploymentDescriptor(PersistenceArchivist.java:125)
	at com.sun.enterprise.deployment.archivist.WarPersistenceArchivist.open(WarPersistenceArchivist.java:88)
	at com.sun.enterprise.deployment.archivist.Archivist.readRestDeploymentDescriptors(Archivist.java:383)
	at com.sun.enterprise.deployment.archivist.Archivist.readDeploymentDescriptors(Archivist.java:373)
	at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:238)
	at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:247)
	at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:208)
	at com.sun.enterprise.deployment.archivist.ApplicationFactory.openArchive(ApplicationFactory.java:161)
	at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:162)
	... 31 more

引起的原因是在persistence.xml文件中:
<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="MyProject" transaction-type="RESOURCE_LOCAL">
		<properties>
			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
			<property name="hibernate.cache.use_query_cache" value="true"/>
			<property name="hibernate.generate_statistics" value="true"/>
			<property name="hibernate.cache.use_second_level_cache" value="true"/>
			<property name="hibernate.cache.provider_configuration_file_resource_path" value="ehcache/ehcache-hibernate-local.xml"/>
			<property name="hibernate.jdbc.fetch_size" value="50"/>
			<property name="hibernate.jdbc.batch_size" value="30"/>
		</properties>

                <!--报错说此行无效-->
		<class>org.workin.trace.domain.BehaviorPerformance</class> 
	</persistence-unit>
</persistence>

    这样配置的原因是项目中有部分实体类是放在Jar包中的,需要显示配置才能扫描得到。在网上找了N久,始终未能解决。 昨天将
eclipse工作区下的.metadata文件夹删掉,重新建立一个工作区,发现该项目persistence.xml文件中<class>com.xxx</class>这一行报错。起初还以为是XSD引用错误,但是比对了一下,这个和官网上的一模一样。
    在多次失败之后,我将<class>...</class> 放到<properties>...</properties>之前定义,发现eclipse验证居然通过了。再将其发布到GlassFish下,问题不再出现。

更改之后的代码如下:
<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="MyProject" transaction-type="RESOURCE_LOCAL">
            <class>org.workin.trace.domain.BehaviorPerformance</class>		
            <properties>
			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
			<property name="hibernate.cache.use_query_cache" value="true"/>
			<property name="hibernate.generate_statistics" value="true"/>
			<property name="hibernate.cache.use_second_level_cache" value="true"/>
			<property name="hibernate.cache.provider_configuration_file_resource_path" value="ehcache/ehcache-hibernate-local.xml"/>
			<property name="hibernate.jdbc.fetch_size" value="50"/>
			<property name="hibernate.jdbc.batch_size" value="30"/>
		</properties>
	</persistence-unit>
</persistence>


    错误发生原因: W3C XML架构xsd规范中<xsd:sequence>要求组中的元素以指定的顺序出现在包含元素中,Glassfish在部署时会根据xsd对文件进行验证。而Tomcat中未出现类似问题,原因可能是GlassFish的验证比Tomcat更加严谨。
  
    总结: 在用Eclipse开发时,validation这一项尽量不要禁用,虽然开启它会使得Eclipse速度很慢,但是却能及时提醒你错误信息。
5
5
分享到:
评论

相关推荐

    Glassfish 3.1.2.2 JPA問題整理 EclipseLink 如何更新1

    在本文中,我们将深入探讨与Glassfish 3.1.2.2中JPA问题相关的主题,特别是关于EclipseLink的更新方法。JPA(Java Persistence API)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者能够方便地在...

    Glassfish部署web项目

    - **操作步骤**: 将 `.war` 或 `.ear` 文件放置到 `glassfish/domain/autodeploy` 目录下,Glassfish会在下次启动时自动检测并部署这些文件。 ##### 2. 使用命令行工具 - **部署**: 使用 `asadmin deploy` 命令...

    JPA Entity framework, inside of a Glassfish container

    在Glassfish中,JPA操作通常在容器管理的事务(CMT)下运行,这意味着服务器会自动处理事务的开始、提交和回滚。开发者只需编写业务逻辑,无需显式处理事务控制。 此外,JPA还提供了查询语言JPQL(Java Persistence...

    使用JPA反向工程 Hibernate工程反向

    **JPA反向工程与Hibernate反向工程** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它提供了一种面向对象的方式来操作数据库,使得开发人员可以专注于业务逻辑,而...

    GlassfishV4_JPA__EJB_DEMO

    在`src/main/java`下,我们可以找到按包结构组织的Java类,其中可能有EJB组件、Servlet、JPA实体类以及Spring配置文件。`src/main/resources`可能包含数据库连接配置、日志配置或其他资源文件。 通过这个DEMO,...

    glassfish网络开发服务器

    8. **社区支持**:GlassFish拥有活跃的开发者社区,不断推动其发展和更新,提供各种插件、教程和问题解决方案。 9. **NetBeans集成**:在NetBeans IDE中,可以直接启动、停止和管理GlassFish服务器,方便开发和调试...

    jpa的工程

    在提供的【压缩包子文件的文件名称列表】"JPA工程"中,很可能是包含了一个使用JPA开发的实际项目。这个项目可能包含了配置文件、实体类、Repository接口、Service层和Controller层的代码,展示了如何在Spring Boot等...

    解决 Springboot Jpa 自动创建表 和字段乱序问题[凤凰小哥哥]

    产生原因:因为使用 jpa 自动创建表的时候,采用的是TreeMap的,我们要变成LinkedHashMap ...解决方案:在项目下java文件夹下创建包名为: org.hibernate.cfg ,创建类: PropertyContainer [包名,类名一定要相同哦]

    jpa例子jpajpa

    JPA允许你在Java应用程序中以对象的形式处理数据,这些对象可以自动转换为数据库中的记录。 在JPA的例子中,我们通常会涉及以下几个核心概念: 1. **实体(Entity)**: 实体是与数据库表相对应的Java类。它们通常...

    wegloc10.3部署-hibernate-jpa-2.0-api冲突问题解决

    本文档旨在解决在部署wegloc10.3应用时遇到的`hibernate-jpa-2.0-api`版本冲突问题。此类问题通常出现在使用不同Java持久化框架版本的情况下,特别是当应用程序依赖于特定版本而容器或环境中已存在其他版本时。通过...

    jpa的学习---jpa demo工程

    **JPA(Java Persistence API)学习——JPA Demo工程** JPA是Java平台上的一个标准,用于处理对象关系映射(ORM),它提供了一种在Java应用中管理和持久化对象的方式,简化了数据库操作。本篇文章将围绕JPA的基础...

    GlassFish5.0安装包

    3. 初始化:在命令行中,切换到GlassFish的安装目录下的`bin`子目录,运行相应的初始化脚本。对于Windows,执行`asadmin.bat start-domain`;对于Linux或macOS,使用`./asadmin start-domain`。 二、GlassFish 5.0 ...

    glassfish官方文档

    GlassFish是Oracle公司开源的一款基于Java EE(Enterprise Edition)的应用服务器,它提供了全面的平台来开发、部署和管理企业级应用程序。这份“glassfish官方文档”包含了关于GlassFish服务器的管理和开发两个主要...

    glassfish-3.1.2.2.zip

    在Glassfish 3.1.2.2中,开发者可以利用JPA 2.0来处理数据库交互,这不仅包括对实体的定义、查询优化,还支持了多对多关联、延迟加载等高级特性。JSF 2.0的引入,则让UI开发变得更加直观和高效,其组件模型和Ajax...

    glassfish-ose-4.0 白皮书

    9. **社区支持**:GlassFish拥有活跃的开源社区,开发者可以在这里获取帮助、报告问题,参与到项目的改进中。 10. **文档齐全**:白皮书中的“docs”部分包含了详细的开发者指南、管理员手册、API参考等,为学习和...

    openjpa范例及实例工程

    OpenJPA 中使用实体标识缓存机制解决这个问题。默认情况下,当应用程序第一次获取实体标识时,OpenJPA 框架从数据库中一次性获取 50 个连续的实体标识缓存起来,当下一次应用程序需要获取实体标识时,OpenJPA 将首先...

    JPA源文件/jpa学习

    JPA是Java EE和Java SE环境中的一种ORM(Object-Relational Mapping)解决方案,旨在替代Hibernate等第三方库,提供更加标准化的持久化框架。 **JPA规范**定义了应用程序与数据库交互的一组接口和API,包括实体...

    SpringBoot整合JPA实现自动创建数据库表自动建表,JPA逆向生成数据库表.zip

    SpringBoot整合JPA实现自动创建数据库表自动建表,JPA逆向生成数据库表 运行环境 jdk8+tomcat9+mysql+IntelliJ IDEA+maven 项目技术(必填) springboot+jpa 数据库文件(可选) 新建一个test的数据库即可,表在...

    NetBeans IDE and GlassFish developing demo

    在"hello-simple-glassfish"这个压缩包中,可能包含了一个简单的示例项目,用于演示如何在NetBeans IDE中创建并部署一个基于GlassFish的Web服务。通过分析这个项目,开发者可以学习到具体的代码实现、配置文件设置...

    解决网上应用厅部署在was上jar包冲突问题

    ### 解决网上应用厅部署在WAS上JAR包冲突问题 #### 背景介绍 在企业级应用开发与部署的过程中,经常会遇到各种技术挑战,其中之一就是在WebSphere Application Server (WAS) 上部署应用程序时遇到的JAR包冲突问题。...

Global site tag (gtag.js) - Google Analytics