I'll open up a bug and post the patch below. > hiya, > > I think its a bug, I did a work around for this in a different way for > persistent subscriptions and restarts but this is a far cleaner > solution. (I made a post to muse-users on it). > > cheers, > Chris > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > Sent: Friday, September 07, 2007 4:57 AM > To: [email protected] > Subject: Persistent subscriptions NPE > > I'm getting NPE's when reloading persistent subscriptions. > RouterFilePersistence.reloadResource initializes the resource BEFORE > adding the resource to the epr->resource map in the resource manager. > The issue is that initializing my NotificationProducer based resource > precedes initializing the SubscriptionManager. initializeCompleted is > called and the resource manager expects to find the SubscriptionManager > resource, but no such luck and an NPE occurs. > > The following patch to RouterFilePersistence.java (for muse 2.2.0) seems > to fix this: > > Index: > modules/muse-core/src/org/apache/muse/core/routing/RouterFilePersistence > .java > ==================================================================--- > modules/muse-core/src/org/apache/muse/core/routing/RouterFilePersistence > .java > (revision 573048) > +++ > modules/muse-core/src/org/apache/muse/core/routing/RouterFilePersistence > .java > (working copy) > @@ -22,6 +22,7 @@ > > import java.io.File; > import java.io.IOException; > +import java.util.Iterator; > > import org.w3c.dom.Document; > import org.w3c.dom.Element; > @@ -94,6 +95,29 @@ > * > * [EMAIL PROTECTED] > * <br><br> > + * Initialize the resources AFTER loading and registering with the > Resource > + * Manager so that initialization with inter-resource dependencies > can > + * succeed. > + * > + */ > + public void reload() throws SoapFault > + { > + super.reload(); > + > + // initialize the resources AFTER adding them to the resource > manager's > + // epr->resource map > + ResourceManager manager = getResourceManager(); > + Iterator resourceIter = manager.getResourceEPRs(); > + while (resourceIter.hasNext()) { > + EndpointReference epr (EndpointReference)resourceIter.next(); > + manager.getResource(epr).initialize(); > + } > + } > + > + /** > + * > + * [EMAIL PROTECTED] > + * <br><br> > * This implementation treats the XML fragment as a > wsa:ReferenceParameters > * element. It creates an EPR for the given resource type (context > path) > * and then adds the reference parameters to it. Finally, it > creates an @@ -138,9 +162,8 @@ > resource.setEndpointReference(epr); > > // > - // continue initialization/registration > + // continue registration > // > - resource.initialize(); > manager.addResource(epr, resource); > > return resource; > > Essentially, the patch loads all resources and adds them to the resource > manager's epr->resource map. Then, all resources are initialized. > > Am I missing something here? Should file-based persistence work without > the above patch or is this a legitimate bug within muse? > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
