Should be fixed now. JIRA *should* sync up properly. -mike
On Fri, Mar 6, 2009 at 9:38 AM, Michael Dick <[email protected]>wrote: > I didn't think this could be done until Donald mentioned it, but apparently > it can be done [1], [2]. > > [1] http://subversion.tigris.org/faq.html#change-log-msg > [2] http://www.mail-archive.com/[email protected]/msg13378.html > > -mike > > On Fri, Mar 6, 2009 at 7:53 AM, Donald Woods <[email protected]> wrote: > >> Can you update the svn log to refer to OPENJPA-960 instead? >> >> >> -Donald >> >> >> >> [email protected] wrote: >> >>> Author: ppoddar >>> Date: Fri Mar 6 07:08:20 2009 >>> New Revision: 750788 >>> >>> URL: http://svn.apache.org/viewvc?rev=750788&view=rev >>> Log: >>> OPENJPA-966: Support unwrap() for JPA 2.0 >>> >>> Added: >>> >>> >>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/TestUnwrap.java >>> Modified: >>> >>> >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java >>> >>> >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java >>> >>> >>> openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties >>> >>> Added: >>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/TestUnwrap.java >>> URL: >>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/TestUnwrap.java?rev=750788&view=auto >>> >>> ============================================================================== >>> --- >>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/TestUnwrap.java >>> (added) >>> +++ >>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/TestUnwrap.java >>> Fri Mar 6 07:08:20 2009 >>> @@ -0,0 +1,68 @@ >>> +/* >>> + * Licensed to the Apache Software Foundation (ASF) under one >>> + * or more contributor license agreements. See the NOTICE file >>> + * distributed with this work for additional information >>> + * regarding copyright ownership. The ASF licenses this file >>> + * to you under the Apache License, Version 2.0 (the >>> + * "License"); you may not use this file except in compliance >>> + * with the License. You may obtain a copy of the License at >>> + * >>> + * http://www.apache.org/licenses/LICENSE-2.0 >>> + * >>> + * Unless required by applicable law or agreed to in writing, >>> + * software distributed under the License is distributed on an >>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY >>> + * KIND, either express or implied. See the License for the >>> + * specific language governing permissions and limitations >>> + * under the License. >>> + */ >>> +package org.apache.openjpa.persistence; >>> + >>> +import javax.persistence.EntityManager; >>> +import javax.persistence.Query; >>> + >>> +import org.apache.openjpa.kernel.QueryLanguages; >>> +import org.apache.openjpa.persistence.test.SingleEMFTestCase; >>> + >>> +public class TestUnwrap extends SingleEMFTestCase { >>> + + /** >>> + * Tests a query can be unwrapped as an instance of a series of >>> class or + * interface. + */ >>> + public void testValidQueryUnwrap() { >>> + OpenJPAEntityManager em = emf.createEntityManager(); >>> + Query query = em.createQuery(QueryLanguages.LANG_SQL,""); >>> + + Class[] validCasts = new Class[] { >>> + org.apache.openjpa.persistence.OpenJPAQuery.class, >>> + org.apache.openjpa.persistence.OpenJPAQuerySPI.class, >>> + org.apache.openjpa.kernel.DelegatingQuery.class, >>> + org.apache.openjpa.kernel.Query.class, >>> + org.apache.openjpa.kernel.QueryImpl.class >>> + }; >>> + for (Class c : validCasts) { >>> + Object unwrapped = query.unwrap(c); >>> + assertTrue(c.isInstance(unwrapped)); >>> + } >>> + } >>> + >>> + /** >>> + * Tests a EntityManager can be unwrapped as an instance of a series >>> of + * class or interface. + */ >>> + public void testValidEntityManagerUnwrap() { >>> + EntityManager em = emf.createEntityManager(); >>> + + Class[] validCasts = new Class[] { >>> + org.apache.openjpa.persistence.OpenJPAEntityManager.class, >>> + >>> org.apache.openjpa.persistence.OpenJPAEntityManagerSPI.class, >>> + org.apache.openjpa.kernel.DelegatingBroker.class, >>> + org.apache.openjpa.kernel.Broker.class >>> + }; >>> + for (Class c : validCasts) { >>> + Object unwrapped = em.unwrap(c); >>> + assertTrue(c.isInstance(unwrapped)); >>> + } >>> + } >>> +} >>> >>> Modified: >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java >>> URL: >>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=750788&r1=750787&r2=750788&view=diff >>> >>> ============================================================================== >>> --- >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java >>> (original) >>> +++ >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java >>> Fri Mar 6 07:08:20 2009 >>> @@ -1525,8 +1525,14 @@ >>> } >>> public <T> T unwrap(Class<T> cls) { >>> - throw new UnsupportedOperationException( >>> - "JPA 2.0 - Method not yet implemented"); >>> + Object[] delegates = new >>> Object[]{_broker.getInnermostDelegate(), >>> + _broker.getDelegate(), _broker, this}; >>> + for (Object o : delegates) { >>> + if (cls.isInstance(o)) >>> + return (T)o; >>> + } >>> + throw new PersistenceException(_loc.get("unwrap-em-invalid", >>> cls) >>> + .toString(), null, this, false); >>> } >>> >>> Modified: >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java >>> URL: >>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java?rev=750788&r1=750787&r2=750788&view=diff >>> >>> ============================================================================== >>> --- >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java >>> (original) >>> +++ >>> openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java >>> Fri Mar 6 07:08:20 2009 >>> @@ -562,9 +562,24 @@ >>> "JPA 2.0 - Method not yet implemented"); >>> } >>> + /** >>> + * Returns the innermost implementation that is an instance of the >>> given + * class. + * + * @throws PersistenceException if none in >>> the delegate chain is an + * instance of the given class. >>> + * + * @since 2.0.0 >>> + */ >>> public <T> T unwrap(Class<T> cls) { >>> - throw new UnsupportedOperationException( >>> - "JPA 2.0 - Method not yet implemented"); >>> + Object[] delegates = new Object[]{_query.getInnermostDelegate(), >>> + _query.getDelegate(), _query, this}; >>> + for (Object o : delegates) { >>> + if (cls.isInstance(o)) >>> + return (T)o; >>> + } >>> + throw new PersistenceException(_loc.get("unwrap-query-invalid", >>> cls) >>> + .toString(), null, this, false); >>> } >>> // >>> >>> Modified: >>> openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties >>> URL: >>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties?rev=750788&r1=750787&r2=750788&view=diff >>> >>> ============================================================================== >>> --- >>> openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties >>> (original) >>> +++ >>> openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties >>> Fri Mar 6 07:08:20 2009 >>> @@ -164,4 +164,6 @@ >>> version-check-error: An error occurred while attempting to determine the >>> \ >>> version of "{0}". >>> no-result: Query "{0}" selected no result, but expected unique result. >>> -non-unique-result: Query "{0}" selected {1} results, but expected unique >>> result. >>> \ No newline at end of file >>> +non-unique-result: Query "{0}" selected {1} results, but expected unique >>> result. >>> +unwrap-em-invalid: EntityManager can not be unwrapped to an instance of >>> "{0}". >>> +unwrap-query-invalid: Query can not be unwrapped to an instance of >>> "{0}". >>> \ No newline at end of file >>> >>> >>> >>> >
