Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » [Teneo Bug Fix] Problems with ehcache
[Teneo Bug Fix] Problems with ehcache [message #428867] Wed, 01 April 2009 10:38 Go to next message
Palash is currently offline PalashFriend
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 Go to previous message
Martin Taal is currently offline Martin TaalFriend
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
Previous Topic:Trying to build containment vs references example
Next Topic:Generate 'final' operation parameters (EParameter)
Goto Forum:
  


Current Time: Mon May 06 17:54:06 GMT 2024

Powered by FUDForum. Page generated in 0.03255 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top