You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bu...@apache.org on 2013/03/01 09:57:32 UTC
svn commit: r852510 - in /websites/staging/sling/trunk/content: ./
documentation/tutorials-how-tos/how-to-manage-events-in-sling.html
Author: buildbot
Date: Fri Mar 1 08:57:32 2013
New Revision: 852510
Log:
Staging update by buildbot for sling
Modified:
websites/staging/sling/trunk/content/ (props changed)
websites/staging/sling/trunk/content/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html
Propchange: websites/staging/sling/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Mar 1 08:57:32 2013
@@ -1 +1 @@
-1448208
+1451530
Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html
==============================================================================
--- websites/staging/sling/trunk/content/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html (original)
+++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html Fri Mar 1 08:57:32 2013
@@ -124,7 +124,15 @@ Sling makes a distinction between events
<p>You can refer to the <a href="/apidocs/sling6/org/apache/sling/api/SlingConstants.html">org.apache.sling.api.SlingConstants</a> class in the Javadocs to know about other events available in Sling.</p>
<h2 id="sending-job-events">Sending Job Events</h2>
-<p>To send a job event the service needs to implement the <strong>org.osgi.service.event.EventHandler</strong> and <strong>org.apache.sling.event.JobProcessor</strong> interfaces:</p>
+<p>To send an event the following code can be used:
+ #!java
+ public void sendEvent() {
+ final Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put(JobUtil.PROPERTY_JOB_TOPIC, JOB_TOPIC);
+ props.put("resourcePath", RESOURCE_PATH);
+ final Event myEvent = new Event(JobUtil.TOPIC_JOB, props);
+ eventAdmin.sendEvent(myEvent);</p>
+<p>However, for our example, to send a job event the service needs to implement the <strong>org.osgi.service.event.EventHandler</strong> and <strong>org.apache.sling.event.JobProcessor</strong> interfaces:</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">DropBoxService</span> <span class="kd">implements</span> <span class="n">JobProcessor</span><span class="o">,</span> <span class="n">EventHandler</span> <span class="o">{</span>
</pre></div>
</td></tr></table>
@@ -157,60 +165,68 @@ Sling makes a distinction between events
</td></tr></table>
<p>The <strong>org.apache.sling.event.JobProcessor#process(Event event)</strong> method needs to be implemented:</p>
-<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">process</span><span class="o">(</span><span class="n">Event</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
-
- <span class="c1">// get the resource event information</span>
- <span class="n">String</span> <span class="n">propPath</span> <span class="o">=</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">event</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="n">SlingConstants</span><span class="o">.</span><span class="na">PROPERTY_PATH</span><span class="o">);</span>
- <span class="n">String</span> <span class="n">propResType</span> <span class="o">=</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">event</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="n">SlingConstants</span><span class="o">.</span><span class="na">PROPERTY_RESOURCE_TYPE</span><span class="o">);</span>
+<p>Its logic is as follows:</p>
+<ul>
+<li>The OSGI event is analyzed.</li>
+<li>If the event is a file that has been added to <em>/tmp/dropbox</em>:</li>
+<li>
+<ul>
+<li>An event is created with 2 properties:</li>
+</ul>
+</li>
+<li>
+<ul>
+<li>
+<ul>
+<li>A property to set the event as a job event.</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+<ul>
+<li>
+<ul>
+<li>A property for the file path.</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+<ul>
+<li>The job event is sent to all the listeners that subscribe to the topic of the event.</li>
+</ul>
+<h1 id="java">!java</h1>
+<p>public boolean process(Event event) {</p>
+<div class="codehilite"><pre><span class="sr">//</span> <span class="n">get</span> <span class="n">the</span> <span class="n">resource</span> <span class="n">event</span> <span class="n">information</span>
+<span class="n">String</span> <span class="n">propPath</span> <span class="o">=</span> <span class="p">(</span><span class="n">String</span><span class="p">)</span> <span class="n">event</span><span class="o">.</span><span class="n">getProperty</span><span class="p">(</span><span class="n">SlingConstants</span><span class="o">.</span><span class="n">PROPERTY_PATH</span><span class="p">);</span>
+<span class="n">String</span> <span class="n">propResType</span> <span class="o">=</span> <span class="p">(</span><span class="n">String</span><span class="p">)</span> <span class="n">event</span><span class="o">.</span><span class="n">getProperty</span><span class="p">(</span><span class="n">SlingConstants</span><span class="o">.</span><span class="n">PROPERTY_RESOURCE_TYPE</span><span class="p">);</span>
- <span class="c1">// an event is sent if a file is added to /tmp/dropbox</span>
- <span class="k">if</span> <span class="o">(</span><span class="n">propPath</span><span class="o">.</span><span class="na">startsWith</span><span class="o">(</span><span class="s">"/tmp/dropbox"</span><span class="o">)</span> <span class="o">&&</span> <span class="n">propResType</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="s">"nt:file"</span><span class="o">))</span> <span class="o">{</span>
+<span class="sr">//</span> <span class="n">an</span> <span class="n">event</span> <span class="n">is</span> <span class="n">sent</span> <span class="k">if</span> <span class="n">a</span> <span class="n">file</span> <span class="n">is</span> <span class="n">added</span> <span class="n">to</span> <span class="sr">/tmp/</span><span class="n">dropbox</span>
+<span class="k">if</span> <span class="p">(</span><span class="n">propPath</span><span class="o">.</span><span class="n">startsWith</span><span class="p">(</span><span class="s">"/tmp/dropbox"</span><span class="p">)</span> <span class="o">&&</span> <span class="n">propResType</span><span class="o">.</span><span class="n">equals</span><span class="p">(</span><span class="s">"nt:file"</span><span class="p">))</span> <span class="p">{</span>
- <span class="c1">// configure the job event</span>
- <span class="kd">final</span> <span class="n">Dictionary</span><span class="o"><</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">></span> <span class="n">props</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Hashtable</span><span class="o"><</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">>();</span>
- <span class="n">props</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">EventUtil</span><span class="o">.</span><span class="na">PROPERTY_JOB_TOPIC</span><span class="o">,</span> <span class="n">JOB_TOPIC</span><span class="o">);</span>
- <span class="n">props</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"resourcePath"</span><span class="o">,</span> <span class="n">propPath</span><span class="o">);</span>
+ <span class="sr">//</span> <span class="n">configure</span> <span class="n">the</span> <span class="n">job</span> <span class="n">event</span>
+ <span class="n">final</span> <span class="n">Dictionary</span><span class="o"><</span><span class="n">String</span><span class="p">,</span> <span class="n">Object</span><span class="o">></span> <span class="n">props</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Hashtable</span><span class="o"><</span><span class="n">String</span><span class="p">,</span> <span class="n">Object</span><span class="o">></span><span class="p">();</span>
+ <span class="n">props</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">EventUtil</span><span class="o">.</span><span class="n">PROPERTY_JOB_TOPIC</span><span class="p">,</span> <span class="n">JOB_TOPIC</span><span class="p">);</span>
+ <span class="n">props</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s">"resourcePath"</span><span class="p">,</span> <span class="n">propPath</span><span class="p">);</span>
- <span class="c1">// create the job event</span>
- <span class="n">Event</span> <span class="n">dropboxJobEvent</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Event</span><span class="o">(</span><span class="n">EventUtil</span><span class="o">.</span><span class="na">TOPIC_JOB</span><span class="o">,</span> <span class="n">props</span><span class="o">);</span>
+ <span class="sr">//</span> <span class="n">create</span> <span class="n">the</span> <span class="n">job</span> <span class="n">event</span>
+ <span class="n">Event</span> <span class="n">dropboxJobEvent</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Event</span><span class="p">(</span><span class="n">EventUtil</span><span class="o">.</span><span class="n">TOPIC_JOB</span><span class="p">,</span> <span class="n">props</span><span class="p">);</span>
- <span class="c1">// deliver the job event</span>
- <span class="n">eventAdmin</span><span class="o">.</span><span class="na">sendEvent</span><span class="o">(</span><span class="n">dropboxJobEvent</span><span class="o">);</span>
+ <span class="sr">//</span> <span class="n">deliver</span> <span class="n">the</span> <span class="n">job</span> <span class="n">event</span>
+ <span class="n">eventAdmin</span><span class="o">.</span><span class="n">sendEvent</span><span class="p">(</span><span class="n">dropboxJobEvent</span><span class="p">);</span>
- <span class="n">log</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"the dropbox job has been sent: {}"</span><span class="o">,</span> <span class="n">propPath</span><span class="o">);</span>
- <span class="o">}</span>
+ <span class="nb">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"the dropbox job has been sent: {}"</span><span class="p">,</span> <span class="n">propPath</span><span class="p">);</span>
+<span class="p">}</span>
- <span class="c1">// all set and done</span>
- <span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
-<span class="o">}</span>
+<span class="sr">//</span> <span class="n">all</span> <span class="n">set</span> <span class="ow">and</span> <span class="n">done</span>
+<span class="k">return</span> <span class="n">true</span><span class="p">;</span>
</pre></div>
-</td></tr></table>
+
+<p>}</p>
+</li>
+</ul>
<p>The complete code for the <strong>DropBoxService</strong> service is available <a href="DropBoxService.java">here</a>.</p>
<h2 id="listening-to-job-events">Listening to Job Events</h2>
<p>Now that you have implemented a service that sends a job event when a file is uploaded to <strong>/tmp/dropbox</strong>, you will implement the service <strong>DropBoxEventHandler</strong> that listens to those job events and moves the files to a location according to their MIME types.</p>
@@ -228,34 +244,24 @@ Sling makes a distinction between events
</td></tr></table>
<p>Some class fields need to be defined:</p>
-<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13</pre></div></td><td class="code"><div class="codehilite"><pre><span class="cm">/** Default log. */</span>
-<span class="kd">protected</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">log</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="na">getClass</span><span class="o">());</span>
-
-<span class="nd">@Reference</span>
-<span class="kd">private</span> <span class="n">SlingRepository</span> <span class="n">repository</span><span class="o">;</span>
-
-<span class="nd">@Reference</span>
-<span class="kd">private</span> <span class="n">JcrResourceResolverFactory</span> <span class="n">resolverFactory</span><span class="o">;</span>
-
-<span class="kd">private</span> <span class="kd">final</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">IMAGES_PATH</span> <span class="o">=</span> <span class="s">"/dropbox/images/"</span><span class="o">;</span>
-<span class="kd">private</span> <span class="kd">final</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">MUSIC_PATH</span> <span class="o">=</span> <span class="s">"/dropbox/music/"</span><span class="o">;</span>
-<span class="kd">private</span> <span class="kd">final</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">MOVIES_PATH</span> <span class="o">=</span> <span class="s">"/dropbox/movies/"</span><span class="o">;</span>
-<span class="kd">private</span> <span class="kd">final</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">OTHER_PATH</span> <span class="o">=</span> <span class="s">"/dropbox/other/"</span><span class="o">;</span>
-</pre></div>
-</td></tr></table>
-
+<ul>
+<li>The default log.</li>
+<li>The references to the SlingRepository and the JcrResourceResolverFactory services, which are used in the implementation.</li>
+<li>
+<p>The destination paths of the files.</p>
+<h1 id="java_1">!java</h1>
+<p>/*<em> Default log. </em>/
+protected final Logger log = LoggerFactory.getLogger(this.getClass());</p>
+<p>@Reference
+private SlingRepository repository;</p>
+<p>@Reference <br />
+private JcrResourceResolverFactory resolverFactory;</p>
+<p>private final static String IMAGES_PATH = "/dropbox/images/";
+private final static String MUSIC_PATH = "/dropbox/music/";
+private final static String MOVIES_PATH = "/dropbox/movies/";
+private final static String OTHER_PATH = "/dropbox/other/";</p>
+</li>
+</ul>
<p>The <strong>org.osgi.service.event.EventHandler#handleEvent(Event event)</strong> method needs to be implemented:</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
@@ -358,7 +364,7 @@ Sling makes a distinction between events
<p>The complete code for the <strong>DropBoxEventHandler</strong> service is available <a href="DropBoxEventHandler.java">here</a>.</p>
<div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
- Rev. 1345850 by fmeschbe on Mon, 4 Jun 2012 07:40:42 +0000
+ Rev. 1451530 by cziegeler on Fri, 1 Mar 2013 08:57:20 +0000
</div>
<div class="trademarkFooter">
Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project