[Teneo Bug Fix] Problems with ehcache [message #428867] |
Wed, 01 April 2009 10:38 |
Palash Messages: 3 Registered: July 2009 |
Junior Member |
|
|
Hi Martin,
We are using Teneo 0.8. When we enable ehcache, in most cases, we get this
error [this is for 1.0.3]:
java.lang.NullPointerException
at xxx.MyInterceptor.getEntityName(MyInterceptor.java:41)
at
org.hibernate.impl.SessionImpl.guessEntityName(SessionImpl.j ava:1792)
at
org.hibernate.impl.SessionImpl.bestGuessEntityName(SessionIm pl.java:1759)
at
org.eclipse.emf.teneo.hibernate.mapping.econtainer.EContaine rUserType.assemble(EContainerUserType.java:283)
at org.hibernate.type.TypeFactory.assemble(TypeFactory.java:443 )
at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:119)
at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:105)
at
org.hibernate.event.def.DefaultLoadEventListener.assembleCac heEntry(DefaultLoadEventListener.java:587)
at
org.hibernate.event.def.DefaultLoadEventListener.loadFromSec ondLevelCache(DefaultLoadEventListener.java:542)
at
org.hibernate.event.def.DefaultLoadEventListener.doLoad(Defa ultLoadEventListener.java:397)
at
org.hibernate.event.def.DefaultLoadEventListener.load(Defaul tLoadEventListener.java:165)
at
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad (DefaultLoadEventListener.java:207)
at
org.hibernate.event.def.DefaultLoadEventListener.onLoad(Defa ultLoadEventListener.java:126)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905 )
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java :873)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.j ava:590)
at org.hibernate.type.ManyToOneType.assemble(ManyToOneType.java :219)
at org.hibernate.type.TypeFactory.assemble(TypeFactory.java:443 )
at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:119)
at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:105)
at
org.hibernate.event.def.DefaultLoadEventListener.assembleCac heEntry(DefaultLoadEventListener.java:587)
at
org.hibernate.event.def.DefaultLoadEventListener.loadFromSec ondLevelCache(DefaultLoadEventListener.java:542)
at
org.hibernate.event.def.DefaultLoadEventListener.doLoad(Defa ultLoadEventListener.java:397)
at
org.hibernate.event.def.DefaultLoadEventListener.load(Defaul tLoadEventListener.java:165)
at
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad (DefaultLoadEventListener.java:207)
at
org.hibernate.event.def.DefaultLoadEventListener.onLoad(Defa ultLoadEventListener.java:126)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905 )
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java :873)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.j ava:590)
at org.hibernate.type.EntityType.resolve(EntityType.java:412)
at
org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseL oad.java:139)
at
org.hibernate.loader.Loader.initializeEntitiesAndCollections (Loader.java:877)
at org.hibernate.loader.Loader.doQuery(Loader.java:752)
at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyColle ctions(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java :2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:4 01)
at
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslat orImpl.java:361)
at
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQuery Plan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
We tried upgrading to 1.0.3. No luck. Then we tried other caching like
hashtable and oscache. No luck again. Finally I looked at
EContainerUserType.assemble(). I observed that there is no null check for
the cached parameter. And that is what causes the trouble. I saw that in
the super class, org.hibernate.type.AbstractType, if cached is null, it
returns null, assuming Hibernate is smart enough to fetch it from the DB.
I did the same thing with EContainerUserType and it worked.
I was wondering if its the correct thing to do, and also, wanted to share
this tip with the wider community. In case you feel that this is fine,
please include it into the next release.
Also, I checked out the sources of release 0.8 from the CVS and after
applying this fix, it has worked for us.
I am attaching the patch with the latest from the CVS.
I have also raised a bug against this:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=270740
--
Thanks,
Palash.
### Eclipse Workspace Patch 1.0
#P org.eclipse.emf.teneo.hibernate
Index:
src/org/eclipse/emf/teneo/hibernate/mapping/econtainer/ECont ainerUserType.java
============================================================ =======
RCS file:
/cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.teneo/plug ins/org.eclipse.emf.teneo.hibernate/src/org/eclipse/emf/tene o/hibernate/mapping/econtainer/EContainerUserType.java,v
retrieving revision 1.10
diff -u -r1.10 EContainerUserType.java
---
src/org/eclipse/emf/teneo/hibernate/mapping/econtainer/ECont ainerUserType.java 28
Jun 2008 22:41:50 -0000 1.10
+++
src/org/eclipse/emf/teneo/hibernate/mapping/econtainer/ECont ainerUserType.java 1
Apr 2009 08:32:00 -0000
@@ -278,6 +278,13 @@
*/
@Override
public Object assemble(Serializable cached, SessionImplementor session,
Object owner) throws HibernateException {
+
+ // palash: fix for ALL our teneo/ehcache woes!!
+ // if cache is null, just return null, without guessing;
hibernate is smart enough to fetch it from the db
+ if (cached == null) {
+ return null;
+ }
+
// already correct
if (!(cached instanceof ContainerPointer)) {
final String entityName = session.bestGuessEntityName(cached);
|
|
|
Re: [Teneo Bug Fix] Problems with ehcache [message #428868 is a reply to message #428867] |
Wed, 01 April 2009 10:43 |
Martin Taal Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Palash,
Thanks for looking at a solution also. I will be doing a new build later this week. Your fix will be in it.
gr. Martin
Palash wrote:
> Hi Martin,
>
> We are using Teneo 0.8. When we enable ehcache, in most cases, we get
> this error [this is for 1.0.3]:
>
> java.lang.NullPointerException
> at xxx.MyInterceptor.getEntityName(MyInterceptor.java:41)
> at org.hibernate.impl.SessionImpl.guessEntityName(SessionImpl.j ava:1792)
> at
> org.hibernate.impl.SessionImpl.bestGuessEntityName(SessionIm pl.java:1759)
> at
> org.eclipse.emf.teneo.hibernate.mapping.econtainer.EContaine rUserType.assemble(EContainerUserType.java:283)
>
> at org.hibernate.type.TypeFactory.assemble(TypeFactory.java:443 )
> at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:119)
> at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:105)
> at
> org.hibernate.event.def.DefaultLoadEventListener.assembleCac heEntry(DefaultLoadEventListener.java:587)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.loadFromSec ondLevelCache(DefaultLoadEventListener.java:542)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.doLoad(Defa ultLoadEventListener.java:397)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.load(Defaul tLoadEventListener.java:165)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad (DefaultLoadEventListener.java:207)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.onLoad(Defa ultLoadEventListener.java:126)
>
> at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905 )
> at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java :873)
> at org.hibernate.type.EntityType.resolveIdentifier(EntityType.j ava:590)
> at org.hibernate.type.ManyToOneType.assemble(ManyToOneType.java :219)
> at org.hibernate.type.TypeFactory.assemble(TypeFactory.java:443 )
> at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:119)
> at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.jav a:105)
> at
> org.hibernate.event.def.DefaultLoadEventListener.assembleCac heEntry(DefaultLoadEventListener.java:587)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.loadFromSec ondLevelCache(DefaultLoadEventListener.java:542)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.doLoad(Defa ultLoadEventListener.java:397)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.load(Defaul tLoadEventListener.java:165)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad (DefaultLoadEventListener.java:207)
>
> at
> org.hibernate.event.def.DefaultLoadEventListener.onLoad(Defa ultLoadEventListener.java:126)
>
> at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905 )
> at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java :873)
> at org.hibernate.type.EntityType.resolveIdentifier(EntityType.j ava:590)
> at org.hibernate.type.EntityType.resolve(EntityType.java:412)
> at
> org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseL oad.java:139)
> at
> org.hibernate.loader.Loader.initializeEntitiesAndCollections (Loader.java:877)
>
> at org.hibernate.loader.Loader.doQuery(Loader.java:752)
> at
> org.hibernate.loader.Loader.doQueryAndInitializeNonLazyColle ctions(Loader.java:259)
>
> at org.hibernate.loader.Loader.doList(Loader.java:2228)
> at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java :2125)
> at org.hibernate.loader.Loader.list(Loader.java:2120)
> at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:4 01)
> at
> org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslat orImpl.java:361)
>
> at
> org.hibernate.engine.query.HQLQueryPlan.performList(HQLQuery Plan.java:196)
> at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
> at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
>
> We tried upgrading to 1.0.3. No luck. Then we tried other caching like
> hashtable and oscache. No luck again. Finally I looked at
> EContainerUserType.assemble(). I observed that there is no null check
> for the cached parameter. And that is what causes the trouble. I saw
> that in the super class, org.hibernate.type.AbstractType, if cached is
> null, it returns null, assuming Hibernate is smart enough to fetch it
> from the DB. I did the same thing with EContainerUserType and it worked.
>
> I was wondering if its the correct thing to do, and also, wanted to
> share this tip with the wider community. In case you feel that this is
> fine, please include it into the next release.
>
> Also, I checked out the sources of release 0.8 from the CVS and after
> applying this fix, it has worked for us.
>
> I am attaching the patch with the latest from the CVS.
>
> I have also raised a bug against this:
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=270740
>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Cell: +31 (0)6 288 48 943
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Powered by
FUDForum. Page generated in 0.03255 seconds