2010-01-12 63 views
0

我嘗試實例化Hibernate並連接MySQL數據庫時遇到問題(請參閱下面的錯誤消息)。Hibernate在EntityTuplizerFactory.constructTuplizer中失敗並返回NullPointerException?爲什麼?

奇怪的是連接工作正常運行JUnit測試時使用完全相同的hibernate.cfg.xml文件,但它拒絕從Tomcat運行時工作...

我開始江郎才盡。

任何線索或提示在哪裏看?

所致:org.hibernate.HibernateException:無法實例默認的tuplizer [org.hibernate.tuple.entity.DynamicMapEntityTuplizer] 在org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:110 ) 在org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135) 在org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping。(EntityEntityModeToTuplizerMapping.java:69) 在org.hibernate.tuple.entity。 EntityMetamodel(EntityMetamodel.java:323) 在org.hibernate.persister.entity.AbstractEntityPersister。(AbstractEntityPersister.java:456) (org.hibernate.persister.entity.SingleTableEntityPersister。(SingleTableEntityPersister.java:131) at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84) at org.hibernate.impl.SessionFactoryImpl。(SessionFactoryImpl.java :267) 在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 在se.fmt.atlantism.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:16) ... 38更 引起:顯示java.lang.NullPointerException 在org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:107) ...... 47多個

回答

2

我在寫這爲今後的Google和參考。

我已經做了一些調查研究,問題的根源仍然不得而知。但是下面的文章讓我走上了正軌。

http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/

好像在Ubuntu(和Debian)可用的軟件包無法正常工作Tomcat的(至少6版)。相反,我使用以下指南Tomcat安裝:

http://www.ctrip.ufl.edu/tomcat6-debian-lenny-howto

雖然這未必是超值之選安裝似乎有必要得到Tomcat的版本6的運行,而不在Ubuntu和/或Debian的萊尼問題。

+0

兩個指南都使用Tomcat的startup.sh和shutdown.sh腳本來控制Tomcat實例。這對於開發很好,但在生產中,您應該使用jsvc以專用的低特權帳戶運行Tomcat。 您需要在$ CATALINA_HOME/bin/jsvc-src.tar.gz中創建jsvc - 與Tomcat一起發佈的源代碼。 此存檔文件中的Tomcat5.sh提供了一個合適的安裝腳本 - 它需要針對您的jvm/environment進行調整。 Apache的更多細節:http://tomcat.apache.org/tomcat-6.0-doc/setup.html 這隻適用於* nix安裝 - Windows安裝程序神奇地創建一個jsvc服務。 – 2010-04-18 19:07:12

0

這是Tomcat的守護進程的樣子:

 
root  2605 0.0 0.0 16584 376 ?  Ss 15:39 0:00 
    /usr/bin/jsvc -user tomcat6 
-cp /usr/share/java/commons-daemon.jar:/usr/share/tomcat6/bin/bootstrap.jar 
-outfile SYSLOG -errfile SYSLOG -pidfile /var/run/tomcat6.pid 
-Djava.awt.headless=true -Xmx128M 
-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed 
-Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 
-Djava.io.tmpdir=/tmp/tomcat6-temp -Djava.security.manager 
-Djava.security.policy=/var/lib/tomcat6/work/catalina.policy 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties 
org.apache.catalina.startup.Bootstrap 

這是使用Sysdeo的Tomcat的啓動器插件在Eclipse從運行時Tomcat進程的外觀:
(這一項實際工作)

 
jzaruba 2655 19.7 4.5 358304 46152 ?  Sl 15:43 0:01 
/usr/lib/jvm/java-6-sun-1.6.0.15/bin/java 
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:37377 
-Dcatalina.home=/usr/share/tomcat6 
-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed 
-Dcatalina.base=/var/lib/tomcat6 -Djava.io.tmpdir=/var/lib/tomcat6/temp 
-Dfile.encoding=UTF-8 -classpath 
/usr/share/tomcat6/bin/bootstrap.jar:/usr/lib/jvm/java-6-sun-1.6.0.15/lib/tools.jar 
org.apache.catalina.startup.Bootstrap start 

工作一個(Eclipse的推出)是用java-6-太陽1.6.0.15,我是Windows用戶,所以我不知道如何判斷哪些JRE用於/ usr/lib中/的jsvc(查看運行它雖然),但我的猜測是它是一些OpenJDK的......這可能是差異?

更新:可能的jsvc使用相同的JRE Sysdeo的Tomcat的啓動確實

+0

我正在使用java-6-sun-1.6.0.15 jdk,所以我懷疑Java的版本是否會受到指責。 – 2010-01-21 08:18:08

1

在我的情況下,通過在我的pom.xml中切換<依賴項/ >順序來解決此錯誤。當hibernate(3.2.7.ga)出現在hibernate-annotations(3.4.0.GA)之前時,會發生此錯誤。相反,它工作正常。甚至在scope = compile的情況下也是如此。

我猜你需要調整你的類路徑,除了(假設你已經在WEB-INF/lib中刪除了兩個jar),它應該按照正確的順序進行alpha排序。但是,也許這會給某人提示如何前進。

+0

聽起來很有趣。一旦我有一些時間花在這個問題上,我會再看看它。 – 2010-03-29 10:33:12

1

在我的情況下,這是一個簡單的錯誤 - 配置文件* .hbm.xml有一個映射對象沒有的屬性!我還聽說當你拼錯get/set函數時出現這種錯誤的情況 - 與我的情況非常相似。

+0

感謝您的輸入。我不認爲這是* .hbm.xml文件出於幾個不同原因的問題;但我想這個問題有很多根源和原因。 – 2010-03-31 10:50:50

相關問題