You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by Gus Heck <gu...@olin.edu> on 2004/01/23 16:35:31 UTC

PATCH for OjbStoreConnector

I posted this to the Users list with the subject: Re: NPE in OjbExtent 
(solved)

Since it seems to have gone unnoticed, I am resubmtting it here. This 
patch fixes what I think is probably a bug in OjbStoreConnecter. 
Basically, OjbStoreConnector operates by grabbing a persistance broker 
when a transaction is begun and sticking it in the instance variable 
broker. When the transaction finnishes  broker is set to null. This  
means that  getBroker returns null if there is no transaction in 
progress, which is very likely to cause null pointer exceptions if a 
transactional action is used outside of a transaction. Unfortunately a 
null pointer exception could mean anything and in my case I temporarily 
came to the conclusion that something was broken in OJB. Only after 
putting the code down for several weeks to work on other projects did I 
notice that I hadn't started a transaction. (I noticed it because I 
finally said to my self, "Ok self, if noone else wants this fixed, I had 
better find a way to fix it and submit a patch". Once I understood how 
OjbStoreConnetor worked it became obvious that no transaction was in 
progress).

I propose org.apache.ojb.jdori.sql.OjbStoreConnector.getBroker() should 
throw a JDOUserException("No Transaction in Progress.")  rather than 
returning null. This would make the nature of the problem much clearer 
than a NullPointerException thrown when the broker instance that was 
returned as null is used.

- Gus

Index: src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java
===================================================================
RCS file: 
/home/cvspublic/db-ojb/src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java,v 

retrieving revision 1.1
diff -u -r1.1 OjbStoreConnector.java
--- src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java   24 Dec 
2002 12:06:01 -0000      1.1
+++ src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java   21 Jan 
2004 20:52:23 -0000
@@ -62,6 +62,8 @@

import com.sun.jdori.Connector;

+import javax.jdo.JDOUserException;
+
/**
 * OjbStoreConnector represents a OJB PB connection
 *
@@ -214,6 +216,9 @@
     */
    public PersistenceBroker getBroker()
    {
+        if (broker == null) {
+            throw new JDOUserException("No transaction in progress.");
+        }
        return broker;
    }



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


Re: PATCH for OjbStoreConnector

Posted by Thomas Mahler <th...@web.de>.
Hi Gus,

sorry I missed your original post on the user list. It's much safer to 
post patches to the dev list as it has less traffic.

I think you are right that it's better to throw an explantory exception 
rather than return null.

So I'll check in your patch asap.

thanks for your patience,
Thomas

Gus Heck wrote:
> I posted this to the Users list with the subject: Re: NPE in OjbExtent 
> (solved)
> 
> Since it seems to have gone unnoticed, I am resubmtting it here. This 
> patch fixes what I think is probably a bug in OjbStoreConnecter. 
> Basically, OjbStoreConnector operates by grabbing a persistance broker 
> when a transaction is begun and sticking it in the instance variable 
> broker. When the transaction finnishes  broker is set to null. This  
> means that  getBroker returns null if there is no transaction in 
> progress, which is very likely to cause null pointer exceptions if a 
> transactional action is used outside of a transaction. Unfortunately a 
> null pointer exception could mean anything and in my case I temporarily 
> came to the conclusion that something was broken in OJB. Only after 
> putting the code down for several weeks to work on other projects did I 
> notice that I hadn't started a transaction. (I noticed it because I 
> finally said to my self, "Ok self, if noone else wants this fixed, I had 
> better find a way to fix it and submit a patch". Once I understood how 
> OjbStoreConnetor worked it became obvious that no transaction was in 
> progress).
> 
> I propose org.apache.ojb.jdori.sql.OjbStoreConnector.getBroker() should 
> throw a JDOUserException("No Transaction in Progress.")  rather than 
> returning null. This would make the nature of the problem much clearer 
> than a NullPointerException thrown when the broker instance that was 
> returned as null is used.
> 
> - Gus
> 
> Index: src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java
> ===================================================================
> RCS file: 
> /home/cvspublic/db-ojb/src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java,v 
> 
> retrieving revision 1.1
> diff -u -r1.1 OjbStoreConnector.java
> --- src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java   24 Dec 
> 2002 12:06:01 -0000      1.1
> +++ src/jdori/org/apache/ojb/jdori/sql/OjbStoreConnector.java   21 Jan 
> 2004 20:52:23 -0000
> @@ -62,6 +62,8 @@
> 
> import com.sun.jdori.Connector;
> 
> +import javax.jdo.JDOUserException;
> +
> /**
> * OjbStoreConnector represents a OJB PB connection
> *
> @@ -214,6 +216,9 @@
>     */
>    public PersistenceBroker getBroker()
>    {
> +        if (broker == null) {
> +            throw new JDOUserException("No transaction in progress.");
> +        }
>        return broker;
>    }
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-dev-help@db.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org