You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ma...@apache.org on 2006/12/12 11:18:45 UTC

svn commit: r486084 - in /incubator/qpid/trunk/qpid/java/client/example: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/qpid/ src/main/java/org/apache/qpid/example/ src/main/java/org/apache/qpid/e...

Author: marnie
Date: Tue Dec 12 02:18:43 2006
New Revision: 486084

URL: http://svn.apache.org/viewvc?view=rev&rev=486084
Log:
Re-introduced example classes

Added:
    incubator/qpid/trunk/qpid/java/client/example/
    incubator/qpid/trunk/qpid/java/client/example/pom.xml   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/
    incubator/qpid/trunk/qpid/java/client/example/src/main/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/log4j.xml   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageDispatcher.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageFactory.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MessageFactoryException.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorMessageDispatcher.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorPublisher.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/Publisher.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/UndeliveredMessageException.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ConnectionException.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ContextException.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/FileUtils.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/InitialContextHelper.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/Statics.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/example.properties   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriber.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriptionWrapper.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/Subscriber.java   (with props)
    incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/SubscriptionWrapper.java   (with props)

Added: incubator/qpid/trunk/qpid/java/client/example/pom.xml
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/pom.xml?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/pom.xml (added)
+++ incubator/qpid/trunk/qpid/java/client/example/pom.xml Tue Dec 12 02:18:43 2006
@@ -0,0 +1,111 @@
+<!--
+    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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.qpid</groupId>
+    <artifactId>qpid-example</artifactId>
+    <packaging>jar</packaging>
+    <version>1.0-incubating-M2-SNAPSHOT</version>
+    <name>Qpid Example</name>
+    <url>http://cwiki.apache.org/confluence/display/qpid</url>
+
+    <parent>
+        <groupId>org.apache.qpid</groupId>
+        <artifactId>qpid</artifactId>
+        <version>1.0-incubating-M2-SNAPSHOT</version>
+    </parent>
+
+    <properties>
+        <topDirectoryLocation>..</topDirectoryLocation>
+        <amqj.logging.level>warn</amqj.logging.level>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-jms_1.1_spec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.mina</groupId>
+            <artifactId>mina-filter-ssl</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>jmscts</groupId>
+            <artifactId>jmscts</artifactId>
+            <version>0.5-b2</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>jms</groupId>
+                    <artifactId>jms</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <systemProperties>
+                        <property>
+                            <name>amqj.noAutoCreateVMBroker</name>
+                            <value>true</value>
+                        </property>
+                        <property>
+                            <name>amqj.logging.level</name>
+                            <value>${amqj.logging.level}</value>
+                        </property>
+                        <property>
+                            <name>log4j.configuration</name>
+                            <value>file:///${basedir}/src/main/java/log4j.properties</value>
+                        </property>
+                    </systemProperties>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Propchange: incubator/qpid/trunk/qpid/java/client/example/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/client/example/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/log4j.xml
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/log4j.xml?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/log4j.xml (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/log4j.xml Tue Dec 12 02:18:43 2006
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!--
+ -
+ - 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.
+ -
+ -->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+    <appender name="FileAppender" class="org.apache.log4j.FileAppender">
+        <param name="File" value="ams_messaging.log"/>
+        <param name="Append" value="false"/>
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/>
+        </layout>
+    </appender>
+
+    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </layout>
+    </appender>
+
+    <root>
+        <priority value="debug"/>
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="FileAppender"/>
+    </root>
+</log4j:configuration>
\ No newline at end of file

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/log4j.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/log4j.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageDispatcher.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageDispatcher.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageDispatcher.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageDispatcher.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,159 @@
+/*
+ * 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.qpid.example.publisher;
+
+import org.apache.log4j.Logger;
+
+import java.io.File;
+
+import org.apache.qpid.example.shared.FileUtils;
+import org.apache.qpid.example.shared.Statics;
+
+import javax.jms.JMSException;
+
+/**
+ * Class that sends message files to the Publisher to distribute
+ * using files as input
+ * Must set properties for host in properties file or uses in vm broker
+ */
+public class FileMessageDispatcher {
+
+    protected static final Logger _logger = Logger.getLogger(FileMessageDispatcher.class);
+
+    protected static Publisher _publisher = null;
+
+    /**
+     * To use this main method you need to specify a path or file to use for input
+     * This class then uses file contents from the dir/file specified to generate
+     * messages to publish
+     * Intended to be a very simple way to get going with publishing using the broker
+     * @param args - must specify one value, the path to file(s) for publisher
+     */
+    public static void main(String[] args)
+    {
+
+        //Check command line args ok - must provide a path or file for us to dispatch
+        if (args.length == 0)
+        {
+            System.err.println("Usage: FileMessageDispatcher <filesToDispatch>" + "");
+        }
+        else
+        {
+            try
+            {
+                //publish message(s) from file(s) to configured queue
+                publish(args[0]);
+
+                //Move payload file(s) to archive location as no error
+                FileUtils.moveFileToNewDir(args[0], System.getProperties().getProperty(Statics.ARCHIVE_PATH));
+            }
+            catch(Exception e)
+            {
+                //log error and exit
+                _logger.error("Error trying to dispatch message: " + e);
+                System.exit(1);
+            }
+            finally
+            {
+                //clean up before exiting
+                if (getPublisher() != null)
+                {
+                    getPublisher().cleanup();
+                }
+            }
+        }
+
+        if (_logger.isDebugEnabled())
+        {
+            _logger.debug("Finished dispatching message");
+        }
+
+        System.exit(0);
+    }
+
+    /**
+     * Publish the content of a file or files from a directory as messages
+     * @param path - from main args
+     * @throws JMSException
+     * @throws MessageFactoryException - if cannot create message from file content
+     */
+    public static void publish(String path) throws JMSException, MessageFactoryException
+    {
+        File tempFile = new File(path);
+        if (tempFile.isDirectory())
+        {
+            //while more files in dir publish them
+            File[] files = tempFile.listFiles();
+
+            if (files == null || files.length == 0)
+            {
+                _logger.info("FileMessageDispatcher - No files to publish in input directory: " + tempFile);
+            }
+            else
+            {
+                for (File file : files)
+                {
+                    //Create message factory passing in payload path
+                    FileMessageFactory factory = new FileMessageFactory(getPublisher().getSession(), file.toString());
+
+                    //Send the message generated from the payload using the _publisher
+                    getPublisher().sendMessage(factory.createEventMessage());
+
+                }
+            }
+        }
+        else
+        {
+            //handle a single file
+            //Create message factory passing in payload path
+            FileMessageFactory factory = new FileMessageFactory(getPublisher().getSession(),tempFile.toString());
+
+            //Send the message generated from the payload using the _publisher
+            getPublisher().sendMessage(factory.createEventMessage());
+        }
+    }
+
+    /**
+     * Cleanup before exit
+     */
+    public static void cleanup()
+    {
+        if (getPublisher() != null)
+        {
+            getPublisher().cleanup();
+        }
+    }
+
+    /**
+     * @return A Publisher instance
+     */
+    private static Publisher getPublisher()
+    {
+       if (_publisher != null)
+       {
+           return _publisher;
+       }
+
+       //Create a _publisher
+       _publisher = new Publisher();
+
+       return _publisher;
+    }
+
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageDispatcher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageFactory.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageFactory.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageFactory.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageFactory.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,134 @@
+/*
+ * 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.qpid.example.publisher;
+
+import org.apache.qpid.example.shared.FileUtils;
+import org.apache.qpid.example.shared.Statics;
+
+import java.io.*;
+import javax.jms.*;
+
+public class FileMessageFactory
+{
+    protected final Session _session;
+    protected final String _payload;
+    protected final String _filename;
+
+    /**
+     * Contructs and instance using a filename from which content will be used to create message
+     * @param session
+     * @param filename
+     * @throws MessageFactoryException
+     */
+    public FileMessageFactory(Session session, String filename) throws MessageFactoryException
+    {
+        try
+        {
+            _filename = filename;
+            _payload = FileUtils.getFileContent(filename);
+            _session = session;
+        }
+        catch (IOException e)
+        {
+            throw new MessageFactoryException(e.toString());
+        }
+    }
+
+    /**
+     * Creates a text message and sets filename property on it
+     * The filename property is purely intended to provide visibility
+     * of file content passing trhough the broker using example classes
+     * @return  Message - a TextMessage with content from file
+     * @throws JMSException
+     */
+    public Message createEventMessage() throws JMSException
+    {
+        TextMessage msg = _session.createTextMessage();
+        msg.setText(_payload);
+        msg.setStringProperty(Statics.FILENAME_PROPERTY,new File(_filename).getName());
+        return msg;
+    }
+
+    /**
+     * Creates message from a string for use by the monitor
+     * @param session
+     * @param textMsg - message content
+     * @return Message - TextMessage with content from String
+     * @throws JMSException
+     */
+    public static Message createSimpleEventMessage(Session session, String textMsg) throws JMSException
+    {
+        TextMessage msg = session.createTextMessage();
+        msg.setText(textMsg);
+        return msg;
+    }
+
+    public Message createShutdownMessage() throws JMSException
+    {
+        return _session.createTextMessage("SHUTDOWN");
+    }
+
+    public Message createReportRequestMessage() throws JMSException
+    {
+        return _session.createTextMessage("REPORT");
+    }
+
+    public Message createReportResponseMessage(String msg) throws JMSException
+    {
+        return _session.createTextMessage(msg);
+    }
+
+    public boolean isShutdown(Message m)
+    {
+        return checkText(m, "SHUTDOWN");
+    }
+
+    public boolean isReport(Message m)
+    {
+        return checkText(m, "REPORT");
+    }
+
+    public Object getReport(Message m)
+    {
+        try
+        {
+            return ((TextMessage) m).getText();
+        }
+        catch (JMSException e)
+        {
+            e.printStackTrace(System.out);
+            return e.toString();
+        }
+    }
+
+    private static boolean checkText(Message m, String s)
+    {
+        try
+        {
+            return m instanceof TextMessage && ((TextMessage) m).getText().equals(s);
+        }
+        catch (JMSException e)
+        {
+            e.printStackTrace(System.out);
+            return false;
+        }
+    }
+}
+

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/FileMessageFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MessageFactoryException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MessageFactoryException.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MessageFactoryException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MessageFactoryException.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,72 @@
+/*
+ * 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.qpid.example.publisher;
+
+import org.apache.log4j.Logger;
+
+public class MessageFactoryException extends Exception {
+
+    private int _errorCode;
+
+    public MessageFactoryException(String message)
+    {
+        super(message);
+    }
+
+    public MessageFactoryException(String msg, Throwable t)
+    {
+        super(msg, t);
+    }
+
+    public MessageFactoryException(int errorCode, String msg, Throwable t)
+    {
+        super(msg + " [error code " + errorCode + ']', t);
+        _errorCode = errorCode;
+    }
+
+    public MessageFactoryException(int errorCode, String msg)
+    {
+        super(msg + " [error code " + errorCode + ']');
+        _errorCode = errorCode;
+    }
+
+    public MessageFactoryException(Logger logger, String msg, Throwable t)
+    {
+        this(msg, t);
+        logger.error(getMessage(), this);
+    }
+
+    public MessageFactoryException(Logger logger, String msg)
+    {
+        this(msg);
+        logger.error(getMessage(), this);
+    }
+
+    public MessageFactoryException(Logger logger, int errorCode, String msg)
+    {
+        this(errorCode, msg);
+        logger.error(getMessage(), this);
+    }
+
+    public int getErrorCode()
+    {
+        return _errorCode;
+    }
+}
+

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MessageFactoryException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorMessageDispatcher.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorMessageDispatcher.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorMessageDispatcher.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorMessageDispatcher.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,134 @@
+/*
+ * 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.qpid.example.publisher;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.BasicConfigurator;
+
+import javax.jms.*;
+
+import java.util.Properties;
+
+/**
+ * Class that sends heartbeat messages to allow monitoring of message consumption
+ * Sends regular (currently 20 seconds apart) heartbeat message
+ */
+public class MonitorMessageDispatcher {
+
+    private static final Logger _logger = Logger.getLogger(MonitorMessageDispatcher.class);
+
+    protected static MonitorPublisher _monitorPublisher = null;
+
+    protected static final String DEFAULT_MONITOR_PUB_NAME = "MonitorPublisher";
+
+    /**
+     * Easy entry point for running a message dispatcher for monitoring consumption
+     * @param args
+     */
+    public static void main(String[] args)
+    {
+
+        //Switch on logging appropriately for your app
+        BasicConfigurator.configure();
+
+        try
+        {
+            while(true)
+            {
+                try
+                {
+                    //endlessly publish messages to monitor queue
+                    publish();
+
+                    if (_logger.isDebugEnabled())
+                    {
+                        _logger.debug("Dispatched monitor message");
+                    }
+
+                    //sleep for twenty seconds and then publish again - change if appropriate
+                    Thread.sleep(20000);
+                }
+                catch(UndeliveredMessageException a)
+                {
+                    //trigger application specific failure handling here
+                    _logger.error("Problem delivering monitor message");
+                    break;
+                }
+            }
+        }
+        catch(Exception e)
+        {
+            _logger.error("Error trying to dispatch AMS monitor message: " + e);
+            System.exit(1);
+        }
+        finally
+        {
+            if (getMonitorPublisher() != null)
+            {
+               getMonitorPublisher().cleanup();
+            }
+        }
+
+        System.exit(1);
+    }
+
+    /**
+     * Publish heartbeat message
+     * @throws JMSException
+     * @throws UndeliveredMessageException
+     */
+    public static void publish() throws JMSException, UndeliveredMessageException
+    {
+        //Send the message generated from the payload using the _publisher
+        getMonitorPublisher().sendImmediateMessage
+          (FileMessageFactory.createSimpleEventMessage(getMonitorPublisher().getSession(),"monitor:" +System.currentTimeMillis()));
+    }
+
+    /**
+     * Cleanup publishers
+     */
+    public static void cleanup()
+    {
+        if (getMonitorPublisher() != null)
+        {
+            getMonitorPublisher().cleanup();
+        }
+
+        if (getMonitorPublisher() != null)
+        {
+            getMonitorPublisher().cleanup();
+        }
+    }
+
+    //Returns a _publisher for the monitor queue
+    private static MonitorPublisher getMonitorPublisher()
+    {
+       if (_monitorPublisher != null)
+       {
+           return _monitorPublisher;
+       }
+
+       //Create a _publisher using failover details and constant for monitor queue
+       _monitorPublisher = new MonitorPublisher();
+
+       _monitorPublisher.setName(MonitorMessageDispatcher.DEFAULT_MONITOR_PUB_NAME);
+       return _monitorPublisher;
+    }
+
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorMessageDispatcher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorPublisher.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorPublisher.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorPublisher.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorPublisher.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,71 @@
+/*
+ * 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.qpid.example.publisher;
+
+import javax.jms.Message;
+import javax.jms.DeliveryMode;
+import javax.jms.JMSException;
+import org.apache.qpid.client.BasicMessageProducer;
+import org.apache.log4j.Logger;
+
+/**
+ * Subclass of Publisher which uses QPID functionality to send a heartbeat message
+ * Note immediate flag not available via JMS MessageProducer
+ */
+public class MonitorPublisher extends Publisher
+{
+
+    private static final Logger _log = Logger.getLogger(Publisher.class);
+
+    BasicMessageProducer _producer;
+
+    public MonitorPublisher()
+    {
+        super();
+    }
+
+     /*
+     * Publishes a non-persistent message using transacted session
+     */
+    public boolean sendImmediateMessage(Message message) throws UndeliveredMessageException
+    {
+        try
+        {
+             _producer = (BasicMessageProducer)_session.createProducer(_destination);
+
+            //Send message via our producer which is not persistent and is immediate
+            //NB: not available via jms interface MessageProducer
+            _producer.send(message, DeliveryMode.NON_PERSISTENT, true);
+
+            //commit the message send and close the transaction
+            _session.commit();
+
+        }
+        catch (JMSException e)
+        {
+            //Have to assume our commit failed but do not rollback here as channel closed
+            _log.error(e);
+            e.printStackTrace();
+            throw new UndeliveredMessageException("Cannot deliver immediate message",e);
+        }
+
+        _log.info(_name + " finished sending message: " + message);
+        return true;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/MonitorPublisher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/Publisher.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/Publisher.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/Publisher.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/Publisher.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,181 @@
+/*
+ * 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.qpid.example.publisher;
+
+import org.apache.log4j.Logger;
+
+import org.apache.qpid.client.AMQConnectionFactory;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.DeliveryMode;
+import javax.jms.Queue;
+import javax.jms.MessageProducer;
+import javax.jms.Connection;
+import javax.jms.Session;
+
+import javax.naming.InitialContext;
+
+import org.apache.qpid.example.shared.InitialContextHelper;
+
+public class Publisher
+{
+    private static final Logger _log = Logger.getLogger(Publisher.class);
+
+    protected InitialContextHelper _contextHelper;
+
+    protected Connection _connection;
+
+    protected Session _session;
+
+    protected MessageProducer _producer;
+
+    protected String _destinationDir;
+
+    protected String _name = "Publisher";
+
+    protected Queue _destination;
+
+    protected static final String _defaultDestinationDir = "/tmp";
+
+    /**
+     * Creates a Publisher instance using properties from example.properties
+     * See InitialContextHelper for details of how context etc created
+     */
+    public Publisher()
+    {
+        try
+        {
+            //get an initial context from default properties
+            _contextHelper = new InitialContextHelper(null);
+            InitialContext ctx = _contextHelper.getInitialContext();
+
+            //then create a connection using the AMQConnectionFactory
+            AMQConnectionFactory cf = (AMQConnectionFactory) ctx.lookup("local");
+            _connection = cf.createConnection();
+
+            //create a transactional session
+            _session = _connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
+
+            //lookup the example queue and use it
+            //Queue is non-exclusive and not deleted when last consumer detaches
+            _destination = _session.createQueue((String)ctx.lookup("MyQueue"));
+
+            //create a message producer
+            _producer = _session.createProducer(_destination);
+
+            //set destination dir for files that have been processed
+            _destinationDir = _defaultDestinationDir;
+
+            _connection.start();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            _log.error(e);
+        }
+    }
+
+    /**
+     * Publishes a non-persistent message using transacted session
+     * Note that persistent is the default mode for send - so need to specify for transient
+     */
+    public boolean sendMessage(Message message)
+    {
+        try
+        {
+            //Send message via our producer which is not persistent
+            _producer.send(message, DeliveryMode.NON_PERSISTENT, _producer.getPriority(), _producer.getTimeToLive());
+
+            //commit the message send and close the transaction
+            _session.commit();
+
+        }
+        catch (JMSException e)
+        {
+            //Have to assume our commit failed and rollback here
+            try
+            {
+                _session.rollback();
+                _log.error(e);
+                e.printStackTrace();
+                return false;
+            }
+            catch (JMSException j)
+            {
+                _log.error("Unable to rollback publish transaction ",e);
+                return false;
+            }
+        }
+
+        _log.info(_name + " finished sending message: " + message);
+        return true;
+    }
+
+    /**
+     * Cleanup resources before exit
+     */
+    public void cleanup()
+    {
+        try
+        {
+            if (_connection != null)
+            {
+                _connection.stop();
+                _connection.close();
+            }
+            _connection = null;
+            _producer = null;
+        }
+        catch(Exception e)
+        {
+            _log.error("Error trying to cleanup publisher " + e);
+            System.exit(1);
+        }
+    }
+
+    /**
+     * Exposes session
+     * @return  Session
+     */
+    public Session getSession()
+    {
+        return _session;
+    }
+
+    public String getDestinationDir()
+    {
+        return _destinationDir;
+    }
+
+    public void setDestinationDir(String destinationDir)
+    {
+        _destinationDir = destinationDir;
+    }
+
+    public String getName()
+    {
+        return _name;
+    }
+
+    public void setName(String _name) {
+        this._name = _name;
+    }
+}
+

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/Publisher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/UndeliveredMessageException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/UndeliveredMessageException.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/UndeliveredMessageException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/UndeliveredMessageException.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,74 @@
+/*
+ * 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.qpid.example.publisher;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Exception thrown by monitor when cannot send a message marked for immediate delivery
+ */
+public class UndeliveredMessageException extends Exception {
+
+    private int _errorCode;
+
+    public UndeliveredMessageException(String message)
+    {
+        super(message);
+    }
+
+    public UndeliveredMessageException(String msg, Throwable t)
+    {
+        super(msg, t);
+    }
+
+    public UndeliveredMessageException(int errorCode, String msg, Throwable t)
+    {
+        super(msg + " [error code " + errorCode + ']', t);
+        _errorCode = errorCode;
+    }
+
+    public UndeliveredMessageException(int errorCode, String msg)
+    {
+        super(msg + " [error code " + errorCode + ']');
+        _errorCode = errorCode;
+    }
+
+    public UndeliveredMessageException(Logger logger, String msg, Throwable t)
+    {
+        this(msg, t);
+        logger.error(getMessage(), this);
+    }
+
+    public UndeliveredMessageException(Logger logger, String msg)
+    {
+        this(msg);
+        logger.error(getMessage(), this);
+    }
+
+    public UndeliveredMessageException(Logger logger, int errorCode, String msg)
+    {
+        this(errorCode, msg);
+        logger.error(getMessage(), this);
+    }
+
+    public int getErrorCode()
+    {
+        return _errorCode;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/publisher/UndeliveredMessageException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ConnectionException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ConnectionException.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ConnectionException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ConnectionException.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,71 @@
+/*
+ * 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.qpid.example.shared;
+
+import org.apache.log4j.Logger;
+
+public class ConnectionException extends Exception {
+
+    private int _errorCode;
+
+    public ConnectionException(String message)
+    {
+        super(message);
+    }
+
+    public ConnectionException(String msg, Throwable t)
+    {
+        super(msg, t);
+    }
+
+    public ConnectionException(int errorCode, String msg, Throwable t)
+    {
+        super(msg + " [error code " + errorCode + ']', t);
+        _errorCode = errorCode;
+    }
+
+    public ConnectionException(int errorCode, String msg)
+    {
+        super(msg + " [error code " + errorCode + ']');
+        _errorCode = errorCode;
+    }
+
+    public ConnectionException(Logger logger, String msg, Throwable t)
+    {
+        this(msg, t);
+        logger.error(getMessage(), this);
+    }
+
+    public ConnectionException(Logger logger, String msg)
+    {
+        this(msg);
+        logger.error(getMessage(), this);
+    }
+
+    public ConnectionException(Logger logger, int errorCode, String msg)
+    {
+        this(errorCode, msg);
+        logger.error(getMessage(), this);
+    }
+
+    public int getErrorCode()
+    {
+        return _errorCode;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ConnectionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ContextException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ContextException.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ContextException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ContextException.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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.qpid.example.shared;
+
+import org.apache.log4j.Logger;
+
+public class ContextException extends Exception {
+
+    private int _errorCode;
+
+    public ContextException(String message)
+    {
+        super(message);
+    }
+
+    public ContextException(String msg, Throwable t)
+    {
+        super(msg, t);
+    }
+
+    public ContextException(int errorCode, String msg, Throwable t)
+    {
+        super(msg + " [error code " + errorCode + ']', t);
+        _errorCode = errorCode;
+    }
+
+    public ContextException(int errorCode, String msg)
+    {
+        super(msg + " [error code " + errorCode + ']');
+        _errorCode = errorCode;
+    }
+
+    public ContextException(Logger logger, String msg, Throwable t)
+    {
+        this(msg, t);
+        logger.error(getMessage(), this);
+    }
+
+    public ContextException(Logger logger, String msg)
+    {
+        this(msg);
+        logger.error(getMessage(), this);
+    }
+
+    public ContextException(Logger logger, int errorCode, String msg)
+    {
+        this(errorCode, msg);
+        logger.error(getMessage(), this);
+    }
+
+    public int getErrorCode()
+    {
+        return _errorCode;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/ContextException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/FileUtils.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/FileUtils.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/FileUtils.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/FileUtils.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,168 @@
+/*
+ * 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.qpid.example.shared;
+
+import java.io.*;
+
+/**
+ * Class that provides file related utility methods for utility use
+ */
+public class FileUtils {
+
+
+    //Reads file content into String
+    public static String getFileContent(String filePath) throws IOException
+    {
+
+        BufferedReader reader = null;
+        String tempData = "";
+        String eol = "\n\r";
+
+        try
+        {
+            String line;
+            reader = new BufferedReader(new FileReader(filePath));
+            while ((line = reader.readLine()) != null)
+            {
+                if (!tempData.equals(""))
+                {
+                    tempData = tempData + eol + line;
+                }
+                else
+                {
+                    tempData = line;
+                }
+            }
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                reader.close();
+            }
+        }
+        return tempData;
+    }
+
+     /*
+     * Reads xml from a file and returns it as an array of chars
+     */
+    public static char[] getFileAsCharArray(String filePath) throws IOException
+    {
+        BufferedReader reader = null;
+        char[] tempChars = null;
+        String tempData = "";
+
+        try
+        {
+            String line;
+            reader = new BufferedReader(new FileReader(filePath));
+            while ((line = reader.readLine()) != null)
+            {
+                tempData = tempData + line;
+            }
+            tempChars = tempData.toCharArray();
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                reader.close();
+            }
+        }
+        return tempChars;
+    }
+
+    /*
+    * Write String content to filename provided
+    */
+    public static void writeStringToFile(String content, String path) throws IOException
+    {
+
+        BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path)));
+        writer.write(content);
+        writer.flush();
+        writer.close();
+    }
+
+    /*
+    * Allows moving of files to a new dir and preserves the last bit of the name only
+    */
+    public static void moveFileToNewDir(String path, String newDir) throws IOException
+    {
+        //get file name from current path
+        //while more files in dir publish them
+        File pathFile = new File(path);
+        if (pathFile.isDirectory())
+        {
+            File[] files = pathFile.listFiles();
+            for (File file : files)
+            {
+                moveFileToNewDir(file,newDir);
+            }
+        }
+    }
+
+    /*
+    * Allows moving of a file to a new dir and preserves the last bit of the name only
+    */
+    public static void moveFileToNewDir(File fileToMove, String newDir) throws IOException
+    {
+        moveFile(fileToMove,getArchiveFileName(fileToMove,newDir));
+    }
+
+    /*
+    * Moves file from a given path to a new path with String params
+    */
+    public static void moveFile(String fromPath, String dest) throws IOException
+    {
+        moveFile(new File(fromPath),new File(dest));
+    }
+
+    /*
+    * Moves file from a given path to a new path with mixed params
+    */
+    public static void moveFile(File fileToMove, String dest) throws IOException
+    {
+        moveFile(fileToMove,new File(dest));
+    }
+
+    /*
+    * Moves file from a given path to a new path with File params
+    */
+    public static void moveFile(File fileToMove, File dest) throws IOException
+    {
+        fileToMove.renameTo(dest);
+    }
+
+    /*
+    * Deletes a given file
+    */
+    public static void deleteFile(String filePath) throws IOException
+    {
+        new File(filePath).delete();
+    }
+
+    private static String getArchiveFileName(File fileToMove, String archiveDir)
+    {
+         //get file name from current path
+        String fileName = fileToMove.getName();
+        return archiveDir + File.separator + fileName;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/FileUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/InitialContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/InitialContextHelper.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/InitialContextHelper.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/InitialContextHelper.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,78 @@
+/*
+ *
+ * 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.qpid.example.shared;
+
+import org.apache.log4j.Logger;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.util.Properties;
+import java.io.InputStream;
+import java.io.IOException;
+
+/**
+ * Class that provides helper methods for JNDI
+ */
+public class InitialContextHelper {
+
+    public static final String _defaultPropertiesName = "example.properties";
+    protected static Properties _fileProperties;
+    protected static InitialContext _initialContext;
+    protected static final Logger _log = Logger.getLogger(InitialContextHelper.class);
+
+    public InitialContextHelper(String propertiesName) throws ContextException
+    {
+        try
+        {
+            if (propertiesName == null || propertiesName.length() == 0)
+            {
+                propertiesName = _defaultPropertiesName;
+            }
+
+            _fileProperties = new Properties();
+            ClassLoader cl = this.getClass().getClassLoader();
+
+            //NB: Need to change path to reflect package if moving classes around !
+            InputStream is = cl.getResourceAsStream("org/apache/qpid/example/shared/" + propertiesName);
+            _fileProperties.load(is);
+            _initialContext = new InitialContext(_fileProperties);
+        }
+        catch (IOException e)
+        {
+            throw new ContextException(_log, e.toString());
+        }
+        catch (NamingException n)
+        {
+            throw new ContextException(_log, n.toString());
+        }
+    }
+
+    public Properties getFileProperties()
+    {
+        return _fileProperties;
+    }
+
+    public InitialContext getInitialContext()
+    {
+        return _initialContext;
+    }
+
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/InitialContextHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/Statics.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/Statics.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/Statics.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/Statics.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,57 @@
+/*
+ * 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.qpid.example.shared;
+
+/**
+ * Constants used by AMS Publisher/Subscriber classes
+ */
+public class Statics {
+
+    public static final String TOPIC_NAME = "EXAMPLE_TOPIC";
+
+    public static final String QUEUE_NAME = "EXAMPLE_QUEUE";
+
+    public static final String MONITOR_QUEUE_SUFFIX = "_MONITOR";
+
+    public static final String HOST_PROPERTY = "host";
+
+    public static final String PORT_PROPERTY = "port";
+
+    public static final String USER_PROPERTY = "user";
+
+    public static final String PWD_PROPERTY = "pwd";
+
+    public static final String TOPIC_PROPERTY = "topic";
+
+    public static final String QUEUE_PROPERTY = "queue";
+
+    public static final String VIRTUAL_PATH_PROPERTY = "virtualpath";
+
+    public static final String ARCHIVE_PATH = "archivepath";
+
+    public static final String CLIENT_PROPERTY = "client";
+
+    public static final String FILENAME_PROPERTY = "filename";
+
+    public static final String DEFAULT_USER = "guest";
+
+    public static final String DEFAULT_PWD = "guest";
+
+
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/Statics.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/example.properties
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/example.properties?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/example.properties (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/example.properties Tue Dec 12 02:18:43 2006
@@ -0,0 +1,21 @@
+java.naming.factory.initial = org.apache.qpid.jndi.PropertiesFileInitialContextFactory
+
+# use the following property to configure the default connector
+#java.naming.provider.url - ignored.
+
+# register some connection factories
+# connectionfactory.[jndiname] = [ConnectionURL]
+connectionfactory.local = amqp://guest:guest@clientid/testpath?brokerlist='vm://:1'
+
+# register some queues in JNDI using the form
+# queue.[jndiName] = [physicalName]
+queue.MyQueue = example.MyQueue
+
+# register some topics in JNDI using the form
+# topic.[jndiName] = [physicalName]
+topic.ibmStocks = stocks.nyse.ibm
+
+# Register an AMQP destination in JNDI
+#   NOTE: Qpid currently only supports direct,topics and headers
+# destination.[jniName] = [BindingURL]
+destination.direct = direct://amq.direct//directQueue

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/shared/example.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriber.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriber.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriber.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriber.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,139 @@
+/*
+ * 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.qpid.example.subscriber;
+
+import org.apache.log4j.Logger;
+import org.apache.qpid.example.shared.Statics;
+
+import javax.jms.*;
+
+/**
+ * Subclass of Subscriber which consumes a heartbeat message
+ */
+
+public class MonitoredSubscriber extends Subscriber
+{
+    protected String _monitorDestinationName;
+
+    private static final Logger _logger = Logger.getLogger(MonitoredSubscriber.class);
+
+    private static MessageConsumer _monitorConsumer;
+
+    public MonitoredSubscriber()
+    {
+        super();
+        //lookup queue name and append suffix
+        _monitorDestinationName = _destinationName + Statics.MONITOR_QUEUE_SUFFIX;
+    }
+
+    /**
+     * MessageListener implementation for this subscriber
+     */
+    public static class MonitorMessageListener implements MessageListener
+    {
+        private String _name;
+
+        public MonitorMessageListener(String name)
+        {
+            _name = name;
+
+        }
+
+        /**
+         * Listens for heartbeat messages and acknowledges them
+         * @param message
+         */
+        public void onMessage(javax.jms.Message message)
+        {
+            _logger.info(_name + " monitor got message '" + message + "'");
+
+            try
+            {
+               _logger.debug("Monitor acknowledging recieved message");
+
+                //Now acknowledge the message to clear it from our queue
+                message.acknowledge();
+            }
+            catch(JMSException j)
+            {
+                _logger.error("Monitor caught JMSException trying to acknowledge message receipt");
+                j.printStackTrace();
+            }
+            catch(Exception e)
+            {
+                _logger.error("Monitor caught unexpected exception trying to handle message");
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * Subscribes to Queue and attaches additional monitor listener
+     */
+    public void subscribeAndMonitor()
+    {
+        try
+        {
+            _connection = _connectionFactory.createConnection();
+
+             //create a transactional session
+            Session session =  _connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
+
+            //Queue is non-exclusive and not deleted when last consumer detaches
+            Destination destination = session.createQueue(_monitorDestinationName);
+
+            //Create a consumer with a destination of our queue which will use defaults for prefetch etc
+            _monitorConsumer = session.createConsumer(destination);
+
+            //give the monitor message listener a name of it's own
+            _monitorConsumer.setMessageListener(new MonitoredSubscriber.MonitorMessageListener
+                ("MonitorListener " + System.currentTimeMillis()));
+
+            MonitoredSubscriber._logger.info("Starting monitored subscription ...");
+
+            MonitoredSubscriber._connection.start();
+
+            //and now start ordinary consumption too
+            subscribe();
+        }
+        catch (Throwable t)
+        {
+            _logger.error("Fatal error: " + t);
+            t.printStackTrace();
+        }
+    }
+
+    /**
+     * Stop consuming
+     */
+    public void stopMonitor()
+    {
+        try
+        {
+            _monitorConsumer.close();
+            _monitorConsumer = null;
+            stop();
+        }
+        catch(JMSException j)
+        {
+            _logger.error("JMSException trying to Subscriber.stop: " + j.getStackTrace());
+        }
+    }
+
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriber.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriptionWrapper.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriptionWrapper.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriptionWrapper.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriptionWrapper.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,51 @@
+/*
+ * 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.qpid.example.subscriber;
+
+import org.apache.log4j.BasicConfigurator;
+
+/**
+ * Allows you to simply start a monitored subscriber
+ */
+public class MonitoredSubscriptionWrapper {
+
+    private static MonitoredSubscriber _subscriber;
+
+    /**
+     * Create a monitored subscriber and start it
+     * @param args - no params required
+     */
+    public static void main(String args[])
+    {
+        //switch on logging
+        BasicConfigurator.configure();
+
+        _subscriber = new MonitoredSubscriber();
+
+        _subscriber.subscribe();
+    }
+
+    /**
+     * Stop subscribing now ...
+     */
+    public static void stop()
+    {
+        _subscriber.stop();
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/MonitoredSubscriptionWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/Subscriber.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/Subscriber.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/Subscriber.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/Subscriber.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,194 @@
+/*
+ * 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.qpid.example.subscriber;
+
+import org.apache.log4j.Logger;
+import org.apache.qpid.client.AMQConnectionFactory;
+
+import javax.jms.*;
+import javax.jms.Connection;
+import javax.jms.MessageConsumer;
+import javax.jms.Session;
+import javax.naming.InitialContext;
+
+import org.apache.qpid.example.shared.InitialContextHelper;
+
+/**
+ * Subscriber which consumes messages from a queue
+ */
+
+public class Subscriber
+{
+    private static final Logger _log = Logger.getLogger(Subscriber.class);
+
+    protected static Connection _connection;
+
+    protected static MessageConsumer _consumer;
+
+    protected static InitialContextHelper _contextHelper;
+
+    protected static AMQConnectionFactory _connectionFactory;
+
+    protected String _destinationName;
+
+    public Subscriber()
+    {
+        try
+        {
+            //get an initial context from default properties
+            _contextHelper = new InitialContextHelper(null);
+            InitialContext ctx = _contextHelper.getInitialContext();
+
+            //then create a connection using the AMQConnectionFactory
+            _connectionFactory = (AMQConnectionFactory) ctx.lookup("local");
+
+            //lookup queue name
+            _destinationName = (String) ctx.lookup("MyQueue");
+
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            _log.error(e);
+        }
+    }
+
+    /**
+     * Listener class that handles messages
+     */
+    public static class ExampleMessageListener implements MessageListener
+    {
+        private String _name;
+
+        public ExampleMessageListener(String name)
+        {
+            _name = name;
+
+        }
+
+        /**
+         * Listens for message callbacks, handles and then acknowledges them
+         * @param message - the message received
+         */
+        public void onMessage(javax.jms.Message message)
+        {
+            _log.info(_name + " got message '" + message + "'");
+
+            try
+            {
+                //NB: Handle your message appropriately for your application here
+                //do some stuff
+
+                _log.debug("Acknowledging recieved message");
+
+                //Now acknowledge the message to clear it from our queue
+                message.acknowledge();
+            }
+            catch(JMSException j)
+            {
+                _log.error("JMSException trying to acknowledge message receipt");
+                j.printStackTrace();
+            }
+            catch(Exception e)
+            {
+                _log.error("Unexpected exception trying to handle message");
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * Subscribes to example Queue and attaches listener
+     */
+    public void subscribe()
+    {
+        _log.info("Starting subscription ...");
+
+        try
+        {
+             _connection = _connectionFactory.createConnection();
+
+             //create a transactional session
+            Session session =  _connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
+
+            //Queue is non-exclusive and not deleted when last consumer detaches
+            Destination destination = session.createQueue(_destinationName);
+
+            //Create a consumer with a destination of our queue which will use defaults for prefetch etc
+            _consumer = session.createConsumer(destination);
+
+            //give the message listener a name of it's own
+            _consumer.setMessageListener(new ExampleMessageListener("MessageListener " + System.currentTimeMillis()));
+
+            _connection.start();
+        }
+        catch (Throwable t)
+        {
+            _log.error("Fatal error: " + t);
+            t.printStackTrace();
+        }
+
+        _log.info("Waiting for messages ...");
+
+        //wait for messages and sleep to survive failover
+        try
+        {
+            while(true)
+            {
+                Thread.sleep(Long.MAX_VALUE);
+            }
+        }
+        catch (Exception e)
+        {
+            _log.warn("Exception while Subscriber sleeping",e);
+        }
+    }
+
+    /**
+     * Set destination (queue or topic) name
+     * @param name
+     */
+    public void setDestinationName(String name)
+    {
+        _destinationName = name;
+    }
+
+    /**
+     * Stop consuming and close connection
+     */
+    public void stop()
+    {
+        try
+        {
+            _consumer.close();
+            _consumer = null;
+            _connection.stop();
+            _connection.close();
+        }
+        catch(JMSException j)
+        {
+            _log.error("JMSException trying to Subscriber.stop: " + j.getStackTrace());
+        }
+    }
+
+}
+
+
+
+

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/Subscriber.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/SubscriptionWrapper.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/SubscriptionWrapper.java?view=auto&rev=486084
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/SubscriptionWrapper.java (added)
+++ incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/SubscriptionWrapper.java Tue Dec 12 02:18:43 2006
@@ -0,0 +1,51 @@
+/*
+ * 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.qpid.example.subscriber;
+
+import org.apache.log4j.BasicConfigurator;
+
+/**
+ * Allows you to simply start a subscriber
+ */
+public class SubscriptionWrapper {
+
+    private static Subscriber _subscriber;
+
+    /**
+     * Create a subscriber and start it
+     * @param args
+     */
+    public static void main(String args[])
+    {
+        //switch on logging
+        BasicConfigurator.configure();
+        
+         _subscriber = new Subscriber();
+
+        _subscriber.subscribe();
+    }
+
+    /**
+     * Stop subscribing now ...
+     */
+    public static void stop()
+    {
+        _subscriber.stop();
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/client/example/src/main/java/org/apache/qpid/example/subscriber/SubscriptionWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native