2017-06-15 75 views
0

enter image description here我有一个在JBOSS AS 6.1中工作的EAR项目(JSF/RICH FACES,JPA 2.0),我必须迁移到JBOSS EAP 7.0。在部署时,我在创建持久性单元期间遇到以下错误。JBOSS eap 7.0无法在JPA查询中找到javax.faces.model.SelectItem类

**"[PersistenceUnit: changecdb] Unable to build Hibernate SessionFactory 
    Caused by: javax.persistence.PersistenceException: [PersistenceUnit: changecdb] Unable to build Hibernate SessionFactory 
    Caused by: org.hibernate.HibernateException: Errors in named queries: getSubReports, getAllReports"}}}} "** 

该日志显示以下错误:

**"ERROR [org.hibernate.internal.SessionFactoryImpl] (ServerService Thread Pool -- 101) HHH000177: Error in named query: getSubReports: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate class [javax.faces.model.SelectItem] [select new javax.faces.model.SelectItem(r.id,r.name) from com.centurylink.changecejb.entity.Report r where r.id<>? order by r.name asc] 
     at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) 
"** 

下面是源文件,其中包含命名查询:

package com.centurylink.changecejb.entity; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.NamedQuery; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Table; 

import javax.persistence.NamedQueries; 

@SequenceGenerator(name="reportSequence",sequenceName="rep_seq") 
@Entity 
@NamedQueries({@NamedQuery(name="getAllCustomReports",query="select new com.centurylink.changecejb.bean.SelectBean(r.id,r.name) from Report r order by r.name asc") 
,@NamedQuery(name="getCustomReportForAId",query="from Report r where r.id=? ") 
,@NamedQuery(name="getSubReports",query="select new javax.faces.model.SelectItem(r.id,r.name) from Report r where r.id<>? order by r.name asc"), 
@NamedQuery(name="getAllReports",query="select new javax.faces.model.SelectItem(r.id,r.name) from Report r order by r.name asc"), 
@NamedQuery(name="updateCustomReport",query="update Report r set r.name=:name where r.id=:id") 

,@NamedQuery(name="deleteCustomReport",query="delete Report report where report.id=:id")}) 
@Table(name="report_table") 
public class Report { 
    private String filename; 
    private String name; 
    @Id 
    @GeneratedValue(generator="reportSequence",strategy=GenerationType.SEQUENCE) 
    private int id; 
public String getFilename() { 
     return filename; 
    } 
    public void setFilename(String filename) { 
     this.filename = filename; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

} 

我不包括JSF API和实现,我试图包括在我的lib文件夹中,但仍然得到相同的错误。 请帮助

UPDATE:

下面是我的图书馆名单:

common-annotations.jar 
commons-beanutils.jar 
commons-collections.jar 
commons-digester.jar 
commons-logging.jar 
cssparser-0.9.5.jar 
guava-10.0.1.jar 
guava-gwt-10.0.1.jar 
jsonplugin-0.32.jar 
jstl.jar 
poi-3.6-20091214.jar 
richfaces-components-api-4.2.0.Final.jar 
richfaces-components-ui-4.2.0.Final.jar 
richfaces-core-api-4.2.0.Final.jar 
richfaces-core-impl-4.2.0.Final.jar 
sac-1.3.jar 
standard.jar 

下面是我的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="changecdb" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:jboss/datasources/changec</jta-data-source> 
     <class>com.centurylink.changecejb.entity.Report</class> 

    </persistence-unit> 
</persistence> 

我想知道是否是因为EAP 7.0具有Hibernate 5.0,其中AS6.1具有Hibernate 3.6,和/或JSF 2.2对JSF 1.2

更新: 关于从加布里埃尔的回答中得到答案,我搜查了EAP 7图书馆,发现有一半的图书馆已经提供。我从我的LIB中删除了已经由EAP 7提供的库,但仍然收到相同的错误。 出于某种原因,HIBERNATE 5.0是不包加载类 javax.faces.model.SelectItem

我验证类中下jaxax的EAP 7.0库之一存在/面向模块jboss- JSF的api_2.2_spec-2.2.12.redhat-1.jar

下面是我目前的lib文件夹的内容:

commons-digester.jar 
commons-logging.jar 
cssparser-0.9.5.jar 
jsonplugin-0.32.jar 
poi-3.6-20091214.jar 
richfaces-components-api-4.2.0.Final.jar 
richfaces-components-ui-4.2.0.Final.jar 
richfaces-core-api-4.2.0.Final.jar 
richfaces-core-impl-4.2.0.Final.jar 
sac-1.3.jar 

作为一种变通方法,我想提供我自己的JSF(1.2)作为以及Hibernate(3。 6)库,并在standalone.xml中禁用EAP。

欢迎任何其他想法/建议。

回答

0

它可能是一个类路径相关的问题,可能是同一类的两个版本加载。 检查您是否在服务器提供的战争中包含了一个jar。 你可以添加你的库设置?

我看到您拥有平台提供的jstl.jar和standard.jar。不知道该罐子是否包含有问题的课程,但无论如何,你需要删除它们。

UPDATE

据我所知,JBoss的EAP应JEE6柔顺的,因此应该使用JSF 2.0,并迁移到JBoss EAP(JEE7兼容JSF 2.2)应该是无痛的。

但您指出您正在使用JSF 1.2,我猜你正在使用JBoss EAP 6中的兼容模式,如blog中所述。

似乎Wildfly/JBoss EAP 7不再支持JSF 1.2,请查看this page了解如何添加自定义JSF版本的说明。

+0

删除了由EAP提供的一些罐子,包括您提到的罐子。仍然有相同的错误。检查更新的帖子。 – user2014600

+0

我认为你误解了AS 6.1作为EAP 6.0。我试图从(社区版本)AS 6.1迁移到EAP 7.0,因此它使用的是JSF 1.2。我只是删除了与JSF相关的所有jar,但是一些如何不被namedquery加载。我想我应该首先测试一个JSF hello world,以确保它读取EAP 7.0提供的JSF库。 – user2014600

+0

您是对的,我误读了。您需要提供您的自定义JSF版本。 –