You are viewing a plain text version of this content. The canonical link for it is here.
Posted to muse-dev@ws.apache.org by rl...@xecu.net on 2007/09/07 04:57:24 UTC

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 @@
      *
      * {@inheritDoc}
      * <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();
+        }
+    }
+
+    /**
+     *
+     * {@inheritDoc}
+     * <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: muse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-dev-help@ws.apache.org


RE: Persistent subscriptions NPE

Posted by rl...@xecu.net.
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: rlucente@xecu.net [mailto:rlucente@xecu.net]
> Sent: Friday, September 07, 2007 4:57 AM
> To: muse-dev@ws.apache.org
> 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 @@
>       *
>       * {@inheritDoc}
>       * <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();
> +        }
> +    }
> +
> +    /**
> +     *
> +     * {@inheritDoc}
> +     * <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: muse-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: muse-dev-help@ws.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: muse-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: muse-dev-help@ws.apache.org
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: muse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-dev-help@ws.apache.org


RE: Persistent subscriptions NPE

Posted by Ch...@swisscom.com.
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: rlucente@xecu.net [mailto:rlucente@xecu.net] 
Sent: Friday, September 07, 2007 4:57 AM
To: muse-dev@ws.apache.org
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 @@
      *
      * {@inheritDoc}
      * <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();
+        }
+    }
+
+    /**
+     *
+     * {@inheritDoc}
+     * <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: muse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-dev-help@ws.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: muse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-dev-help@ws.apache.org