Subscribers are not persistent.

 

I have looked at the slide code and I have corrected it :

 

In the file NotificationTrigger.java, I have added : writer.close();

 

private void saveSubscribers() {

            if ( filename != null ) {

                        synchronized ( subscribers ) {

                                   try {

                                               FileOutputStream
outputStream = new FileOutputStream(filename);

                                               XMLOutputStreamWriter
writer = new XMLOutputStreamWriter(outputStream);

 
writer.writeXMLDeclaration();

 
writer.writeStartTag(XMLWriter.createStartTag(E_SUBSCRIPTIONS));

                                               for ( Iterator i =
subscribers.iterator(); i.hasNext(); ) {

                                                   

                                                           Subscriber
subscriber = (Subscriber)i.next();

 
System.out.println("OK"+ subscriber.getUri());

 
writer.writeStartTag(XMLWriter.createStartTag(E_SUBSCRIPTION, new
String[][] { 

 
{ A_ID, String.valueOf(subscriber.getId()) } }));

 
writer.writeElementWithPCData(XMLWriter.createStartTag(E_URI),
XMLEncode.xmlEncodeText(subscriber.getUri()),
XMLWriter.createEndTag(E_URI)); 

 
writer.writeElementWithPCData(XMLWriter.createStartTag(E_DEPTH),
String.valueOf(subscriber.getDepth()), XMLWriter.createEndTag(E_DEPTH));


 
writer.writeElementWithPCData(XMLWriter.createStartTag(E_CALLBACK),
XMLEncode.xmlEncodeText(subscriber.getCallback()),
XMLWriter.createEndTag(E_CALLBACK)); 

 
writer.writeElementWithPCData(XMLWriter.createStartTag(E_NOTIFICATION_TY
PE), XMLEncode.xmlEncodeText(subscriber.getNotificationType()),
XMLWriter.createEndTag(E_NOTIFICATION_TYPE)); 

 
writer.writeElementWithPCData(XMLWriter.createStartTag(E_NOTIFICATION_DE
LAY), String.valueOf(subscriber.getNotificationDelay()),
XMLWriter.createEndTag(E_NOTIFICATION_DELAY)); 

 
writer.writeElementWithPCData(XMLWriter.createStartTag(E_SUBSCRIPTION_EN
D), String.valueOf(subscriber.getSubscriptionEnd()),
XMLWriter.createEndTag(E_SUBSCRIPTION_END)); 

 
writer.writeEndTag(XMLWriter.createEndTag(E_SUBSCRIPTION)); 

                                               }

 
writer.writeEndTag(XMLWriter.createEndTag(E_SUBSCRIPTIONS));

                                               writer.close();

                                               outputStream.close();

                                   } catch ( Exception e) {

                                               Domain.log(e);

                                   }

                        }

            }

    }

 

 

But I don't understand how it is able to load my subscriber at next
launch.

Example of subscribers.xml :

 

<?xml version="1.0" encoding="UTF-8"?>

<subscriptions>

  <subscription id="1">

    <uri>/files</uri>

    <depth>2147483647</depth>

    <callback>httpu://localhost:4444</callback>

    <notification-type>UPDATE</notification-type>

    <notification-delay>0</notification-delay>

    <subscription-end>1114446870897</subscription-end>

  </subscription>

</subscriptions>

 

I think it uses the callback to get my subscriber but I don't understand
how to do that.

 

 

 

 

Reply via email to