arminw      2005/09/26 16:57:44

  Modified:    src/java/org/apache/ojb/broker/core/proxy Tag:
                        OJB_1_0_RELEASE AbstractIndirectionHandler.java
  Log:
  fix NPE in getBroker() method (submitted patch by Steve Clark) + minor code 
cleanup
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.3   +20 -23    
db-ojb/src/java/org/apache/ojb/broker/core/proxy/AbstractIndirectionHandler.java
  
  Index: AbstractIndirectionHandler.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/proxy/AbstractIndirectionHandler.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- AbstractIndirectionHandler.java   17 Aug 2005 21:19:39 -0000      1.1.2.2
  +++ AbstractIndirectionHandler.java   26 Sep 2005 23:57:44 -0000      1.1.2.3
  @@ -22,7 +22,6 @@
   import org.apache.ojb.broker.OJBRuntimeException;
   import org.apache.ojb.broker.PBFactoryException;
   import org.apache.ojb.broker.PBKey;
  -import org.apache.ojb.broker.PersistenceBroker;
   import org.apache.ojb.broker.PersistenceBrokerException;
   import org.apache.ojb.broker.PersistenceBrokerFactory;
   import org.apache.ojb.broker.PersistenceBrokerInternal;
  @@ -49,13 +48,6 @@
       private Identity _id = null;
       /** The materialization listeners */
       private transient ArrayList _listeners;
  -    /*
  -    arminw:
  -    only close broker instance if we get it from PBF, do
  -    not close if we obtain from PBThreadMapping
  -    TODO: Find a better solution
  -    */
  -    private boolean _needsClose;
   
        /**
         * Creates a new indirection handler for the indicated object.
  @@ -214,11 +206,9 @@
                        if (_broker == null)
                        {
                                _broker = (PersistenceBrokerInternal) 
PersistenceBrokerFactory.createPersistenceBroker(getBrokerKey());
  -                             // TODO: Better way?
  -                             _needsClose = true;
  -                             broker = _broker;
                        }
  -             }
  +            broker = _broker;
  +        }
                return broker;
        }
   
  @@ -227,10 +217,14 @@
         */
        protected void releaseBroker()
        {
  -             if (_broker != null && _needsClose)
  +             /*
  +        arminw:
  +        only close broker instance if we get it from PBF, this
  +        is the case when _broker is not null
  +        */
  +        if (_broker != null)
                {
  -                     _needsClose = false;
  -                     _broker.close();
  +                     if(!_broker.isClosed()) _broker.close();
                        _broker = null;
                }
        }
  @@ -294,7 +288,7 @@
         */
        public Object invoke(Object proxy, Method method, Object[] args)
        {
  -             Object subject = null;
  +             Object subject;
                String methodName = method.getName();
   
                try
  @@ -358,9 +352,15 @@
                        // otherwise equals may return false.
                        if ("equals".equals(methodName) && args[0] != null)
                        {
  -                             Object otherObj = 
getBroker().getProxyFactory().getRealObject(args[0]);
  -                             args[0] = otherObj;
  -                     }
  +                try
  +                {
  +                    args[0] = 
getBroker().getProxyFactory().getRealObject(args[0]);
  +                }
  +                finally
  +                {
  +                    releaseBroker();
  +                }
  +            }
   
                        if ("getIndirectionHandler".equals(methodName) && 
args[0] != null)
                        {
  @@ -417,12 +417,9 @@
         */
        protected synchronized Object materializeSubject() throws 
PersistenceBrokerException
        {
  -             PersistenceBroker broker = getBroker();
  -
                try
                {
  -                     Object realSubject = broker.getObjectByIdentity(_id);
  -
  +                     Object realSubject = 
getBroker().getObjectByIdentity(_id);
                        if (realSubject == null)
                        {
                                
LoggerFactory.getLogger(IndirectionHandler.class).warn(
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to