[ 
https://issues.apache.org/jira/browse/JDO-499?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Craig Russell updated JDO-499:
------------------------------

    Attachment: jdo-499.patch

Please review this patch. It wraps the binary compatible callouts to external 
implementations with try-catch to protect against errant implementations.

> JDOImplHelper should catch exceptions in nonBinaryCompatibleGet and 
> nonBinaryCompatibleIs
> -----------------------------------------------------------------------------------------
>
>                 Key: JDO-499
>                 URL: https://issues.apache.org/jira/browse/JDO-499
>             Project: JDO
>          Issue Type: Bug
>          Components: api2, api2-legacy
>    Affects Versions: JDO 2 final
>            Reporter: Craig Russell
>            Assignee: Craig Russell
>            Priority: Minor
>             Fix For: JDO 2 maintenance release 1
>
>         Attachments: jdo-499.patch
>
>
> The code to perform non-binary-compatible state tests should catch and ignore 
> exceptions thrown from registered implementations. This would protect users 
> from errant implementations.
> For example, the following returns the appropriate result if an 
> implementation (not the implementation responsible for the instance) throws 
> an exception.
>     /**
>      * Return an object associated with a non-binary-compatible instance.
>      * Delegate to all registered StateInterrogation instances until
>      * one of them handles the call (returns a non-null answer).
>      * The caller provides the stateless "method object" that does 
>      * the actual call to the StateInterrogation instance.
>      * @param pc the instance whose associated object is needed
>      * @param sibr the method object that delegates to the 
>      * non-binary-compatible implementation
>      * @return the associated object or null if the implementation does not
>      * manage the class of the instance
>      */
>     public Object nonBinaryCompatibleGet(Object pc, 
>             StateInterrogationObjectReturn sibr) {
>         Iterator sit = getStateInterrogationIterator();
>         while (sit.hasNext()) {
>             try {
>                 StateInterrogation si = (StateInterrogation)sit.next();
>                 Object result = sibr.get(pc, si);
>                 if (result != null) return result;
>             } catch (Throwable t) {
>                 // ignore exceptions thrown by non-binary-compatible impls
>             }
>         }
>         return null;
>     }
>     

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to