2014-08-31 58 views
1

我正在遷移我的應用程序,在GlassFish 3.0.1上運行良好,到Glassfish 4.0以及更新Hibernate以及從3.6到4.0。經過大量的遷移問題,我被困在這一個:休眠4.3.6 Glassfish 4用戶類型問題

該應用程序有幾個org.hibernate.usertype.UserType實現。我知道棄用nullSafeGetnullSafeSet。已經糾正所有這些,所以,代碼通常編譯。部署問題出現了。

上部署(在開始的時候),我發現了以下異常:

2014-08-31T12:43:22.312-0300|SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method 
2014-08-31T12:43:22.313-0300|SEVERE: javax.persistence.PersistenceException: [PersistenceUnit: FOOEJB3DS] Unable to build Hibernate SessionFactory 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1225) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:119) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:853) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) 
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67) 
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:199) 
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:107) 
    at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:223) 
    at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510) 
    at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:230) 
    at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:922) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:431) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) 
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:356) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674) 
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) 
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) 
    at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: org.hibernate.MappingException: Could not determine type for: br.com.MeasureUnitType, at table: item_itemcodes, for columns: [org.hibernate.mapping.Column(measureunit)] 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336) 
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310) 
    at org.hibernate.mapping.Property.isValid(Property.java:241) 
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:496) 
    at org.hibernate.mapping.RootClass.validate(RootClass.java:270) 
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1358) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 
    ... 46 more 

分析初始例外Caused by: org.hibernate.MappingException: Could not determine type for: br.com.foo.MeasureUnitType, at table: item_itemcodes, for columns: [org.hibernate.mapping.Column(measureunit)]我可以想什麼是錯的我UserTypes。所有的定義都和以前的GlassFish + Hibernate一樣。

無法找到與此相關的任何遷移步驟(除了前面提到的方法)。可以閱讀Hibernate文檔TypeCustomTypeDoc關於自定義類型的註冊。但是,如果我有這個權利,我只需要註冊,如果我想它是默認的。在我的情況下,我宣佈只使用@TypeDef@Type裏面mey @Entity類。

我的代碼如下:

public class MeasureUnitType implements UserType { 
    ... //Full Interface IMplementation (and working on previous environment) 
} 

我的實體類:

@Entity 
@Table(name = "item_itemcodes") 
@TypeDef(name = "measureUnitType", typeClass = MeasureUnitType.class) 
public class ItemCodeVO extends FOODefaultVO { 
    ... 
    @Type(type = "measureUnitType") 
    private MEASUREUNIT measureunit = null; 
    ... 
} 

真的很感激任何啓迪!

感謝(請隨時糾正我的英語水平,以使其更容易理解)

回答

0

只是爲了不讓它沒有任何回答,我從來沒有發現一個解決這個錯誤。我解決了我的問題,即刪除Hibernate並遷移到內置於Glassfish 4.0中的EclipseLink。

現在差​​不多一年了,只是稍微調整了代碼後(確實很少),它們都正常工作。如果您使用的是Glassfish 4.0,我也會建議遷移。

EclipseLink正在使用100%JPA註釋。在代碼中甚至沒有一個特定的定製。

不是一個解決方案,但希望提示值得訪問。