activemq-artemis/examples/jms/aerogear
Clebert Suconic 3c44e26854 ACTIVEMQ6-3 renaming directories from activemq6 to activemq
https://issues.apache.org/jira/browse/ACTIVEMQ6-3

We are renaming packages from activemq6 to activemq as that's more generic and version independent
On this first commit I'm just renaming the directories otherwise the history would be lost. The next commit will rename the text on the directories.
If I squash these two commits git will make us delete / add again.
2014-11-17 09:33:36 -05:00
..
src/main ACTIVEMQ6-3 renaming directories from activemq6 to activemq 2014-11-17 09:33:36 -05:00
pom.xml Use new package names in config and classes 2014-11-11 18:28:18 +00:00
readme.html Use new package names in config and classes 2014-11-11 18:28:18 +00:00

readme.html

<html>
  <head>
    <title>HornetQ JMS AeroGear Example</title>
    <link rel="stylesheet" type="text/css" href="../common/common.css" />
    <link rel="stylesheet" type="text/css" href="../common/prettify.css" />
    <script type="text/javascript" src="../common/prettify.js"></script>
  </head>
  <body onload="prettyPrint()">
     <h1>JMS AeroGear Example</h1>

     <p>This example shows how you can send a message to a mobile device by leveraging <a href="http://aerogear.org/push/">AeroGears push</a> technology which
         provides support for different push notification technologies like Google Cloud Messaging, Apple's APNs or
         Mozilla's SimplePush.</p>

     <p>For this example you will need an AeroGear Application running somewhere, a good way to do this is to deploy the
        Push Application on <href a="">openshift</href>, you can follow the AeroGear Push 0.X Quickstart.</p>

     <p>Once you have created your AeroGear Push Application you can create a mobile application. Simply log into the application
     on the web and create a new mobile application by clicking the 'create' button. Once created you will see an application id
     and a master secret, you will need the later to run the example.</p>

     <p>lastly you will need to create a variant. For this example we will be using Android so you will need to create a google project,
     this <a href="http://aerogear.org/docs/guides/aerogear-push-android/google-setup/">article</a> explains how to do this.
     Once created click on your app then click 'add' to add a variant. choose 'google cloud messaging', enter your google
         API key and the project number from your google project and click create</p>

     <p>Now before we run the example we need a mobile application to receive it. Writing a mobile app is beyond the scope
     of this example but for testing purposes we have supplied an Android app you can use, simply install on your android phone.
     It can be found <a href="http://downloads.jboss.org.apache.activemq6/HornetQAeroGear.apk">here</a>. For a more in depth mobile
         app example visit the AeroGear site.</p>

     <p>Once you have installed the mobile app you will need to configure the following:</p>
     <p>AeroGear Unified Push URL : This is the URL where your aerogear server is running, something like http://myapp-mydomain.rhcloud.com
        AeroGear Variant ID : This is the ID of the variant you created in AeroGear
        AeroGear Variant Secret : This is the secret for your variant
        GCM Sender ID : this is the Google project Number you created on Google
        Variant : you can use this to target messages if needed.
     </p>

     <p>Once you set all these correctly you should get a message saying your mobile app is registered, if you log into
         your AeroGear app you should see it registered with the variant.</p>


     <p>Now to run the example simply run the following command
         'mvn -Dendpoint=my aerogear url -Dapplicationid=my application id -Dmastersecret=my master secret -Djsse.enableSNIExtension=false clean verify'.
     If you arent using java 7 you can omit the 'jsse.enableSNIExtension=false'</p>

   <p>You should see something like this in your HornetQServer</p>
     <ol>
        <pre class="prettyprint">
           <code>
   Dec 04, 2013 3:25:39 PM org.jboss.aerogear.unifiedpush.SenderClient submitPayload
   INFO: HTTP Response code from UnifiedPush Server: 302
   Dec 04, 2013 3:25:39 PM org.jboss.aerogear.unifiedpush.SenderClient submitPayload
   INFO: Performing redirect to 'https://myapp-mydomain.rhcloud.com/rest/sender/'
   Dec 04, 2013 3:25:40 PM org.jboss.aerogear.unifiedpush.SenderClient submitPayload
   INFO: HTTP Response code from UnifiedPush Server: 200
           </code>
        </pre>
     </ol>
   <p>And on your mobile app you should see a message from HornetQ</p>

  <p>Now lets look a bit more closely at the configuration in hornetq-configuration.xml</p>
     <ol>
        <pre class="prettyprint">
           <code>
   &lt;queues>
       &lt;queue name="jms.queue.aerogearQueue">
           &lt;address>jms.queue.aerogearQueue&lt;/address>
       &lt;/queue>
   &lt;/queues>

   &lt;connector-services>
       &lt;connector-service name="aerogear-connector">
           &lt;factory-class>org.apache.activemq6.integration.aerogear.AeroGearConnectorServiceFactory&lt;/factory-class>
           &lt;param key="endpoint" value="${endpoint}"/>
           &lt;param key="queue" value="jms.queue.aerogearQueue"/>
           &lt;param key="application-id" value="${applicationid}"/>
           &lt;param key="master-secret" value="${mastersecret}"/>
       &lt;/connector-service>
   &lt;/connector-services>
           </code>
        </pre>
     </ol>
  <p>Firstly you will see that we have to create a core queue so it is available when the connector is started, the following are mandatory parameters:</p>
  <ol>
      <li>endpoint - The endpoint or URL of you AeroGear application</li>
      <li>queue - The name of the queue to consume from</li>
      <li>application-id - The application id of your mobile application in AeroGear</li>
      <li>master-secret - the secret of your mobile application in AeroGear</li>
  </ol>
  <p>as well as those there are also the following optional parameters</p>
  <ol>
      <li>ttl - The time to live for the message once AeroGear receives it</li>
      <li>badge - The badge the mobile app should use for the notification</li>
      <li>sound - The sound the mobile app should use for the notification</li>
      <li>filter - A message filter(selector) to use on the connector</li>
      <li>retry-interval - If an error occurs on send, how long before we try again</li>
      <li>retry-attempts - How many times we should try to reconnect after an error</li>
      <li>variants - A comma separated list of variants that should get the message</li>
      <li>aliases - A list of aliases that should get the message</li>
      <li>device-types - A list of device types that should get the message</li>
  </ol>
  <p>More in depth explanations of these can be found in the AeroGear docs.</p>
  <p>Now lets look at a snippet of code we used to send the message for our JMS client</p>
  <pre class="prettyprint">
      <code>
  Queue queue = (Queue)initialContext.lookup("/queue/aerogearQueue");

  // Step 3. Perform a lookup on the Connection Factory
  ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("/ConnectionFactory");

  // Step 4.Create a JMS Connection
  connection = cf.createConnection();

  // Step 5. Create a JMS Session
  Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

  // Step 6. Create a JMS Message Producer
  MessageProducer producer = session.createProducer(queue);

  // Step 7. Create a Text Message
  Message message = session.createMessage();

  message.setStringProperty("AEROGEAR_ALERT", "Hello this is a notification from HornetQ");

  producer.send(message);
      </code>
  </pre>
  <p> The most important thing here is string propert we have set on the message, i.e. 'AEROGEAR_ALERT'. This is the
      actual alert that is sent via AeroGear</p>
  <p>As well as the alert itself you can override any of the above optional parameters in the same fashionby using the
      following propert names: AEROGEAR_SOUND,AEROGEAR_BADGE,AEROGEAR_TTL,AEROGEAR_VARIANTS,AEROGEAR_ALIASES and AEROGEAR_DEVICE_TYPES</p>
  </body>
</html>