<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Berkeley Bits</title>
	<atom:link href="http://josh.media.berkeley.edu/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://josh.media.berkeley.edu</link>
	<description>Josh Holtzman's work and thoughts at UC Berkeley</description>
	<lastBuildDate>Thu, 04 Jun 2009 00:29:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ESB to the rescue?</title>
		<link>http://josh.media.berkeley.edu/?p=54</link>
		<comments>http://josh.media.berkeley.edu/?p=54#comments</comments>
		<pubDate>Thu, 04 Jun 2009 00:29:19 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[Thinking Out Loud]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/?p=54</guid>
		<description><![CDATA[I&#8217;m wondering whether the Matterhorn architecture should push some of its cross-cutting concerns out to an ESB.  Issues such as authentication, logging, auditing, etc could all be handled outside the container itself.  This would imply that all service requests must be routed through the ESB.
In the OSGi context, clients would no longer connect directly to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m wondering whether the Matterhorn architecture should push some of its cross-cutting concerns out to an ESB.  Issues such as authentication, logging, auditing, etc could all be handled outside the container itself.  This would imply that all service requests must be routed through the ESB.</p>
<p>In the OSGi context, clients would no longer connect directly to service implementations, even when they are deployed in the local container.  They must always connect to service proxies, which route the service call out of the JVM, through the ESB, and back in through the service endpoint (REST or WSDL).  The service proxy endpoints could be configured via the configuration admin service, or via context properties (e.g. config.properties).</p>
<p>The advantages include centralization of cross-cutting concerns, but all service requests would require marshalling/unmarshalling, or in other words would sacrifice runtime efficiency for centralized configuration / customization.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=54</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gripes with Distributed OSGi</title>
		<link>http://josh.media.berkeley.edu/?p=48</link>
		<comments>http://josh.media.berkeley.edu/?p=48#comments</comments>
		<pubDate>Thu, 04 Jun 2009 00:17:40 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/?p=48</guid>
		<description><![CDATA[For the most part, I&#8217;ve been pretty happy with the distributed OSGi programming model.  Unfortunately, there are a couple of areas where the reference implementation is getting under my skin:

WSDLs are not easily usable outside DOSGI
There is no obvious way to handle cross-cutting concerns

It may be possible to fix my WSDL gripe by modifying the [...]]]></description>
			<content:encoded><![CDATA[<p>For the most part, I&#8217;ve been pretty happy with the distributed OSGi programming model.  Unfortunately, there are a couple of areas where the reference implementation is getting under my skin:</p>
<ol>
<li>WSDLs are not easily usable outside DOSGI</li>
<li>There is no obvious way to handle cross-cutting concerns</li>
</ol>
<p>It may be possible to fix my WSDL gripe by modifying the CXF DOSGi implementation to use JAXB and JAX-WS annotations.  This would make the WSDLs more usable, but there was quite a bit of <a href="http://www.nabble.com/Configuring-DOSGI-to-use-JAX-WS-td23487668.html">disagreement</a> on the CXF mailing list about the wisdom of annotating the service interfaces.  Still, I might spend some time investigating whether this is a workable solution.</p>
<p>To handle  cross-cutting concerns, I&#8217;m about to take a look at <a href="http://www.eclipse.org/equinox/incubator/aspects/">Equinox Aspects</a>, but I&#8217;m hesitant to go down that path for two reasons.  First, it seems to be designed specifically for the equinox container.  And second, it is yet another pre-1.0 project, and I&#8217;m hesitant to keep building upon such bleeding-edge technologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=48</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matterhorn&#8217;s value proposition</title>
		<link>http://josh.media.berkeley.edu/?p=40</link>
		<comments>http://josh.media.berkeley.edu/?p=40#comments</comments>
		<pubDate>Sun, 31 May 2009 15:16:00 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/?p=40</guid>
		<description><![CDATA[I&#8217;ve been thinking a bit about the media capture, processing, and distribution software ecosystem.  Most of the available systems are proprietary, and the open source options are typically licensed under the GPL.  Matterhorn&#8217;s major value proposition at this point (that would be the vapor-ware point) consists of the community and the license, both being Apache-style.
But [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking a bit about the media capture, processing, and distribution software ecosystem.  Most of the available systems are proprietary, and the open source options are typically licensed under the GPL.  Matterhorn&#8217;s major value proposition at this point (that would be the vapor-ware point) consists of the community and the license, both being Apache-style.</p>
<p>But we can&#8217;t stop there.  The software itself needs to add value, and I think <em>flexibility</em> is where we should focus.  We know that we can not make any assumptions about the deployment topologies of Matterhorn capture devices or application servers.  Depending on their needs, institutions will choose the number of capture devices per venue, the number of venues, the number of encoding nodes, and the number of media analysis nodes needed to handle the quantity and types of media captured and processed.  It seems that the Matterhorn partners are in agreement about the need for this type of flexibility.</p>
<p>What we haven&#8217;t talked much about yet is flexibility of storage.  Storage presents a fundamental budget and IT challenge for any institution intending to produce and manage many terabytes of content per semester.  Institutions should be able to utilize a SAN or a content repository if they choose, but neither of these should be a requirement.  Considering the ever expanding cloud computing options, a distributed file system such as <a href="http://hadoop.apache.org/core/docs/r0.20.0/hdfs_user_guide.html">Hadoop&#8217;s HDFS</a> might be an attractive choice as well.</p>
<p>The implications of this kind of infrastructure flexibility will necessarily impact the software design.  Direct access to java.io.File will simply not be an option.  It remains to be seen whether the performance penalty of streaming multi-gigabyte files between capture clients, repositories, and application servers will be acceptable.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=40</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cooper interview</title>
		<link>http://josh.media.berkeley.edu/?p=33</link>
		<comments>http://josh.media.berkeley.edu/?p=33#comments</comments>
		<pubDate>Fri, 30 Jan 2009 23:31:55 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/?p=33</guid>
		<description><![CDATA[I&#8217;ve neither read Cooper&#8217;s books nor seen/heard him speak before today, when I found a this interview recorded at &#8220;Agile 2008&#8243;.  It&#8217;s a discussion of agile programming, why it came about, and what it&#8217;s popularity says about the converging motivations of programmers and interaction designers.  It&#8217;s long (~45 min), but I found it worthwhile.

I thought [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve neither read Cooper&#8217;s books nor seen/heard him speak before today, when I found a <a href="http://www.infoq.com/interviews/Interaction-Design-Alan-Cooper">this interview</a> recorded at &#8220;Agile 2008&#8243;.  It&#8217;s a discussion of agile programming, why it came about, and what it&#8217;s popularity says about the converging motivations of programmers and interaction designers.  It&#8217;s long (~45 min), but I found it worthwhile.<br />
<span id="more-33"></span><br />
I thought most of his points were generally sound, but I think his past programming experience really colors his process philosophy.  As the &#8220;Father of Visual Basic&#8221; he seems really focused on applications that expose business processes to users.  In academic computing we seem to be moving toward applications that allow users to build online spaces, generate and aggregate content in creative ways, and offer unique experiences for the purpose of teaching and learning.  Our users&#8217; goals are very personal&#8230; no two individuals teach the same way, and no two learn the same way.  Because of this I still see a disconnect between his process recommendations and the kind of software we produce in the higher education open/community source domain.</p>
<p>I particularly liked this quote: &#8220;What you want to do is create your number one goal, to say &#8216;what do we have to do to elevate the quality, the desirability, of the end product?&#8217;  And when you worry about costs, you hurt that.&#8221;</p>
<p>In our case, there are usually so many different metrics of quality (user interaction, scalability &amp; performance, ease of installation, ease of customization, enterprise integration, etc) that answering this question alone becomes a challenging exercise.  Throw in cost, ROI, and time-to-delivery, and that challenge just grows.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=33</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RESTEasy in Sakai 2.5.x</title>
		<link>http://josh.media.berkeley.edu/?p=27</link>
		<comments>http://josh.media.berkeley.edu/?p=27#comments</comments>
		<pubDate>Fri, 30 Jan 2009 18:29:23 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/?p=27</guid>
		<description><![CDATA[I did a bit of fiddling with RESTEasy yesterday.  Following the examples in the jboss source, I was able to resolve a URL via RESTEasy after about 30 min of pom and web.xml wrangling.  Not too bad.
RESTEasy pulled the following jars into my testing webapp (I chose the gradebook, since I&#8217;m familiar with its structure):
javassist-3.6.0.GA.jar
jaxrs-api-1.0.0.GA.jar
jsr250-api-1.0.jar
resteasy-jaxrs-1.0.0.GA.jar
scannotation-1.0.2.jar
slf4j-api-1.5.2.jar
slf4j-simple-1.5.2.jar
Is [...]]]></description>
			<content:encoded><![CDATA[<p>I did a bit of fiddling with <a href="http://jboss.org/resteasy/">RESTEasy</a> yesterday.  Following the examples in the jboss source, I was able to resolve a URL via RESTEasy after about 30 min of pom and web.xml wrangling.  Not too bad.</p>
<p>RESTEasy pulled the following jars into my testing webapp (I chose the gradebook, since I&#8217;m familiar with its structure):</p>
<p><span id="more-27"></span>javassist-3.6.0.GA.jar<br />
jaxrs-api-1.0.0.GA.jar<br />
jsr250-api-1.0.jar<br />
resteasy-jaxrs-1.0.0.GA.jar<br />
scannotation-1.0.2.jar<br />
slf4j-api-1.5.2.jar<br />
slf4j-simple-1.5.2.jar</p>
<p>Is that too heavy?  Well, since two of these are part of the logging facade, two are java standards libraries, and one is the RESTEasy implementation itself, I&#8217;d say that&#8217;s not too bad.</p>
<p>Once I was able to resolve URLs to my annotated Java classes, I decided to try something real, like annotating the method on GradebookService that finds a student&#8217;s score for a particular assignment.  Here&#8217;s where a pretty severe RESTEasy limitation hit me: the spring integration does not work with manually proxied beans.  Or put another way, you can&#8217;t resolve the JAX-RS annotations on most services in Sakai.</p>
<p>This got me thinking&#8230; is annotating the service APIs really what we want to be doing?  Is there any reason to think that a Java service API necessarily models the granularity needed for a REST-ful web service?  Assuming that the granularity of local APIs will meet the needs of remote APIs has killed a lot of technologies in the past.</p>
<p>I think in the most common cases, RESTful APIs will be different than Java APIs.  A grading widget, for instance, would most likely need to show a paged set of scores, either one student&#8217;s scores for a set of assignments or the scores for many students on one assignment, while the API might use a more fine- or course-grained call (possibly further relying on lazily loaded collections, etc).</p>
<p>I think we need two very different kinds of REST-ful web services:</p>
<p>* Services that performs CRUD operations on entities.  These should follow the RoR URL microformat.  JAX-RS isn&#8217;t really designed to handle these kinds of boilerplate operations against entities.</p>
<p>* Services that provide the server-side support for &#8220;tool views&#8221;.  These services would return exactly what particular UIs demand, possibly including data from a variety of Java services, using URL schemes defined by the needs of the tool itself.   As a bonus, these services wouldn&#8217;t need any manual proxies, so they would get around the problems in RESTEasy&#8217;s spring integration (if the tool developer wanted to use spring).</p>
<p>I haven&#8217;t tried RESTEasy with any other IOC containers yet (I&#8217;m testing in Sakai 2.5.x, afterall), but I&#8217;m sure we can figure out a way to inject back-end / data services into these front-end REST services.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=27</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A quick review of some open source workflow engines</title>
		<link>http://josh.media.berkeley.edu/?p=24</link>
		<comments>http://josh.media.berkeley.edu/?p=24#comments</comments>
		<pubDate>Fri, 16 Jan 2009 00:16:08 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/wordpress/?p=24</guid>
		<description><![CDATA[Matterhorn must provide a mechanism to allow institutions to easily configure workflows that match their local business processes for capturing, processing, and distributing media.  I&#8217;ve been looking at some open source workflow engines, hoping that one of them will meet our needs.  This is a cursory review of the engines I&#8217;ve found to date:

KEW
License: ECL
Dependencies: [...]]]></description>
			<content:encoded><![CDATA[<p>Matterhorn must provide a mechanism to allow institutions to easily configure workflows that match their local business processes for capturing, processing, and distributing media.  I&#8217;ve been looking at some open source workflow engines, hoping that one of them will meet our needs.  This is a cursory review of the engines I&#8217;ve found to date:</p>
<p><span id="more-24"></span></p>
<h4><a href="http://kew.kuali.org/">KEW</a></h4>
<p><span style="text-decoration: underline;">License</span>: ECL</p>
<p><span style="text-decoration: underline;">Dependencies</span>: KEW is part of the larger &#8220;Rice&#8221; system, and depends on a properly configured &#8220;Kuali Service Bus&#8221;.  If KEW is embedded in another Java application, a <a href="https://test.kuali.org/confluence/x/WgLwB">standalone Rice server is required</a>.</p>
<p><span style="text-decoration: underline;">Intended use</span>: KEW seems to be focused on the routing of xml documents for approval.  Routing decisions can be based on the content of the xml document.  KEW includes features for searching within documents and auditing documents throughout their lifecycle.</p>
<p><span style="text-decoration: underline;">First impressions</span>: Some of KEW&#8217;s features &#8212; its content-based routing, its user and workgroup services, its handling of notes and attachments &#8212; seem to align well with Matterhorn&#8217;s workflow needs.  Others, such as runtime editing of routing rules, don&#8217;t seem particularly useful.  Between the overhead of deploying a standalone Rice server (which seems pretty high) and KEW&#8217;s catering to a small niche market, the benefits of KEW don&#8217;t seem to be great enough to justify the costs.</p>
<h4><a href="http://www.jboss.org/jbossjbpm/">jBPM</a></h4>
<p><span style="text-decoration: underline;">License</span>: LGPL</p>
<p><span style="text-decoration: underline;">Dependencies</span>: Hibernate (+ transitive dependencies)</p>
<p><span style="text-decoration: underline;">Intended use</span>: Generic workflow engine for BPM and service orchestration.  Workflow definitions are defined in jPDL or BPEL, either via XML editing or graphically in eclipse.</p>
<p><span style="text-decoration: underline;">First impressions</span>: Seems relatively simple to embed, though the particulars of the classloading environment could make the use of hibernate problematic.  Good documentation and a quick and easy installation to jboss.  Includes a UI for instantiating new process instances and operating on existing instances.  Also includes a (beta?) GWT version of the UI.  Several major products, including Nuxeo and Alfresco, delegate their workflow needs to jBPM.</p>
<h4><a href="http://www.opensymphony.com/osworkflow/">os-workflow</a></h4>
<p><span style="text-decoration: underline;">License</span>: <a href="http://www.opensymphony.com/osworkflow/license.action">Modified Apache License</a></p>
<p><span style="text-decoration: underline;">Dependencies</span>: OSCore and PropertySet (both also from opensymphony) and JCL.  Beanshell is optional but useful for scripting workflows.  Quartz and XFire (which is now <a href="http://cxf.apache.org/">CXF</a> and has been for some time) add job scheduling and webservice capabilities, respectively.</p>
<p><span style="text-decoration: underline;">Intended use</span>: Generic workflow engine.  Defining workflows involves editing xml and scripting processes.</p>
<p><span style="text-decoration: underline;">First impressions</span>: Documentation is either out of date or the project itself is fairly stagnant.  Workflow definitions must be either on the classpath or you need to write an extension.  User / group functionality is provided through OSCore.  Proven to work in a range of classloading environments (JEE servers, OSGI, etc).  os-workflow is bundled in ServiceMix 4.</p>
<h4><a href="http://ode.apache.org/">ODE</a></h4>
<p><span style="text-decoration: underline;">License</span>: ASL 2.0</p>
<p><span style="text-decoration: underline;">Dependencies</span>: The usual suspects&#8230; various apache libraries, xml parsers, axis, etc.</p>
<p><span style="text-decoration: underline;">Intended use</span>: Executes business processes written following the WS-BPEL standard.</p>
<p><span style="text-decoration: underline;">First impressions</span>: Although this is apparently considered a workflow engine, it seems to handle service orchestration but not routing processes between automated tasks and human users.  Doesn&#8217;t seem to meet our needs.</p>
<h4><a href="http://www.intalio.com/">Intalio</a></h4>
<p><span style="text-decoration: underline;">License</span>: Mozilla Public License / Community (not open source, but still free) / Commercial.</p>
<p><span style="text-decoration: underline;">Dependencies</span>: Unclear.  I signed up on their site (which is required to download the Intalio server), but never received the promised confirmation email containing further instructions.  After trying again with a different email address, I quit trying.</p>
<p><span style="text-decoration: underline;">Intended use</span>: Workflow engine and service orchestration.  Handles BPEL4PEOPLE extension.</p>
<p><span style="text-decoration: underline;">First impressions</span>: Intalio&#8217;s &#8220;Open Source Edition&#8221; runs on Apache Geronimo.  Process definitions can be created and edited in eclipse, though Intalio&#8217;s eclipse plugins force you to log in to the Intalio site.  Although technically open source, Intalio the business keeps injecting itself into Intalio the product.  Unless they commit to the spirit of open source, I would not recommend using their product in Matterhorn.</p>
<p><span style="text-decoration: underline;"><strong>Update</strong> (01/16/2009)</span>: I chatted with some very helpful people from Intalio, who provided me with the skinny on their licensing, which places limits on what you can and can not do with the community edition of the software.  In particular, it states that you can &#8220;use the Intalio Software <strong>only with Apache Geronimo</strong> with a process data persistence provided by the Derby java database or by the MySQL database, <strong>and with authentication services provided by the built-in file-based authentication or Apache DS</strong>&#8221; [emphasis mine].  After first stating that &#8220;you have the freedom to do whatever you want with the community version,&#8221; I learned that in fact &#8220;you cannot use it with tomcat or oracle&#8230; However, you can deploy it on any number of CPUs, in production and development environment, for a unlimited use.  You cannot distribute the community license. However, you [are] free to let your clients download your community version, which is covered in the terms and agreement.&#8221;  So there you go.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=24</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stress-testing Sakai</title>
		<link>http://josh.media.berkeley.edu/?p=23</link>
		<comments>http://josh.media.berkeley.edu/?p=23#comments</comments>
		<pubDate>Fri, 19 Dec 2008 23:43:29 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/wordpress/?p=23</guid>
		<description><![CDATA[I&#8217;ve been using JWebUnit to put load on our sakai instance in order to work through some performance problems we&#8217;re seeing in production, but can&#8217;t seem to reproduce on dev or qa.  JWebUnit has been a pleasure to work with, creating 100+ concurrent users is a snap.  With code like:

tester.beginAt(&#8221;/portal&#8221;);
tester.setTextField(&#8221;eid&#8221;, userEid);
tester.setTextField(&#8221;pw&#8221;, pw);
tester.submit();
you can log a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using JWebUnit to put load on our sakai instance in order to work through some performance problems we&#8217;re seeing in production, but can&#8217;t seem to reproduce on dev or qa.  JWebUnit has been a pleasure to work with, creating 100+ concurrent users is a snap.  With code like:</p>
<p><span id="more-23"></span></p>
<p>tester.beginAt(&#8221;/portal&#8221;);<br />
tester.setTextField(&#8221;eid&#8221;, userEid);<br />
tester.setTextField(&#8221;pw&#8221;, pw);<br />
tester.submit();</p>
<p>you can log a user in, and then</p>
<p>tester.gotoPage(&#8221;/portal/site/&#8221; + siteId);<br />
tester.clickLinkWithText(&#8221;Resources&#8221;);</p>
<p>navigates the users through the portal and tools.  One issue I had with JWebUnit and Sakai is the opaque names and IDs that Sakai&#8217;s portal generates for the tool iFrames.  In Sakai, tester.gotoFrame(frameNameOrId) doesn&#8217;t work without a slight modification.  Adding some code to this method to find the frame by its order on the page rather than its name or id, solves this problem.  Calling tester.gotoFrame(&#8221;0&#8243;) put me into the first tool&#8217;s iframe, enabling navigation through tools themselves.</p>
<p>Although this kind of stress testing shouldn&#8217;t typically involve a Java developer, the code is easy enough to follow that reasonably tech-savvy QA staff should be able to put together new test scenarios.  The only &#8220;tricky&#8221; part is the multi-threading required to generate concurrent users, but that&#8217;s sufficiently separate from the &#8220;user behavior&#8221; part of the code that it shouldn&#8217;t be a problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=23</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matterhorn POC: OSGI</title>
		<link>http://josh.media.berkeley.edu/?p=22</link>
		<comments>http://josh.media.berkeley.edu/?p=22#comments</comments>
		<pubDate>Thu, 20 Nov 2008 18:58:24 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[matterhorn]]></category>
		<category><![CDATA[opencast]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/wordpress/?p=22</guid>
		<description><![CDATA[With the deadline for a grant proposal fast approaching, I&#8217;ve been placed in charge of writing about the development techniques and technologies we&#8217;ll be using in the project.  Apparently, we don&#8217;t have to include promises to use specific products, but we should reference the options we&#8217;re considering and what standards we&#8217;re planning on using.  In [...]]]></description>
			<content:encoded><![CDATA[<p>With the deadline for a grant proposal fast approaching, I&#8217;ve been placed in charge of writing about the development techniques and technologies we&#8217;ll be using in the project.  Apparently, we don&#8217;t have to include promises to use specific products, but we should reference the options we&#8217;re considering and what standards we&#8217;re planning on using.  In order to write a somewhat well thought through proposal, I&#8217;ve been researching:</p>
<p>1) Containers: JEE App Servers, OSGI frameworks (Felix and Equinox), and Spring DM<br />
2) Web services frameworks: Axis2, CXF, and JAX-RS implementations (CXF and Jersey)<br />
3) Messaging and Service Buses (Servicemix, Mule, and ActiveMQ)</p>
<p>From my brief experiments with these products, I&#8217;ve come up with a pretty trim proof-of-concept that might serve our needs in Matterhorn.  It works like this:</p>
<p>A main class boots an instance of Apache Felix, which is configured to auto-start two OSGI bundles (there are others, but only two are of particular interest): CXF and a Jackrabbit JCR server.  Other OSGI bundles can be added, removed, or refreshed at anytime via Felix&#8217;s web interface (I don&#8217;t have it up and running yet in this environment, though I have tested the management webapp that comes with Felix, and it&#8217;s pretty easy to use).</p>
<p>I&#8217;ve added a sample component that uses the JCR server to get or set content (currently a string&#8230; it&#8217;s just a proof-of-concept afterall <img src='http://josh.media.berkeley.edu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) at a particular path in the repository, and this functionality is exposed as a webservice. I was pleasantly surprised that it took only a few minutes to publish a web service.  The implementation of the component is under 100 lines of code, too.</p>
<p>What this setup buys us is a very lightweight way to manage components in a running system, so we should be able to hot-swap services as we make changes during development without stopping/restarting the entire system.</p>
<p>In addition to the cost of migrating code from existing projects (such as REPLAY) into OSGI bundles, the strict classloading rules of the OSGI environment take some time to learn, and will most likely slow developers down (not that everyone will need to work in this area of the system).  Still, with the number of projects moving toward OSGI, it seems like this is becoming the de facto Java component system, and it will behoove us all to become adept in this environment.  That, and we don&#8217;t have to get into the business of providing our own container, or trying to use one that doesn&#8217;t meet our needs for component isolation.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=22</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CXF (formerly XFIRE)</title>
		<link>http://josh.media.berkeley.edu/?p=21</link>
		<comments>http://josh.media.berkeley.edu/?p=21#comments</comments>
		<pubDate>Thu, 13 Nov 2008 23:40:08 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[Hard-Won Wisdom]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/wordpress/?p=21</guid>
		<description><![CDATA[I just ran across Apache CXF and at first glance, I&#8217;m impressed.  If it runs in an OSGI environment without too much trouble, it seems like it&#8217;ll offer a simple mechanism to add rest/soap/jms remoting while allowing for dynamic service redeployments during development.
]]></description>
			<content:encoded><![CDATA[<p>I just ran across Apache <a href="http://cxf.apache.org/">CXF</a> and at first glance, I&#8217;m impressed.  If it runs in an OSGI environment without too much trouble, it seems like it&#8217;ll offer a simple mechanism to add rest/soap/jms remoting while allowing for dynamic service redeployments during development.</p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=21</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JCR Cluster Experiments</title>
		<link>http://josh.media.berkeley.edu/?p=20</link>
		<comments>http://josh.media.berkeley.edu/?p=20#comments</comments>
		<pubDate>Wed, 22 Oct 2008 19:59:00 +0000</pubDate>
		<dc:creator>jholtzman</dc:creator>
				<category><![CDATA[What I'm Up To]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[jackrabbit]]></category>
		<category><![CDATA[jcr]]></category>
		<category><![CDATA[matterhorn]]></category>
		<category><![CDATA[opencast]]></category>

		<guid isPermaLink="false">http://josh.media.berkeley.edu/wordpress/?p=20</guid>
		<description><![CDATA[I&#8217;m starting to work on my tasklist for Matterhorn (Opencast v1.0).  One of the research tasks I have is answering how a number components spread across different JVMs (or not running in a JVM at all) and different servers can efficiently access a common content repository.  There may not be an efficient mechanism for non [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m starting to work on my tasklist for Matterhorn (Opencast v1.0).  One of the research tasks I have is answering how a number components spread across different JVMs (or not running in a JVM at all) and different servers can efficiently access a common content repository.  There may not be an efficient mechanism for non JVM components, but there must be some kind of network access.</p>
<p>I&#8217;ve put together some experiments to help me understand JCR in general and Jackrabbit in particular, with the hope that we&#8217;ll be able to leverage this JCR implementation in Matterhorn.  So far, I&#8217;ve had luck reading and writing to JCR from multiple JVMs.  The writes from JVM1 show up in JVM2, so this looks like a good start.  The code is at <a href="https://opencastproject.svn.sourceforge.net/svnroot/opencastproject/jcr/">https://opencastproject.svn.sourceforge.net/svnroot/opencastproject/jcr/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://josh.media.berkeley.edu/?feed=rss2&amp;p=20</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
