You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Martin Heyer <Ma...@gmx.de> on 2007/06/08 12:42:41 UTC
Proxy null poiter exception with bad references
Hello Ojb-Users.
I have a Cocoon + OJB installation running. For performance reasons
there is a dynamic Proxy configured with class B.
For example let's have two classes A and B:
Class A: (has no proxy)
- uid
- link -> points to uid of class B
- B (foreign key, holds the instance of B associated with link)
Class B: (has a proxy)
- uid
- data
Everything works fine without the proxy. But when proxy is turned on and
A points to an ID that has no B in the DB, it throws a NPE:
...
Caused by: org.apache.ojb.broker.PersistenceBrokerException: Error
invoking method getIndirectionHandler
at
org.apache.ojb.broker.core.proxy.AbstractIndirectionHandler.invoke(AbstractIndirectionHandler.java:363)
at $Proxy29.getIndirectionHandler(Unknown Source)
... 61 more
Caused by: java.lang.NullPointerException
at
org.apache.ojb.broker.core.proxy.AbstractIndirectionHandler.invoke(AbstractIndirectionHandler.java:347)
... 62 more
Is there a way to catch this? I can load A so it has a proxy instance of
B associated with it. ATM there is no way for me to know if the proxy
will find a real object of B. When I access this reference, it crashes..
I really would appreciate help,
Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Proxy null poiter exception with bad references
Posted by Martin Heyer <Ma...@gmx.de>.
Hi Armin,
thank you for your quick response. Time to build the svn version.
[-snip-]
> This should be fixed in SVN:
> http://www.mail-archive.com/ojb-dev%40db.apache.org/msg03485.html
>
> The only "workaround" I know is to patch method
> AbstractIndirectionHandler.invoke(Object proxy, Method method, Object[]
> args)
[-snap-]
> regards,
> Armin
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Proxy null poiter exception with bad references
Posted by Armin Waibel <ar...@apache.org>.
Hi Martin,
Martin Heyer wrote:
> Hello Ojb-Users.
>
> I have a Cocoon + OJB installation running. For performance reasons
> there is a dynamic Proxy configured with class B. For example let's
> have two classes A and B:
>
> Class A: (has no proxy) - uid - link -> points to uid of class B - B
> (foreign key, holds the instance of B associated with link)
>
> Class B: (has a proxy) - uid - data
>
> Everything works fine without the proxy. But when proxy is turned on
> and A points to an ID that has no B in the DB, it throws a NPE:
>
> ... Caused by: org.apache.ojb.broker.PersistenceBrokerException:
> Error invoking method getIndirectionHandler at
> org.apache.ojb.broker.core.proxy.AbstractIndirectionHandler.invoke(AbstractIndirectionHandler.java:363)
> at $Proxy29.getIndirectionHandler(Unknown Source) ... 61 more Caused
> by: java.lang.NullPointerException at
> org.apache.ojb.broker.core.proxy.AbstractIndirectionHandler.invoke(AbstractIndirectionHandler.java:347)
> ... 62 more
>
> Is there a way to catch this? I can load A so it has a proxy instance
> of B associated with it. ATM there is no way for me to know if the
> proxy will find a real object of B. When I access this reference, it
> crashes..
This should be fixed in SVN:
http://www.mail-archive.com/ojb-dev%40db.apache.org/msg03485.html
The only "workaround" I know is to patch method
AbstractIndirectionHandler.invoke(Object proxy, Method method, Object[]
args)
replace:
return method.invoke(subject, args);
with:
if("toString".equals(methodName) && subject == null)
{
return null;
}
if(subject == null)
{
log.warn("Real object of this proxy object doesn't exist, all
method will return 'null': " + getIdentity());
return null;
}
else
{
return method.invoke(subject, args);
}
OR use your own IndirectionHandler implementation class e.g.
public class IndirectionHandlerCGLIBPatchedImpl extends
IndirectionHandlerCGLIBImpl
{
...
}
and override the invoke-method in same way described above and declare
it in OJB.properties file (IndirectionHandlerClass=...). But in this
case you have use the reflection-API to get access to a private member
"_realSubject" in AbstractIndirectionHandler.
regards,
Armin
>
> I really would appreciate help,
>
> Martin
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org For
> additional commands, e-mail: ojb-user-help@db.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org