<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">

  <channel rdf:about="http://blogs.reucon.com/">
    <title>reucon blogs</title>
    <link>http://blogs.reucon.com/</link>
    <description></description>
    <items>
      <rdf:Seq>
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/09/24/springs_new_maintenance_policy.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/08/27/mvn_deploydeploy_file_with_webdav.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/08/25/estonia.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/08/23/book_openfire_administration.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/08/15/aacc_an_asterisk_java_based_solution_for_call_centers.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/08/10/outbound_message_delivery_using_agi_and_ami_in_scala.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/08/10/users_integrating_peoplesoft_and_asterisk.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/08/07/kuschelworkshop.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/08/07/using_namespaces_in_xslt_and_xpath.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/07/24/dear_sir_please_advise.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/07/22/oscon_2008_mark_spencers_session_on_thursday.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/05/10/visualizing_your_dialplan_with_a_graph.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/05/08/amazon_simpledb_performance.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/04/28/defaultagiserver_in_jboss_as_4_x.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/04/27/a_visual_overview_of_asterisk_java.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/04/23/alienating_users_by_changing_the_license.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/04/18/users_astersik_and_sugarcrm.html" />
        
        <rdf:li resource="http://blogs.reucon.com/srt/2008/04/07/openfire_enterprise_is_becoming_open_source.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/04/05/preview_support_for_asyncagi.html" />
        
        <rdf:li resource="http://blogs.reucon.com/asterisk-java/2008/03/22/frequently_asked_questions.html" />
        
      </rdf:Seq>
    </items>
  </channel>

  
  <item rdf:about="http://blogs.reucon.com/srt/2008/09/24/springs_new_maintenance_policy.html">
    <title>Spring&#039;s New Maintenance Policy</title>
    <link>http://blogs.reucon.com/srt/2008/09/24/springs_new_maintenance_policy.html</link>
    
      
        <description>
          &lt;p&gt;
SpringSource, the company behind the popular &lt;a href=&#034;http://www.springframework.org&#034;&gt;Spring Framework&lt;/a&gt; has announced a new maintenance policy: &lt;a href=&#034;http://www.springsource.com/products/enterprise/maintenancepolicy&#034;&gt;SpringSource Enterprise Maintenance Policy&lt;/a&gt;, effective September 2008.
After a lot of discussion in the community they have now added a &lt;a href=&#034;http://www.springsource.com/products/enterprise/maintenancepolicy/faq&#034;&gt;Frequently Asked Questions&lt;/a&gt; document.
&lt;/p&gt;&lt;p&gt;
Spring Framework was originally created to overcome the limitations of Enterprise Java Beans (version 1 and 2) and make it easier to build J2EE applications. It has introduced dependency injection to a broad audience and changed the way many enterprise applications are built today. For many years it has been a vendor independant Open Source project available under the Apache Software License. Some time ago the creators of Spring Framework started their own company, received venture capital and things started to change. They&#039;ve added new products like a new application server, bought &lt;a href=&#034;http://www.covalent.net/&#034;&gt;Covalent&lt;/a&gt; and are looking for opportunities to gain some money. 
&lt;/p&gt;&lt;p&gt;
In contrast to their new proprietary products which require a commercial license there has not been a real opportunity to make money from SpringFramework itself. Community support was fine, regular maintenance updates fixed the issues that were discovered and there was no need for commercial support. The recent announcement of their new maintenance policy seems to be their answer to that. They try to create a need for their support offerings. So the new policy basically states:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free maintenance updates will only be available for three months after a major release&lt;/li&gt;
&lt;li&gt;Maintenance releases will be available to paying customers under a commercial license for three years after a major release&lt;/li&gt;
&lt;li&gt;Bug fixes will be commited to a maintenance branch but minor releases will not be tagged after the three month period so the community will not know which versions are stable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Though the major releases will remain Open Source the bug free minor versions (three months later) will not. Spring Framework 2.0 was released in October 2006, Spring Framework 2.5 in November 2007 which means that the community will be without minor releases for more than 9 months if the frequency of their releases remains similar.&lt;/p&gt;
&lt;p&gt;Sure, you can always build from the sources but this looks like a bad idea given that SpringSource refuses to tag consistent and tested versions.&lt;/p&gt;
&lt;p&gt;I can understand the desire to make cash from SpringFramework but I am not sure this way will be successful. For me the products of SpringSource have lost their strong advantage of being vendor independant and fully Open Source. Upcoming projects will have to consider this fact and investigate alternatives.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.springframework.org&#034;&gt;Spring Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.springsource.com/products/enterprise/maintenancepolicy&#034;&gt;SpringSource Enterprise Maintenance Policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.springsource.com/products/enterprise/maintenancepolicy/faq&#034;&gt;Frequently Asked Questions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/08/27/mvn_deploydeploy_file_with_webdav.html">
    <title>mvn deploy:deploy-file with WebDAV</title>
    <link>http://blogs.reucon.com/srt/2008/08/27/mvn_deploydeploy_file_with_webdav.html</link>
    
      
      
        <description>
          &lt;p&gt;
Though most of the Java libraries are already in the official &lt;a href=&#034;http://maven.apache.org&#034;&gt;Maven&lt;/a&gt; repository you will from time to time encounter artifacts that are not available there. Reasons for this include licensing issues (e.g. Oracle JDBC drivers and some Sun Java APIs) and a lack of maintainers.&lt;br/&gt;
Most users of Maven run an internal repository for those artifacts and to distribute their own work products.&lt;/p&gt;
&lt;p&gt;Recent versions of Maven support uploading artificats along with their sources directly into your internal repo through WebDAV:&lt;/p&gt;
&lt;pre class=&#034;codeSample&#034;&gt;
mvn deploy:deploy-file \
        -DrepositoryId=&#034;internal&#034; \
        -Durl=&#034;dav:https://server/repo&#034; \
        -Dfile=&#034;oracle-jdbc.jar&#034; \
        -DgroupId=&#034;com.oracle&#034; \
        -DartifactId=&#034;oracle-jdbc&#034; \
        -Dversion=&#034;1.2.3&#034; \
        -Dpackaging=jar \
        -DgeneratePom=true
&lt;/pre&gt;&lt;p&gt;&lt;a href=&#034;http://blogs.reucon.com/srt/2008/08/27/mvn_deploydeploy_file_with_webdav.html&#034;&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/08/25/estonia.html">
    <title>Estonia</title>
    <link>http://blogs.reucon.com/srt/2008/08/25/estonia.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;a href=&#034;http://maps.google.de/maps?q=estonia&#034;&gt;&lt;img src=&#034;/srt/images/estonia.gif&#034; alt=&#034;Estonia&#034; align=&#034;right&#034; border=&#034;0&#034; vspace=&#034;5&#034; hspace=&#034;5&#034;&gt;&lt;/a&gt;
&lt;a href=&#034;http://en.wikipedia.org/wiki/Estonia&#034;&gt;Estonia&lt;/a&gt; is a small country in the north east of Europe in the Baltic region. As a former Soviet republic it became independant in 1991 and is a member of NATO and the European Union since 2004.
&lt;/p&gt;&lt;p&gt;
Estonia has a strong information technology sector and plays  a leading role in terms of eGovernment. It has declared internet access a basic human right and there are &lt;a href=&#034;http://www.wifi.ee/?p=area&amp;lang=eng&#034;&gt;free wlan hotspots&lt;/a&gt; throughout the country. Over 90% of the population own a mobile device while in 1991, when Estonia regained its independence, only half of the country&#039;s 1.4 million people even had a telephone line. Being a very small country without much natural resources, Estonia has realized that it has to move fast and that innovative ideas are the way to future.
&lt;/p&gt;&lt;p&gt;
In terms of political and civil freedom Estonia quite ahead in Europe. &lt;a href=&#034;http://www.rsf.org&#034;&gt;Reporters sans fronti&amp;egrave;res&lt;/a&gt; has ranked Estiona 3rd out of 169 countries in its &lt;a href=&#034;http://www.rsf.org/article.php3?id_article=24025&#034;&gt;press freedom index&lt;/a&gt; while Germany is only on rank 20. 
&lt;/p&gt;&lt;p&gt;
Liberal economic policies, &lt;a href=&#034;http://www.emta.ee/?id=1751&#034;&gt;low taxes&lt;/a&gt; and a well-educated population build a solid ground for entrepreneurs.
&lt;/p&gt;&lt;p&gt;
Next week I&#039;ll have a look on my own.
&lt;/p&gt;

        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/08/23/book_openfire_administration.html">
    <title>Book: Openfire Administration</title>
    <link>http://blogs.reucon.com/srt/2008/08/23/book_openfire_administration.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;img src=&#034;/srt/images/openfire_administration.jpg&#034; align=&#034;right&#034; vsapce=&#034;5&#034; hspace=&#034;5&#034; alt=&#034;&#034;/&gt;
&lt;a href=&#034;http://www.packt.com&#034;&gt;Packt&lt;/a&gt; has released a new book on &lt;a href=&#034;http://www.igniterealtime.org/projects/openfire/&#034;&gt;Openfire&lt;/a&gt; a Java based Instant Messaging server.&lt;br/&gt;
&lt;a href=&#034;http://www.packtpub.com/step-by-step-guide-to-openfire-administration/book&#034;&gt;Openfire Administration&lt;/a&gt; by &lt;a href=&#034;http://www.packtpub.com/author_view_profile/id/190&#034;&gt;Mayank Sharma&lt;/a&gt; is a step-by-step guide for everybody who wants to setup an internal IM server for private or corporate use. It walks you through the whole installation and configuration process including integration with external authentication sources like OpenLDAP and Active Directory and covers a bunch of useful plugins.
&lt;/p&gt;&lt;p&gt;
In contrast to other similar products Openfire is based on open standards as it uses the same &lt;a href=&#034;http://www.xmpp.org&#034;&gt;XMPP&lt;/a&gt; protocol that is also used by &lt;a href=&#034;http://www.google.com/talk/&#034;&gt;Google Talk&lt;/a&gt; and Apple&#039;s iChat. Openfire is available under the GNU General Public License so there are no license fees and it&#039;s maintained by a &lt;a href=&#034;http://www.igniterealtime.org/community&#034;&gt;vibrant community&lt;/a&gt;. There are a lot of free and commercial clients that you can use to connect to Openfire like &lt;a href=&#034;http://www.igniterealtime.org/projects/spark/&#034;&gt;Spark&lt;/a&gt; and the Flash based &lt;a href=&#034;http://www.igniterealtime.org/projects/sparkweb/&#034;&gt;SparkWeb&lt;/a&gt;, &lt;a href=&#034;http://psi-im.org/&#034;&gt;Psi&lt;/a&gt;, &lt;a href=&#034;http://www.apple.com/macosx/features/ichat.html&#034;&gt;iChat&lt;/a&gt; and &lt;a href=&#034;http://www.jabber.org/clients&#034;&gt;many more&lt;/a&gt;.&lt;br/&gt;
Additional free plugins are available that cover a wide range of requirements like connection to other IM networks like MSN, ICQ/AIM and Yahoo!, server side archiving for compliance and integration with the Asterisk PBX.
&lt;/p&gt;&lt;p&gt;
If you are new to running IM infrastructure and interested in setting up a proven enterprise ready solution Mayank&#039;s book is for you and will provide you with the information required to install and run a professional IM solution.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.igniterealtime.org/projects/openfire/&#034;&gt;Openfire product page&lt;/a&gt; at &lt;a href=&#034;http://www.igniterealtime.org&#034;&gt;igniterealtime.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.packtpub.com/step-by-step-guide-to-openfire-administration/book&#034;&gt;Openfire Administration&lt;/a&gt; at &lt;a href=&#034;http://www.packt.com&#034;&gt;Packt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.packtpub.com/article/openfire-effectively-managing-users&#034;&gt;&#034;Openfire: Effectively Managing Users&#034;&lt;/a&gt;, extracted from the book&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/08/15/aacc_an_asterisk_java_based_solution_for_call_centers.html">
    <title>AACC: An Asterisk-Java based solution for Call Centers</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/08/15/aacc_an_asterisk_java_based_solution_for_call_centers.html</link>
    
      
        <description>
          &lt;p&gt;
As far as I know, no one has yet succeeded to deliver a high quality open source package for the thousands of small and medium sized call centers around the globe that want to go &lt;em&gt;Asterisk&lt;/em&gt;. But having to buy proprietary software for managing the call center, or having to build their own software, seemed up to now the only two available options.
&lt;/p&gt;&lt;p&gt;
AACC was conceived to fulfill the need of those call centers, and make an impact in call centers similar to the one Asterisk has made in telephony. Now, that’s setting a pretty high mark for ourselves, so, how will we do it? 
&lt;/p&gt;&lt;p&gt;
First of all, we have tried very hard to understand what those small and medium sized call centers need and want. So we are designing a system which is feature rich, yet easy to manage, agile, and extensible. We didn’t set up to reinvent the wheel. So we try to take advantage of other open source projects out there that do what they do very well. One of those projects is Asterisk-Java, on which we rely to communicate back and forth with Asterisk.
&lt;/p&gt;&lt;p&gt;
Then we said to ourselves, &#034;Let’s go visual!&#034; But let’s not go exactly &lt;em&gt;mainstream&lt;/em&gt;. So we ruled out resource-hungry web based solutions, AJAX, and other technologies, and chose to use &lt;em&gt;industry proven&lt;/em&gt; Java technology, both for our clients as well as for our servers.
&lt;/p&gt;&lt;p&gt;
Agents will have a toolbar – a specialized CRM from which they will be able to see and update call information, see a script for the campaign, or have it do an automatic screen pop. Administrators will have a control panel from which they will manage all aspects of the call center with ease. And they can chose to go Linux, or to go Windows, or… Mac? Doesn’t matter, AACC is built with Java, so it’s OS independent. 
&lt;/p&gt;&lt;p&gt;
The response from the developers’ community was overwhelming, surpassing all of our expectations. We even had the luxury of turning down candidates! We are working right now on several fronts.
&lt;/p&gt;&lt;p&gt;
AACC will be suitable both for inbound as well as for outbound call centers. So we’re designing a predictive dialer, which will be able to handle multiple campaigns for multiple customers, with customizable information such as products offered, and per-campaign custom data, sales scripts, and call disposition.
&lt;/p&gt;&lt;p&gt;
Reporting is key. We are creating additional reporting information to what Asterisk provides, both for realtime and historical statistics. We&#039;re also incorporating &lt;a href=&#034;http://www.jaspersoft.com/JasperSoft_JasperReports.html&#034;&gt;JasperReports&lt;/a&gt; for stunning on-screen reporting, as well as saving the reports in the most relevant file formats, like PDF, RTF, ODT, HTML, XLS, and others. Reporting will of course be extensible, meaning that you will be able to design your own reports – with a &lt;a href=&#034;http://www.jaspersoft.com/JasperSoft_iReport.html&#034;&gt;WYSIWYG tool&lt;/a&gt;, also open source – in addition to the reports you will get out-of-the-box.
&lt;/p&gt;&lt;p&gt;
Last, but not least, AACC will be fully localizable. We hope that once initial development stage is over, we can be joined by translators who will help us localize the application to many languages.
&lt;/p&gt;&lt;p&gt;
When, you would ask, will this be production ready? We believe an alpha (i.e. not yet ready for production) version will be available before Christmas 2008. A beta version should be ready not long after that. I’ll keep you posted! Make sure you join our &lt;a href=&#034;https://lists.sourceforge.net/lists/listinfo/hanashidialer-users&#034;&gt;users list&lt;/a&gt; and visit our site at &lt;a href=&#034;http://hanashidialer.sourceforge.net&#034;&gt;http://hanashidialer.sourceforge.net&lt;/a&gt; for more information about this project.
&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/08/10/outbound_message_delivery_using_agi_and_ami_in_scala.html">
    <title>Outbound Message Delivery using AGI and AMI in Scala</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/08/10/outbound_message_delivery_using_agi_and_ami_in_scala.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;img align=&#034;right&#034; src=&#034;/asterisk-java/images/scala_logo.png&#034; border=&#034;0&#034;  alt=&#034;Scala&#034; /&gt;

From my participation in the &lt;a href=&#034;http://lists.digium.com/mailman/listinfo/asterisk-users&#034;&gt;asterisk-users&lt;/a&gt; and &lt;a href=&#034;http://lists.sourceforge.net/mailman/listinfo/asterisk-java-users&#034;&gt;asterisk-java-users&lt;/a&gt; mailing lists, and from the general questions I see, I think a common use case for the combination of the &lt;b&gt;Gateway&lt;/b&gt; interface and the &lt;b&gt;Manager&lt;/b&gt; interface is to &lt;b&gt;deliver outbound recorded messages&lt;/b&gt;. I think that an example might help to show how the two interfaces (and the two parts of Asterisk-Java) can be leveraged to deliver outbound messages.
&lt;/p&gt;

&lt;p&gt;However, because &lt;b&gt;I&#039;ve recently wanted to write more complex applications in &lt;a href=&#034;http://www.scala-lang.org/&#034;&gt;Scala&lt;/a&gt;&lt;/b&gt; (a language interoperable with Java), I&#039;m going to show you how to perform outbound message delivery with Scala and Asterisk-Java and without modification of the dialplan. &lt;b&gt;If you liked my example of Scala and want to see more, I&#039;d recommend &lt;a href=&#034;http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-1&#034;&gt;this series if you have a Java background&lt;/a&gt;.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Here&#039;s the plan for our simple application&lt;/b&gt;:
&lt;ol&gt;
&lt;li&gt;Design an Agi script that plays back our message&lt;/li&gt;
&lt;li&gt;Create &amp;amp; start an AgiServer object to host our script&lt;/li&gt;
&lt;li&gt;Create a Manager connection to Asterisk&lt;/li&gt;
&lt;li&gt;Using the Manager connection, ask Asterisk to originate a call from some destination to our Agi script&lt;/li&gt;
&lt;li&gt;Create a callback handler to act if/when the originate fails, succeeds, or we get disconnected&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;First, here&#039;s some definitions and imports we&#039;ll need&lt;/b&gt; in order to use Console (the System.out analog) and the Asterisk-Java library:
&lt;pre class=&#034;codeSample&#034;&gt;
package org.asteriskjava.blog.scala
  
import actors.Actor
import Console.println
import org.asteriskjava.fastagi._
import org.asteriskjava.live._
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Next, here&#039;s the simple Agi script singleton class&lt;/b&gt; that simply plays the hello-world sound file, and then counts to ten. This is what our users will hear as the message.
&lt;pre class=&#034;codeSample&#034;&gt;
object OutgoingMessageScript extends BaseAgiScript
{
    def service(request: AgiRequest, channel: AgiChannel): Unit = {
      streamFile(&#034;hello-world&#034;)
      for(i &lt;- 0.until(10))
        sayNumber((i+1)+&#034;&#034;)
    } 
}
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Skipping ahead of a few steps (because it doesn&#039;t depend on anything else), &lt;b&gt;here&#039;s the class that implements the callback interface&lt;/b&gt;, providing instructions on what to do if the originate dials, fails, succeeds, it&#039;s busy or not answered, or we get disconnected. This handler simply prints out what happened, though in your own code, this would be a good place to queue up something that failed, or mark it as a preliminary success (I say preliminary because this only means the originate succeeded, but not the playback... yet).
&lt;pre class=&#034;codeSample&#034;&gt;
object OutgoingMessageStatusReport extends OriginateCallback
{
    def onDialing(channel: AsteriskChannel): Unit = println(&#034;Dialing-&#034; + channel)
    def onSuccess(channel: AsteriskChannel): Unit = println(&#034;Success-&#034; + channel)
    def onNoAnswer(channel: AsteriskChannel): Unit = println(&#034;No Answer-&#034; + channel)
    def onBusy(channel: AsteriskChannel): Unit = println(&#034;Busy-&#034; + channel)
    def onFailure(cause: LiveException): Unit = println(&#034;Failure-&#034; + cause)
}
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;And finally, here&#039;s the start of the main class and method...&lt;/b&gt;
&lt;pre class=&#034;codeSample&#034;&gt;
object OutgoingMessageDelivery {
  
  def main(args : Array[String]) : Unit = {
&lt;/pre&gt;

&lt;b&gt;We&#039;ll create an AGI server, and use &lt;em&gt;Actor&lt;/em&gt; to get the startup method executed in a separate thread.&lt;/b&gt; We do this so that it will begin to accept connections without blocking our current thread.

&lt;pre class=&#034;codeSample&#034;&gt;
    // start an AGI server with the given script
    val asteriskGatewayServer = new DefaultAgiServer(OutgoingMessageScript)
    new Actor { def act = asteriskGatewayServer.startup }.start
&lt;/pre&gt;

&lt;b&gt;Next, we&#039;ll connect to Asterisk through the Manager interface too&lt;/b&gt; (via the nice Live API that wraps it).
&lt;pre class=&#034;codeSample&#034;&gt;
    // start a connection to the manager interface
    val asteriskManagerInterface = new DefaultAsteriskServer(
      &#034;192.168.1.15&#034;, 
      &#034;root&#034;, 
      &#034;secret&#034;)
&lt;/pre&gt;

&lt;b&gt;Finally, we will ask through the Manager interface that Asterisk originate&lt;/b&gt; to &lt;em&gt;&#034;SIP/xlite1&#034;&lt;/em&gt; (if you were doing massive outbound delivery with T1/E1 circuits, you&#039;d probably put something like &lt;em&gt;&#034;Zap/r1/outbound number&#034;&lt;/em&gt; here)
&lt;pre class=&#034;codeSample&#034;&gt;
    // connect some channel to the script, with a callback 
    asteriskManagerInterface.originateToApplicationAsync(
      &#034;SIP/xlite1&#034;, // **** could be &#034;Zap/r1/1234567890&#034;
      &#034;Agi&#034;, &#034;agi://&#034;+java.net.InetAddress.getLocalHost.getHostAddress, 
      10*1000, 
      OutgoingMessageStatusReport)
  }
  
}
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;And that&#039;s it!&lt;/b&gt; Asterisk will try to originate that call, and inform us (via the callback) of the outcome of the attempted originate.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Here&#039;s what the log will look like&lt;/b&gt;:
&lt;pre class=&#034;codeSample&#034;&gt;
2008-08-09 16:02:04,671 org.asteriskjava.fastagi.DefaultAgiServer INFO [Thread-1] - Listening on *:4573.
2008-08-09 16:02:04,718 org.asteriskjava.manager.internal.ManagerConnectionImpl INFO [main] - Connecting to 192.168.1.15:5038
2008-08-09 16:02:04,843 org.asteriskjava.manager.internal.ManagerConnectionImpl INFO [Asterisk-Java ManagerConnection-0-Reader-0] - Connected via Asterisk Call Manager/1.0
2008-08-09 16:02:04,859 org.asteriskjava.manager.internal.ManagerConnectionImpl INFO [main] - Successfully logged in
2008-08-09 16:02:04,875 org.asteriskjava.manager.internal.ManagerConnectionImpl INFO [main] - Determined Asterisk version: Asterisk 1.4
2008-08-09 16:02:04,890 org.asteriskjava.live.internal.AsteriskServerImpl INFO [main] - Initializing done
2008-08-09 16:02:04,937 org.asteriskjava.live.internal.ChannelManager INFO [Asterisk-Java DaemonPool-1-thread-1] - Adding channel SIP/xlite1-081da108(1218312125.13)
Dialing-AsteriskChannel[id=&#039;1218312125.13&#039;,name=&#039;SIP/xlite1-081da108&#039;,callerId=&#039;&#039;,state=&#039;DOWN&#039;,account=&#039;null&#039;,dateOfCreation=Sat Aug 09 16:02:04 EDT 2008,dialedChannel=null,dialingChannel=null,linkedChannel=null]
2008-08-09 16:02:06,218 org.asteriskjava.fastagi.DefaultAgiServer INFO [Thread-1] - Received connection from /192.168.1.15
Success-AsteriskChannel[id=&#039;1218312125.13&#039;,name=&#039;SIP/xlite1-081da108&#039;,callerId=&#039;&#039;,state=&#039;UP&#039;,account=&#039;null&#039;,dateOfCreation=Sat Aug 09 16:02:04 EDT 2008,dialedChannel=null,dialingChannel=null,linkedChannel=null]
2008-08-09 16:02:06,218 org.asteriskjava.fastagi.DefaultAgiServer INFO [Thread-1] - Thread pool started.
2008-08-09 16:02:06,375 org.asteriskjava.fastagi.internal.FastAgiConnectionHandler INFO [Asterisk-Java DaemonPool-2-thread-1] - Begin AgiScript org.asteriskjava.blog.scala.OutgoingMessageScript$ on Asterisk-Java DaemonPool-2-thread-1
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Questions?&lt;/b&gt; Post on our &lt;a href=&#034;http://lists.sourceforge.net/mailman/listinfo/asterisk-java-users&#034;&gt;mailing list&lt;/a&gt; or reply to the post!
&lt;/p&gt;

&lt;p&gt;
It&#039;s worth nothing, too, that there are certainly &lt;a href=&#034;http://www.voip-info.org/wiki/view/Asterisk+auto-dial+out+deliver+message&#034;&gt;already ways of doing this&lt;/a&gt; that may only involve the dialplan. Also, this doesn&#039;t solve the problem of &lt;a href=&#034;http://www.voip-info.org/wiki/view/Asterisk+cmd+AMD&#034;&gt;detecting answering machines&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;The complete source&lt;/b&gt;:
&lt;pre class=&#034;codeSample&#034;&gt;
package org.asteriskjava.blog.scala
  
import actors.Actor
import Console.println
import org.asteriskjava.fastagi._
import org.asteriskjava.live._

object OutgoingMessageDelivery {
  
  def main(args : Array[String]) : Unit = {
    // start an AGI server with the given script
    val asteriskGatewayServer = new DefaultAgiServer(OutgoingMessageScript)
    new Actor { def act = asteriskGatewayServer.startup }.start
    
    // start a connection to the manager interface
    val asteriskManagerInterface = new DefaultAsteriskServer(
      &#034;192.168.1.15&#034;, 
      &#034;root&#034;, 
      &#034;secret&#034;)
    
    // connect some channel to the script, with a callback 
    asteriskManagerInterface.originateToApplicationAsync(
      &#034;SIP/xlite1&#034;, // **** could be &#034;Zap/r1/1234567890&#034;
      &#034;Agi&#034;, &#034;agi://&#034;+java.net.InetAddress.getLocalHost.getHostAddress, 
      10*1000, 
      OutgoingMessageStatusReport)
  }
  
}

object OutgoingMessageScript extends BaseAgiScript
{
    def service(request: AgiRequest, channel: AgiChannel): Unit = {
      streamFile(&#034;hello-world&#034;)
      for(i &lt;- 0.until(10))
        sayNumber((i+1)+&#034;&#034;)
    } 
}

object OutgoingMessageStatusReport extends OriginateCallback
{
    def onDialing(channel: AsteriskChannel): Unit = println(&#034;Dialing-&#034; + channel)
    def onSuccess(channel: AsteriskChannel): Unit = println(&#034;Success-&#034; + channel)
    def onNoAnswer(channel: AsteriskChannel): Unit = println(&#034;No Answer-&#034; + channel)
    def onBusy(channel: AsteriskChannel): Unit = println(&#034;Busy-&#034; + channel)
    def onFailure(cause: LiveException): Unit = println(&#034;Failure-&#034; + cause)
}
&lt;/pre&gt;
&lt;p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/08/10/users_integrating_peoplesoft_and_asterisk.html">
    <title>Users: Integrating PeopleSoft and Asterisk</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/08/10/users_integrating_peoplesoft_and_asterisk.html</link>
    
      
        <description>
          &lt;p&gt;&lt;img src=&#034;/asterisk-java/images/oracle.gif&#034; align=&#034;right&#034; hspace=&#034;5&#034; vspace=&#034;5&#034;/&gt;
Chris Heller has published a series of two blog posts on how to integrate Oracle&#039;s &lt;a href=&#034;http://www.oracle.com/applications/peoplesoft-enterprise.html&#034;&gt;PeopleSoft&lt;/a&gt; with Asterisk using Asterisk-Java.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&#034;http://blog.greysparling.com/2008/07/peoplesoft-ivr-integration-easy-way.html&#034;&gt;PeopleSoft IVR Integration the easy way&lt;/a&gt; he explains how to &#034;initiate a phone call to the end user from PeopleSoft, prompt them for a PIN code, and take action in PeopleSoft depending on whether they were successful or not. This may be used as part of the initial signon process for two-factor authentication of your PeopleSoft users, or you might tie this in with some business logic (e.g. be really sure who is sending off a large wire transfer).&#034;&lt;br/&gt;
Part 2 goes into more detail on how use the integration for 
&lt;a href=&#034;http://blog.greysparling.com/2008/07/peoplesoft-telephony-two-factor.html&#034;&gt;two factor authentication&lt;/a&gt; with user events.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://blog.greysparling.com/2008/07/peoplesoft-ivr-integration-easy-way.html&#034;&gt;PeopleSoft IVR Integration the easy way (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://blog.greysparling.com/2008/07/peoplesoft-telephony-two-factor.html&#034;&gt;PeopleSoft Telephony Two Factor Authentication (Part 2)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/08/07/kuschelworkshop.html">
    <title>Kuschelworkshop</title>
    <link>http://blogs.reucon.com/srt/2008/08/07/kuschelworkshop.html</link>
    
      
      
        <description>
          &lt;p&gt;Wenn ich von meiner Teilnahme am diesjährigen &lt;a href=&#034;http://mind-hochschul-netzwerk.de/index.php/veranstaltungen/historie/mindcamp/&#034;&gt;MinD Camp&lt;/a&gt; berichte, taucht eine Frage immer wieder auf: Was hat man sich eigentlich unter dem &lt;a href=&#034;http://mind-hochschul-netzwerk.de/index.php/veranstaltungen/historie/mindcamp-programm/&#034;&gt;Programmpunkt&lt;/a&gt; &#034;Kuschelworkshop&#034; vorzustellen?&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://blogs.reucon.com/srt/2008/08/07/kuschelworkshop.html&#034;&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/08/07/using_namespaces_in_xslt_and_xpath.html">
    <title>Using Namespaces in XSLT and XPath</title>
    <link>http://blogs.reucon.com/srt/2008/08/07/using_namespaces_in_xslt_and_xpath.html</link>
    
      
        <description>
          &lt;p&gt;You can use namespaces in XSLT and XPath like&lt;/p&gt;
&lt;pre class=&#034;codeSample&#034;&gt;&amp;lt;xsl:value-of select=&#034;//a:account/b:accountType&#034;
  xmlns:a=&#034;http://example.com/accounts&#034;
  xmlns:b=&#034;http://example.com/types&#034;/&amp;gt;&lt;/pre&gt;
&lt;p&gt;For this to work in Java the document builder must be namespace aware otherwise namespaces are stripped when parsing the document and your transformation will fail for obvious reasons.&lt;/p&gt;
&lt;pre class=&#034;codeSample&#034;&gt;DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setNamespaceAware(true);&lt;/pre&gt;
&lt;p&gt;At least in JDK 6 the default seems to be false.&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/07/24/dear_sir_please_advise.html">
    <title>Dear Sir, Please Advise!</title>
    <link>http://blogs.reucon.com/srt/2008/07/24/dear_sir_please_advise.html</link>
    
      
        <description>
          &lt;p&gt;
Those emails to mailing lists come even from well-known consulting companies like Accenture.
Three emails with almost the same question within a few hours each time including the full 25 lines long company disclaimer.
&lt;/p&gt;
&lt;p&gt;
I wonder if it is known to the companies that the cheap resources are actually sponsored by well educated and expensive employees often employed by the same companies who answer those questions in their office time.
&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/07/22/oscon_2008_mark_spencers_session_on_thursday.html">
    <title>OSCON 2008, Mark Spencer&#039;s session on Thursday</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/07/22/oscon_2008_mark_spencers_session_on_thursday.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;a href=&#034;http://conferences.oreilly.com/oscon&#034;&gt;
&lt;img align=&#034;right&#034; src=&#034;http://assets.en.oreilly.com/1/event/12/oscon2008_banner_125x125.gif&#034; width=&#034;125&#034; height=&#034;125&#034;  border=&#034;0&#034;  alt=&#034;OSCON 2008&#034; title=&#034;OSCON 2008&#034;  /&gt;
&lt;/a&gt;
Every year, O&#039;Reilly hosts an open-source conference in Portland, OR, USA, in July. If anyone interested is at the conference, I&#039;ll be at Mark Spencer&#039;s talk on Thursday at 1:45pm. Stop by and say hello -- I&#039;ll be wearing the conference badge with my name on it. I&#039;m always delighted to meet other like-minded Asterisk and Asterisk-Java users.
&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/05/10/visualizing_your_dialplan_with_a_graph.html">
    <title>Visualizing your dialplan with a graph</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/05/10/visualizing_your_dialplan_with_a_graph.html</link>
    
      
      
        <description>
          &lt;p&gt;
A few weeks ago, Matt Gibson &lt;a href=&#034;http://lists.digium.com/pipermail/asterisk-users/2008-April/209914.html&#034;&gt;posted on the asterisk-users discussion list&lt;/a&gt; that he was looking for a GraphViz script he had heard about a few years ago that could generate graphs of Asterisk&#039;s &lt;tt&gt;extensions.conf&lt;/tt&gt; file that defines the dialplan. At the time, I had been working on a &lt;a href=&#034;http://www.sourceforge.net/projects/egonet/&#034;&gt;recently open-sourced application, EgoNet&lt;/a&gt;, for a researcher I work with. This application taught me much about social networks, particularly his specialty of egocentric networks, and it also helped me learn a ton about the &lt;a href=&#034;http://jung.sourceforge.net/&#034;&gt;Java Universal Network/Graph Framework (or JUNG)&lt;/a&gt;. I immediately thought about combining my experience with JUNG and Asterisk, and wrote a rudimentary (read as: extremely ugly) parser for extensions.conf and generated a crude graph of the sample dialplan.
&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://blogs.reucon.com/asterisk-java/2008/05/10/visualizing_your_dialplan_with_a_graph.html&#034;&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/05/08/amazon_simpledb_performance.html">
    <title>Amazon SimpleDB Performance</title>
    <link>http://blogs.reucon.com/srt/2008/05/08/amazon_simpledb_performance.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;a href=&#034;http://www.amazonaws.com/&#034;&gt;Amazon&lt;/a&gt; offers a few massivly scalable web services like &lt;a href=&#034;http://www.amazon.com/EC2-AWS-Service-Pricing/b/ref=sc_fe_l_2?ie=UTF8&amp;amp;node=201590011&amp;amp;no=3435361&amp;amp;me=A36L942TSJ2AJA&#034;&gt;Elastic Compute Cloud&lt;/a&gt; (EC2) and &lt;a href=&#034;http://www.amazon.com/S3-AWS-home-page-Money/b/ref=sc_fe_l_2?ie=UTF8&amp;amp;node=16427261&amp;amp;no=3435361&amp;amp;me=A36L942TSJ2AJA&#034;&gt;Simple Storage System&lt;/a&gt; (S3). EC2 delivers virtual Linux boxes and S3 offers fail-safe disk space. Those services can be used as building blocks for custom applications. They are well thought out and allow you to start small and grow fast while concentrating on your own business (application) and leaving the operational details to a third party.
&lt;/p&gt;&lt;p&gt;
A rather new service and still in limited beta is &lt;a href=&#034;http://www.amazon.com/SimpleDB-AWS-Service-Pricing/b/ref=sc_fe_l_2?ie=UTF8&amp;amp;node=342335011&amp;amp;no=3435361&amp;amp;me=A36L942TSJ2AJA&#034;&gt;Amazon SimpleDB&lt;/a&gt;. It is &#034;a web service for running queries on structured data in real time.&#034; While S3 stores unstructed data like files, SimpleDB stores items with attributes organized in domains. The concept is a similar to other databases where an item could roughly be described as a row, an attribute as a column and a domain as a table. There are no connections between the domains (i.e. no foreign keys or referential integrity) but you can run arbitrary queries on the attributes of the items in a domain.&lt;br/&gt;
Like all Amazon webservices SimpleDB is accessible through HTTP using either a SOAP or a REST-style API. You can GET, PUT or DELETE items in a domain along with their attributes and you can QUERY a domain with a simple set of operators: =, !=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=, STARTS-WITH,  AND, OR, NOT, INTERSECTION AND UNION. A QUERY returns a list of item identifiers and is quite fast. If you also need the attributes of these items however you must execute an additional GET request for each item that has been returned.
&lt;/p&gt;&lt;p&gt;&lt;b&gt;What does that mean in practice?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
Say you store a set of blog entries in SimpleDB and want to show a list of the ten least recently added entries with title, date and author. You would issues a QUERY request that returns the identifiers of the ten entries and then issue ten GET requests to retrieve the title, date and author attributes for each of them. That makes a total of 11 requests that have to be executed. In general you need n+1 requests for a query that returns n items.
&lt;/p&gt;&lt;p&gt;
Amazon explains that you can &lt;a href=&#034;http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/EfficientDataRetrieval.html&#034;&gt;run these queries in parallel&lt;/a&gt; to improve the overall response time for a query but that means you are running 50 or 100 parallel requests for just 10 visitors looking at your list. Sure, you can also cache them or do some other fancy tricks but the problem remains: Any query to SimpleDB requires n+1 HTTP requests. The bigger your result sets the worse your performance. Interestingly enough the n+1 problem is well known (and dreaded) from O/R-mapping where it can hit you if relatated objects are loaded in an improper way. The difference is however that with SimpleDB you can&#039;t escape it and that an HTTP request to SimpleDB is more expensive than an additional SELECT to a conventional database.
&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;&lt;b&gt;So what&#039;s the point here?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
In my opinion SimpleDB in its current shape can only be used for very few use cases if at least one of the following conditions is met:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your application only uses PUT, GET and DELETE requests&lt;/li&gt;
&lt;li&gt;Your application only uses queries that return very few items (10 or less)&lt;/li&gt;
&lt;li&gt;Your application only uses queries very infrequently, for example if serving all data from a distributed cache and using SimpleDB only as a backup store for structured data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maybe that&#039;s one of the reasons for Amazons to partner with Sun and provide &lt;a href=&#034;http://www.amazon.com/gp/browse.html?node=643951011&#034;&gt;support for MySQL on EC2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update 2008-08-27&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
Amazon has updated their API to include a Query Sort feature to sort result sets based on a single attribute and add to return all information associated with the items of a particular Query:
&lt;/p&gt;
&lt;blockquote&gt;The &lt;a href=&#034;http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDB_API_QueryWithAttributes.html&#034;&gt;QueryWithAttributes&lt;/a&gt; feature provides the ability for developers to retrieve all the information associated with items returned as a response to a particular query. This highly requested feature simplifies the application development process; instead of issuing a query followed by a series of read requests, application developers can now use a single API call to retrieve all information about items stored in Amazon SimpleDB. This is useful for developers who are not using parallel programming or who utilize programming languages that do not support parallel programming.&lt;/blockquote&gt;
&lt;p&gt;I didn&#039;t have a chance to test these two new features yet but from the spec it seems like they could make SDB an interesting alternative to traditional databases in a few more scenarios.&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/04/28/defaultagiserver_in_jboss_as_4_x.html">
    <title>DefaultAgiServer in JBoss AS 4.x</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/04/28/defaultagiserver_in_jboss_as_4_x.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;img alt=&#034;JBoss Logo&#034; src=&#034;http://blogs.reucon.com/asterisk-java/images/jboss_logo.gif&#034; align=&#034;right&#034;/&gt;
A recent post to the mailing list asked about how to stop and start a FastAGI server and how folks host Fast AGI servers. I shared some code I wrote for a &lt;a href=&#034;http://asterisk-java.org/development/faq.html&#034;&gt;small MBean that starts and stops a DefaultAgiServer&lt;/a&gt; from Asterisk-Java -- see the last FAQ question &lt;em&gt;&#034;Can I have an example of using an AGI server in a container like JBoss?&#034;&lt;/em&gt;. The MBean uses the JBoss-specific &lt;tt&gt;@Management&lt;/tt&gt; annotation.
&lt;/p&gt;
&lt;p&gt;
I work on a home-grown call center management application (EJBs, JSP webpages, and two standalone Java Swing applications, all talking through JBoss Application Server), and we&#039;ve already been able to add a couple features with Asterisk-Java that add value and utility to our application. I didn&#039;t want to introduce another service to our infrastructure and I also didn&#039;t want to write an entirely new Agi server, as Stefan had done a great job on that part. Thus, the above MBean was born.
&lt;/p&gt;
&lt;p&gt;
Comments and suggestions and other examples of how you run your Agi scripts are welcome and encouraged on &lt;a href=&#034;http://asterisk-java.org/development/mail-lists.html&#034;&gt;our mailing lists.&lt;/a&gt;
&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/04/27/a_visual_overview_of_asterisk_java.html">
    <title>A Visual Overview Of Asterisk-Java</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/04/27/a_visual_overview_of_asterisk_java.html</link>
    
      
        <description>
          &lt;p&gt;
Atlassian has improved the charting features in their latest release of &lt;a href=&#034;http://www.atlassian.com/software/fisheye/&#034;&gt;Fisheye&lt;/a&gt;. So I had a look at the Asterisk-Java code base to see how it&#039;s major packages compare in size. This is what i got:
&lt;/p&gt;
&lt;img src=&#034;/asterisk-java/images/aj-stats-2008.png&#034;/&gt;
&lt;p&gt;Let&#039;s have a look at the individual packages:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Manager API&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
Support for the Manager API (manager) is by far the biggest package in Asterisk-Java. It provides access to a variety of Asterisk features from call control to monitoring and call center management. The size of this package and its steady groth ressemble the groth of features exposed by Asterisk.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Asterisk Gateway Interface&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
FastAGI is an easy way to implement IVR applications in Java. The feature set is quite stable over time so we don&#039;t see significant changes in the code base. You&#039;ll even notice that support for &lt;a href=&#034;/asterisk-java/2008/04/05/preview_support_for_asyncagi.html&#034;&gt;AsyncAGI&lt;/a&gt; (i.e. running AGI scripts over the Manager API) was a quick win as it didn&#039;t have a significant impact on the overall size of the package.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Parsing Configuration Files&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
The config package is quite new and supports parsing Asterisk&#039;s configuration files. All config files use the same syntax and group up configuration items into contexts. It supports inheritance of contexts, includes and forms the basis for further development like configuration editors or dialplan visualization (stay tuned for more information from Martin on this topic).&lt;br&gt;
Originally developed to parse voicemail meta files the config package is certainly a candidate for future growth.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Live API&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
The live API is our own invention and takes integration a step further. Instead of only providing access to the basic features exposed by Asterisk the live API offers real objects with state and behavior that model core concepts found in Asterisk. There are channel objects with state like the current caller id, the progress or hangup reason and methods to redirect channels, start and stop monitoring and much more.&lt;/br&gt;
The live API speeds up developers by hiding the sometimes tedious details of the low level Asterisk APIs and has reached a significant size. Next to the config package the live API is under active development and will certainly grow in the future.
&lt;/p&gt;

        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/04/23/alienating_users_by_changing_the_license.html">
    <title>Alienating Users By Changing The License</title>
    <link>http://blogs.reucon.com/srt/2008/04/23/alienating_users_by_changing_the_license.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;img src=&#034;/srt/images/gnu.png&#034; align=&#034;right&#034; hspace=&#034;5&#034; alt=&#034;&#034;/&gt;
In the past days I&#039;ve notices two Open Source projects that changed their license from a commercial friendly license (BSD/MIT, LGPL) to GPL. The motivation of &lt;a href=&#034;http://wrapper.tanukisoftware.org/&#034;&gt;Java Service Wrapper&lt;/a&gt; and &lt;a href=&#034;http://extjs.com/&#034;&gt;Ext JS&lt;/a&gt; seems to be to offer commercial licenses for closed-source projects that cannot use GPLed libraries.
&lt;/p&gt;&lt;p&gt;
While I understand that these projects need resources to enhance their products this step will have an impact on the trust companies will have in Open Source projects. It seems both projects have used a commercial friendly license to attract people. Now that they have an established user base they try to monetize this asset. It remains to be seen if this will work as various groups are already discussing the options to fork these projects, nevertheless the overall damange remains. &#034;A foundation you can build on&#034; - the claim of Ext JS - leaves a bad taste. Not only that companies developing closed-source products will have to pay now (or switch or stick with the old soon unsupported version), Open Source projects with a more commercial friendly license will also have to look for alternatives.
&lt;/p&gt;&lt;p&gt;
Another interesting aspect is the current use of the &lt;a href=&#034;http://en.wikipedia.org/wiki/GNU_General_Public_License&#034;&gt;GPL&lt;/a&gt;: Once designed to grant a maximum of freedom to the users of software it has become a means to restrict usage. Many projects that use the GPL choose to dual license their software and sell commercial licenses to those who can&#039;t use GPLed libraries in their products.
&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/04/18/users_astersik_and_sugarcrm.html">
    <title>Users: Astersik and SugarCRM</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/04/18/users_astersik_and_sugarcrm.html</link>
    
      
        <description>
          &lt;p&gt;
Mauro has published an interesting article about &lt;a href=&#034;http://www.beanizer.org/site/index.php/en/Articles/SugarCRM-and-Asterisk-integration-in-Java-First-steps.html&#034;&gt;Asterisk and SugarCRM&lt;/a&gt; integration. A swing popup notifies its user on incoming calls and provides additional information about the customer that is retrieved from &lt;a href=&#034;http://www.sugarcrm.com/&#034;&gt;SugarCRM&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
The sample application serves as a good example on how to use Asterisk&#039;s Manager API with Asterisk-Java.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.beanizer.org/site/index.php/en/Articles/SugarCRM-and-Asterisk-integration-in-Java-First-steps.html&#034;&gt;Mauro: SugarCRM and Asterisk integration in Java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/srt/2008/04/07/openfire_enterprise_is_becoming_open_source.html">
    <title>Openfire Enterprise is becoming Open Source</title>
    <link>http://blogs.reucon.com/srt/2008/04/07/openfire_enterprise_is_becoming_open_source.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;img src=&#034;/srt/images/ignite_fans_logo-openfire.gif&#034; align=&#034;left&#034; hspace=&#034;5&#034; alt=&#034;&#034;/&gt;
The enterprise edition of the popular Java-based XMPP server Openfire is &lt;a href=&#034;http://www.igniterealtime.org/community/blogs/ignite/2008/04/07/openfire-enterprise-is-becoming-open-source&#034;&gt;becoming Open Source&lt;/a&gt;. This also includes the Flex-based IM client Sparkweb.
&lt;/p&gt;&lt;p&gt;
As Matt points out the the clustering functionality in the enterprise edition will not be made Open Source: &#034;Part of the reason for this is that it uses a third-party commercial library for clustering.&#034;&lt;br/&gt;
Nevertheless, due to the moduluar design of Openfire, the use of Coherence can quite easily be substituted by a free alternative like Terracotta.
&lt;/p&gt;&lt;p&gt;
This is really great news. Thanks to &lt;a href=&#034;http://www.jivesoftware.com/&#034;&gt;Jive&lt;/a&gt; for their commitment to the community.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update 2008-04-07&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Dombiak Gaston has followed up with a &lt;a href=&#034;http://www.igniterealtime.org/community/blogs/ignite/2008/04/07/turning-openfire-enterprise-into-an-open-source-product&#034;&gt;roadmap&lt;/a&gt; describing the two phases of the transition. The first phase with the majority of features is scheduled be finished by April, 27th.
&lt;/p&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/04/05/preview_support_for_asyncagi.html">
    <title>Preview: Support for AsyncAGI</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/04/05/preview_support_for_asyncagi.html</link>
    
      
        <description>
          &lt;p&gt;
I&#039;ve just finished adding support for &lt;a href=&#034;http://www.moythreads.com/wordpress/2007/12/24/asterisk-asynchronous-agi/&#034;&gt;Asynchronous AGI&lt;/a&gt; to Asterisk-Java. AsyncAGI allows you to run AGI scripts through a Manager API connection.
&lt;/p&gt;&lt;p&gt;
The way AsyncAGI is supported by Asterisk-Java hides the differences in the underlying communication from the users of our library. Your AGI scripts developed for FastAGI will run with AsyncAGI without a change.
&lt;/p&gt;&lt;p&gt;
To make use of AsyncAGI add the following extension to you dialplan:
&lt;/p&gt;
&lt;pre class=&#034;codeSample&#034;&gt;
exten =&amp;gt; 1234,1,Agi(agi:async)
&lt;/pre&gt;
&lt;p&gt;
Create a simple AGI script, pass it to AsyncAgiServer and register the AsyncAgiServer as a listener to a ManagerConnection:
&lt;/p&gt;
&lt;pre class=&#034;codeSample&#034;&gt;
public class SampleScript extends BaseAgiScript
{
    public void service(AgiRequest request, AgiChannel channel) throws AgiException
    {
        channel.streamFile(&#034;tt-monkeys&#034;);
    }

    public static void main(String[] args) throws Exception
    {
        ManagerConnection connection;
        AsyncAgiServer agiServer;

        connection = new DefaultManagerConnection(&#034;localhost&#034;, &#034;manager&#034;, &#034;pa55w0rd&#034;);
        agiServer = new AsyncAgiServer(new SampleScript());
        connection.addEventListener(agiServer);
        connection.login();

        while (true)
        {
            Thread.sleep(1000L);
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;
To run the sample you need the &lt;a href=&#034;http://asterisk-java.org/download/1.0.0-SNAPSHOT&#034;&gt;latest snapshot&lt;/a&gt; of Asterisk-Java 1.0.0 (at least 20080404.222056-117) and Asterisk 1.6.0.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.moythreads.com/wordpress/2007/12/24/asterisk-asynchronous-agi/&#034;&gt;Moy: Asterisk Asynchronous AGI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
  </item>
  
  <item rdf:about="http://blogs.reucon.com/asterisk-java/2008/03/22/frequently_asked_questions.html">
    <title>Frequently Asked Questions</title>
    <link>http://blogs.reucon.com/asterisk-java/2008/03/22/frequently_asked_questions.html</link>
    
      
        <description>
          &lt;p&gt;
Thanks to Martin we now have a &lt;a href=&#034;http://asterisk-java.org/faq&#034;&gt;FAQ section&lt;/a&gt; available as part of our documentation.
&lt;/p&gt;&lt;p&gt;
The FAQ covers the questions we encounter on our &lt;a href=&#034;http://asterisk-java.org/development/mail-lists.html&#034;&gt;mailing lists&lt;/a&gt; and that we think will be interesting to a more general audience. Please check them before asking questions to make sure you don&#039;t ask questions again that have already been answered before.
&lt;/p&gt;&lt;p&gt;
If you notice anything we&#039;ve missed feel free to post a comment or join our mailing list and propose your addition.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://asterisk-java.org/development/faq.html&#034;&gt;Asterisk-Java Frequently Asked Questions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
  </item>
  

</rdf:RDF>
