Checking out the patch right now... Hope to commit it shortly if it passes
all tests:)

On Thu, Jul 5, 2012 at 3:30 PM, Holly Cummins (JIRA) <[email protected]>wrote:

>
>     [
> https://issues.apache.org/jira/browse/ARIES-832?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13407166#comment-13407166]
>
> Holly Cummins commented on ARIES-832:
> -------------------------------------
>
> Brian, do you mean that load time enhancement has never worked at all,
> which is clearly a stop-ship, or just never worked in the blog tests?
>
> > JPA load-time enhamcement fails for a WAB
> > -----------------------------------------
> >
> >                 Key: ARIES-832
> >                 URL: https://issues.apache.org/jira/browse/ARIES-832
> >             Project: Aries
> >          Issue Type: Bug
> >          Components: JPA
> >         Environment: I am using Equinox
> org.eclipse.osgi_3.7.2.v20120110-1415.jar with Apache Aries revision 1187719
> >            Reporter: Brian DePradine
> >         Attachments: PATCH2.TXT, PATCH3.TXT, latest_patch.txt,
> patch.txt, patch_with_test_changes.txt
> >
> >
> > I was running a test with a WAB that uses JPA, and I found that the JPA
> entity contained in the WAB was not being enhanced. The reason was due to
> the following:
> > 187  polo  WARN   [Blueprint Extender: 1] openjpa.Runtime - An error
> occurred while registering a ClassTransformer with
> org.apache.aries.jpa.container.unit.impl.persistenceunitinfoi...@69b169b1.the 
> error is logged along with this warning. Load-time class transformation
> will not be available.
> > java.lang.IllegalStateException: The bundle
> com.ibm.osgi.jpa.warfileAdditions/1.0.0 is not started.
> >       at
> org.apache.aries.jpa.container.unit.impl.JndiDataSource.getDs(JndiDataSource.java:61)
> >       at
> org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getConnection(DelayedLookupDataSource.java:36)
> >       at
> org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:108)
> >       at
> org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
> >       at
> org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
> >       at
> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
> >       at
> org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
> >       at
> org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
> >       at
> org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
> >       at
> org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
> >       at
> org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
> >       at
> org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
> >       at
> org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:963)
> >       at
> org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:954)
> >       at
> org.apache.openjpa.persistence.PersistenceProviderImpl$ClassTransformerImpl.<init>(PersistenceProviderImpl.java:281)
> >       at
> org.apache.openjpa.persistence.PersistenceProviderImpl$ClassTransformerImpl.<init>(PersistenceProviderImpl.java:265)
> >       at
> org.apache.openjpa.persistence.PersistenceProviderImpl.createContainerEntityManagerFactory(PersistenceProviderImpl.java:168)
> >       at
> org.apache.openjpa.persistence.PersistenceProviderImpl.createContainerEntityManagerFactory(PersistenceProviderImpl.java:62)
> >       at
> org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.createEntityManagerFactories(EntityManagerFactoryManager.java:329)
> >       at
> org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.bundleStateChange(EntityManagerFactoryManager.java:175)
> >       at
> org.apache.aries.jpa.container.impl.PersistenceBundleManager.setupManager(PersistenceBundleManager.java:394)
> >       at
> org.apache.aries.jpa.container.impl.PersistenceBundleManager.addingBundle(PersistenceBundleManager.java:154)
> >       at
> org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:482)
> >       at
> org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:1)
> >       at
> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:262)
> >       at
> org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:185)
> >       at org.osgi.util.tracker.BundleTracker.open(BundleTracker.java:163)
> >         ...............................
> > It turns out that the IllegalStateException is thrown because the WAB is
> in the RESOLVED state when a request for the BundleContext is made against
> it. The javadoc says "If this bundle is not in the STARTING, ACTIVE, or
> STOPPING states or this bundle is a fragment bundle, then this bundle has
> no valid BundleContext. This method will return null if this bundle has no
> valid BundleContext."
> > Looking at the code in EntityManagerFactoryManager.bundleStateChange() I
> can see the following:
> >   public synchronized void bundleStateChange() throws
> InvalidPersistenceUnitException {
> >
> >     switch(bundle.getState()) {
> >       case Bundle.RESOLVED :
> >         //If we are Resolved as a result of having stopped
> >         //and missed the STOPPING event we need to unregister
> >         unregisterEntityManagerFactories();
> >         //Create the EMF objects if necessary
> >         createEntityManagerFactories();
> >         break;
> >         //Starting and active both require EMFs to be registered
> >       case Bundle.STARTING :
> >       case Bundle.ACTIVE :
> >         if(tracker == null) {
> >           tracker = new ServiceTracker(bundle.getBundleContext(),
> >               "org.osgi.service.jdbc.DataSourceFactory", this);
> >           tracker.open();
> >         }
> >         registerEntityManagerFactories();
> >         break;
> >         //Stopping means the EMFs should
> >       case Bundle.STOPPING :
> >         //If we're stopping we no longer need to be quiescing
> >         quiesce = false;
> >         if(tracker != null) {
> >           tracker.close();
> >           tracker = null;
> >         }
> >         unregisterEntityManagerFactories();
> >         break;
> >       case Bundle.INSTALLED :
> >         //Destroy everything
> >         destroyEntityManagerFactories();
> >     }
> >   }
> > This clearly shows that createEntityManagerFactories() gets driven when
> the WAB is in the RESOLVED state which results in the exception above. It
> looks like this should affect more than just WABs, but I have only hit this
> issue with WABs so far.
>
> --
> This message is automatically generated by JIRA.
> If you think it was sent incorrectly, please contact your JIRA
> administrators:
> https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
> For more information on JIRA, see: http://www.atlassian.com/software/jira
>
>
>


-- 
Thanks
Emily
=================
Emily Jiang
[email protected]

Reply via email to