<?xml version="1.0" encoding="UTF-8"?>

<rss version='2.0'
     xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
    <channel>
        <!-- This XML Feed shows details for the page Interface21 Team Blog -->
        <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/
          </creativeCommons:license>
        <title>Interface21 Team Blog</title>
        <description></description>
                <category>Spring</category>

        <pubDate>Fri, 06 Apr 2007 13:37:23 -0700</pubDate>
        <lastBuildDate>Fri, 06 Apr 2007 13:37:23 -0700</lastBuildDate>
            
        <item>
            <title>Using EclipseLink on the SpringSource Application Platform</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Using+EclipseLink+on+the+SpringSource+Application+Platform/car0i</link>
            <description>This week the EclipseLink team announced the release of EclipseLink 1.0. I&amp;#039;ve been using EclipseLink on S2AP for a while now; in fact, I used EclipseLink when developing our JPA load-time-weaving support.
		

			We&amp;#039;ve yet to upgrade our internal usage to 1.0 - our beta9 was tagged just before the announcement - but I wanted to demonstrate [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/339292094&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Fri, 18 Jul 2008 13:56:28 -0700</pubDate>
        </item>
            
        <item>
            <title>Developing Rich Web Applications with Spring</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Developing+Rich+Web+Applications+with+Spring/car0h</link>
            <description>I am pleased to announce that Developing Rich Web Applications with Spring, a three-day bootcamp lead by SpringSource engineers on web application development, is now available.  This intense, hands-on workshop teaches how to apply the latest versions of Spring Web MVC, Spring Web Flow, Spring JavaScript, and Spring Faces to create rich web applications.  It [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/339292093&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Fri, 18 Jul 2008 13:56:28 -0700</pubDate>
        </item>
            
        <item>
            <title>SpringSource Seminar Day in Central Europe</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/SpringSource+Seminar+Day+in+Central+Europe/b8pc7</link>
            <description>SpringSource is organizing its first dedicated seminar day in central Europe: the SpringSource Seminar Day in Linz, Austria, on September 8th, 2008. This is a full-day seminar about current hot topics in the Spring portfolio: a rare chance to hear about what&amp;#039;s brand-new and upcoming right from the Spring project leads! The agenda is planned [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/322813743&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Sun, 29 Jun 2008 16:07:44 -0700</pubDate>
        </item>
            
        <item>
            <title>Pumping it dry: $200 a barrel and $25,000 per CPU</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Pumping+it+dry%3A+%24200+a+barrel+and+%2425%2C000+per+CPU/b8bet</link>
            <description>When Oracle acquired BEA systems, I and others noted the significance of the loss of the only independent Java middleware vendor. With Oracle’s recent announcement of a price hike for their products, including WebLogic Server, this is no longer a theoretical issue. They have the oil, and they think they have existing customers over a [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/319579367&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Wed, 25 Jun 2008 02:57:57 -0700</pubDate>
        </item>
            
        <item>
            <title>Running a Spring Batch Job in The SpringSource Application Platform</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Running+a+Spring+Batch+Job+in+The+SpringSource+Application+Platform/b568r</link>
            <description>In this article I will show you how to run a Spring Batch job in the SpringSource Application Platform.  I ran an early version of this up as a little demo for JavaOne, and then again at the London Spring User Group, and thought it might be a good thing to share.  The [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/301359280&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Fri, 30 May 2008 09:50:10 -0700</pubDate>
        </item>
            
        <item>
            <title>Open Source, Open Strategy: The SpringSource Manifesto</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Open+Source%2C+Open+Strategy%3A+The+SpringSource+Manifesto/b5yyt</link>
            <description>As an open source software provider, we think we should be open about our strategy, too. We&amp;#039;d like to share how we got here, where we&amp;#039;re going and why the journey will be good for Spring, good for Spring users and good for SpringSource.
Our History
The Spring story began in 2001, when I began working on [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/299430114&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Tue, 27 May 2008 17:20:42 -0700</pubDate>
        </item>
            
        <item>
            <title>Implementing Enterprise Integration Patterns part 0</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Implementing+Enterprise+Integration+Patterns+part+0/b5fko</link>
            <description>After my talk on Spring Integration I&amp;#039;ve been getting quite some questions on clarification and samples. To meet the demand I will start a small series on implementing different integration patterns using Spring Integration. This first article will focus on the basics. It will show you how to get up and running and walk through [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/293706904&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Mon, 19 May 2008 13:21:18 -0700</pubDate>
        </item>
            
        <item>
            <title>Why should I care about OSGi anyway?</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Why+should+I+care+about+OSGi+anyway%3F/b4367</link>
            <description>InfoQ has a discussion thread summarizing the reactions to the announcement of the SpringSource Application Plaform. Michael Burke asked a great question on that thread which can be paraphrased as &amp;#034;forgetting the hype surrounding OSGi, what benefits can I expect to see if I port an application currently packaged as an EAR to OSGi bundles?&amp;#034;.
I [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/291187462&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 15 May 2008 14:21:21 -0700</pubDate>
        </item>
            
        <item>
            <title>Portability, Fish and Chips</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Portability%2C+Fish+and+Chips/b4xkx</link>
            <description>It&amp;#039;s been great to hear so much discussion on the SpringSource Application Platform, online and on the floor here at JavaOne. One of the most insightful comments is from WebSphere transaction architect Ian Robinson:
Does any of this affect WebSphere? Well, nothing has changed in the core Spring framework. Regardless of what the future holds for [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/287132525&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Fri, 09 May 2008 16:16:28 -0700</pubDate>
        </item>
            
        <item>
            <title>Working with SpringSource Application Platform&#039;s provisioning repository</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Working+with+SpringSource+Application+Platform%27s+provisioning+repository/b4w49</link>
            <description>One of the main advantages of the SpringSource Application Platform is its ability to provision dependencies on an as-needed basis. The benefits of this are two-fold: it ensures that the Platform&amp;#039;s memory footprint is as small as possible and it allows applications to be deployed without encapsulating all of their dependencies in a monolithic deployment [...]&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/286683185&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Fri, 09 May 2008 02:17:26 -0700</pubDate>
        </item>
            
        <item>
            <title>SpringSource Application Platform Manifest Headers</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/SpringSource+Application+Platform+Manifest+Headers/b4wi9</link>
            <description>&lt;p&gt;The SpringSource Application Platform is constructed from OSGi bundles and supports applications which are also constructed from OSGi bundles. The Platform supports the standard features of OSGi, but it also supports some additional manifest headers. Several people have asked Why did SpringSource add proprietary headers? and What are the semantics of the new headers?, so this post explains the background motivation and the semantics of &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;Standard OSGi Bundle Support&lt;/h2&gt;
&lt;p&gt;The Platform is built on the &lt;a href=&quot;http://www.osgi.org/Specifications/HomePage&quot;&gt;OSGi R4.1&lt;/a&gt; standard, or &lt;a href=&quot;http://jcp.org/en/jsr/detail?id=291&quot;&gt;JSR 291&lt;/a&gt; if you prefer, and uses &lt;a href=&quot;http://www.eclipse.org/equinox/&quot;&gt;Equinox&lt;/a&gt; as its OSGi implementation. The result is that you can develop standard OSGi bundles using the Platform&amp;#039;s tooling and deploy those bundles on the Platform, as a number of users have been doing since the Platform&amp;#039;s launch.&lt;/p&gt;
&lt;p&gt;So OSGi savvy developers can use the Platform as a standard OSGi container and benefit from Platform features such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the ability to deploy bundles using the Admin Console or by dropping bundles in the Platform&amp;#039;s &lt;span style=&quot;font-family:courier&quot;&gt;pickup&lt;/span&gt; directory,&lt;/li&gt;
&lt;li&gt;diagnostics such as resolution failure diagnosis, application specific trace, and automatic deadlock detection,&lt;/li&gt;
&lt;li&gt;strong integration with Spring and Spring Dynamic Modules, for developers who want to use these frameworks, and&lt;/li&gt;
&lt;li&gt;automatic provisioning of dependencies from a repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, the Platform also aims to make it easy for enterprise application developers with little or no prior exposure to OSGi to benefit from OSGi, which places some extra requirements on the Platform.&lt;/p&gt;
&lt;h2&gt;Additional Requirements of Enterprise Applications&lt;/h2&gt;
&lt;p&gt;As Sam&amp;#039;s recent &lt;a href=&quot;http://blog.springsource.com/main/2008/05/06/springsource-application-platform-deployment-options/&quot;&gt;blog&lt;/a&gt; on the Platform&amp;#039;s deployment options explains, you can deploy existing monolithic WAR files on the Platform with no need to understand OSGi - the Platform takes care of everything for you. But to benefit from shared libraries, shared services and, ultimately, PAR file scoping, it is necessary to break monolithic WAR files into OSGi bundles. How hard can that be?&lt;/p&gt;
&lt;p&gt;
Well, some steps in the process are relatively easy, especially if good software engineering practices have been followed and the code has been organised into service, domain, and infrastructure components. These components can be converted into bundles and the dependencies between them expressed using standard OSGi Import-Package and Export-Package headers in &lt;span style=&quot;font-family:courier&quot;&gt;META-INF/MANIFEST.MF&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;
A more difficult step is expressing dependencies on enterprise frameworks such as Spring and Hibernate. It is entirely possible to express these dependencies using standard OSGi Import-Package and Require-Bundle headers, and this is exactly what you should do if your aim is to create OSGi bundles which will run in other OSGi containers, but this approach has some hidden costs. &lt;/p&gt;
&lt;p&gt;
Firstly, the developer has to decide precisely which packages comprise a given framework. It isn&amp;#039;t sufficient merely to import the packages the application code uses, as several enterprise frameworks weave further dependencies into the bytecode of the application when the application is loaded. The developer has to discover, probably by trial and error, which additional implementation packages to import to ensure correct behaviour of the woven application.&lt;/p&gt;
&lt;p&gt;
Then there is the chore of migrating from one version of a framework to the next where the precise set of packages comprising the framework has changed. The additional packages required for weaving are typically not defined by a public contract and so are subject to change.&lt;/p&gt;
&lt;p&gt;
Additionally, the resultant package imports don&amp;#039;t properly capture the design intent, which makes maintaining or extending the application more difficult in the future.&lt;/p&gt;
&lt;p&gt;
We really don&amp;#039;t want to impose these burdens on our users, so we created some additional SpringSource Application Platform specific manifest headers, &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt;, as convenient ways of expressing dependencies on enterprise frameworks. As you&amp;#039;ll see below, these headers are really just syntactic sugar which are expressed in terms of standard OSGi package imports.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;The basic syntax is similar to that of other manifest headers:&lt;/p&gt;
&lt;pre style=&quot;font-size:11pt&quot;&gt;
    Import-Library: &amp;lt;librarySymbolicName&amp;gt;;version=&amp;lt;versionRange&amp;gt;
&lt;/pre&gt;
&lt;p&gt;where &lt;span style=&quot;font-family:courier&quot;&gt;&amp;lt;librarySymbolicName&amp;gt;&lt;/span&gt; is the symbolic name of the library and &lt;span style=&quot;font-family:courier&quot;&gt;&amp;lt;versionRange&amp;gt;&lt;/span&gt; is a range of acceptable versions of the library using OSGi version range notation. A library definition specifies the library&amp;#039;s symbolic name and version and these together uniquely identify the library to the Platform.&lt;/p&gt;
&lt;p&gt;
If you are unfamiliar with OSGi version range notation, by far the most commonly used forms are minimum version ranges such as &lt;span style=&quot;font-family:courier&quot;&gt;2&lt;/span&gt;, meaning version 2 or later, and half-open ranges such as &lt;span style=&quot;font-family:courier&quot;&gt;[2.2.1,2.2.2)&lt;/span&gt;, meaning any version between 2.2.1 inclusive and 2.2.2 exclusive. If &lt;span style=&quot;font-family:courier&quot;&gt;version=&amp;lt;versionRange&amp;gt;&lt;/span&gt; is omitted, together with the semicolon delimiter of course, then the default range includes all versions.&lt;/p&gt;
&lt;p&gt;
For each library import, the Platform selects the library with the given symbolic name and the highest version in the given version range available in the Platform&amp;#039;s repository. The Platform then replaces the library import with a set of package imports which match all the packages exported by the bundles of the library. The Platform detects the situation where a bundle imports two or more libraries which export a common package, issues an appropriate log message, and fails to install the importing bundle.&lt;/p&gt;
&lt;p&gt;
So, for example, the following header imports some version of the &lt;a href=&quot;http://www.springsource.com/repository/app/library/version/detail?name=org.springframework.spring&amp;#038;version=2.5.4.A&quot;&gt;Spring Framework library&lt;/a&gt; between 2.5.4 inclusive and 2.5.5 exclusive:&lt;/p&gt;
&lt;pre style=&quot;font-size:11pt&quot;&gt;
    Import-Library: org.springframework.spring;version=&quot;[2.5.4,2.5.5)&quot;
&lt;/pre&gt;
&lt;h3&gt;Optional Library Import&lt;/h3&gt;
&lt;p&gt;You can indicate that a library import is optional using the following syntax. Note the special separator &lt;span style=&quot;font-family:courier&quot;&gt;:=&lt;/span&gt; which indicates a directive that modifies the semantics of the manifest header, as opposed to the separator &lt;span style=&quot;font-family:courier&quot;&gt;=&lt;/span&gt; which indicates a matching attribute, like &lt;span style=&quot;font-family:courier&quot;&gt;version&lt;/span&gt;.&lt;/p&gt;
&lt;pre style=&quot;font-size:11pt&quot;&gt;
    Import-Library: &amp;lt;librarySymbolicName&amp;gt;;version=&amp;lt;versionRange&amp;gt;;&lt;b&gt;resolution:=optional&lt;/b&gt;
&lt;/pre&gt;
&lt;p&gt;If &lt;span style=&quot;font-family:courier&quot;&gt;resolution&lt;/span&gt; is not specified, or is specified as &lt;span style=&quot;font-family:courier&quot;&gt;mandatory&lt;/span&gt;, the bundle containing the import library header will fail to install if there is no library with the given symbolic name and a version in the given range. But if &lt;span style=&quot;font-family:courier&quot;&gt;resolution:=optional&lt;/span&gt; is specified, the library import will be ignored if no suitable library is available.&lt;/p&gt;
&lt;p&gt;
So, for example, the following header imports some version of the Spring Framework library from 2.5 onwards, but is ignored if no suitable library is available:&lt;/p&gt;
&lt;pre style=&quot;font-size:11pt&quot;&gt;
    Import-Library: org.springframework.spring;version=&quot;2.5&quot;;resolution:=optional
&lt;/pre&gt;
&lt;h3&gt;Importing More than One Library&lt;/h3&gt;
&lt;p&gt;If you need to import more than one library, then specify a comma-separated list of library imports in a single &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; manifest header as in the following example:&lt;/p&gt;
&lt;pre style=&quot;font-size:11pt&quot;&gt;
    Import-Library: org.foo.p;version=&quot;[1,2)&quot;&lt;b&gt;,&lt;/b&gt;org.bar.q;version=&amp;#034;[2,3)&amp;#034;
&lt;/pre&gt;
&lt;h2&gt;&lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; is a further convenience for cases where a library would consist of only a single bundle and a library definition is inconvenient to create. The syntax is very similar to that of &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; except that it refers to a bundle&amp;#039;s symbolic name and version instead of those of a library.&lt;/p&gt;
&lt;p&gt;
As you would expect, for each imported bundle, the Platform selects the bundle with the given symbolic name and the highest version in the given version range available in the Platform&amp;#039;s repository. The Platform then replaces the bundle import with a set of package imports matching the packages exported by the bundle.&lt;/p&gt;
&lt;p&gt;
So, for example, the following header imports the &lt;a href=&quot;http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.hibernate&amp;#038;version=3.2.6.ga&quot;&gt;Hibernate Object-Relational Mapper&lt;/a&gt; bundle:&lt;/p&gt;
&lt;pre style=&quot;font-size:11pt&quot;&gt;
    Import-Bundle: com.springsource.org.hibernate;version=&quot;[3.2.6,3.2.7)&quot;
&lt;/pre&gt;
&lt;h3&gt;Why not Overload &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt;?&lt;/h3&gt;
&lt;p&gt;If you are familiar with OSGi, you may be asking yourself why we didn&amp;#039;t overload &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt; instead of introducing &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;
Well, we wanted &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt; to retain its standard semantics, including the ability to marry together pieces of a split package. But we wanted &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; to have the same underlying semantics as &lt;span style=&quot;font-family:courier&quot;&gt;Import-Package&lt;/span&gt; which avoid the complexities of split packages.&lt;/p&gt;
&lt;p&gt;
We also anticipate that, as the Platform evolves over time, we&amp;#039;ll need to add further directives to &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; which would not be appropriate to add to &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;What Next?&lt;/h2&gt;
&lt;p&gt;The Platform &lt;a href=&quot;http://www.springsource.com/beta/s2ap&quot;&gt;beta program&lt;/a&gt; is in progress and we&amp;#039;ll be listening to all feedback on Platform features, including the new manifest headers.&lt;/p&gt;
&lt;p&gt;For users who want to take advantage of the Platform&amp;#039;s headers, but who need to produce bundles which will run on other OSGi containers, we plan to produce a tool which will replace the &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; syntactic sugar with equivalent standard package imports.&lt;/p&gt;
&lt;p&gt;We&amp;#039;ll also be discussing the new manifest headers with our colleagues in the OSGi Alliance to determine if there are general requirements which would be appropriate for OSGi to address in the future.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/285975107&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 08 May 2008 03:19:22 -0700</pubDate>
        </item>
            
        <item>
            <title>SpringSource Application Platform Deployment Options</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/SpringSource+Application+Platform+Deployment+Options/b4vrj</link>
            <description>&lt;p&gt;Since we released the SpringSource Application Platform last Wednesday, numerous developers have downloaded the 1.0.0 beta and started taking the Platform for a test drive. As a result, people have begun asking, &amp;#034;How can I deploy my apps on the Platform, and what kind of deployment and packaging options do I have?&amp;#034; Moreover, developers are eagerly requesting to see working samples. In response, the S2AP team will be releasing several sample applications over the coming weeks demonstrating these features and more, but before you get your hands on these samples, I&amp;#039;d like to give you a high-level overview of the deployment and packaging options available in the Platform. After reading this post you&amp;#039;ll be ready to hit the ground running with the samples as well as with your own applications.&lt;/p&gt;
&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;As Rob mentioned in his post last week, &lt;a href=&quot;http://blog.springsource.com/main/2008/04/30/introducing-the-springsource-application-platform/&quot;&gt;Introducing the SpringSource Application Platform&lt;/a&gt;, the Platform supports applications packaged in the following forms:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Raw OSGi Bundles&lt;/li&gt;
&lt;li&gt;Java EE WAR&lt;/li&gt;
&lt;li&gt;Web Modules&lt;/li&gt;
&lt;li&gt;Platform Archive (PAR)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When you deploy an application to the Platform, each deployment artifact (e.g., a single bundle, WAR, or PAR) passes through a deployment pipeline. This deployment pipeline supports the notion of personality-specific deployers which are responsible for processing an application with a certain &lt;em&gt;personality&lt;/em&gt; (i.e., application type). The 1.0.0 release of the Platform natively supports personality-specific deployers analogous to each of the aforementioned packaging options. Furthermore, the deployment pipeline can be extended with additional personality deployers, and future releases of the Platform will provide support for personalities such as Batch, Web Services, etc.&lt;/p&gt;
&lt;p&gt;Let&amp;#039;s take a closer look now at each of the supported deployment and packaging options to explore which one is best suited for your applications.&lt;/p&gt;
&lt;h2&gt;Raw OSGi Bundles&lt;/h2&gt;
&lt;p&gt;At its core, the SpringSource Application Platform is an OSGi container. Thus any OSGi-compliant bundle can be deployed directly on the Platform unmodified. You&amp;#039;ll typically deploy an application as a single bundle or a set of stand-alone bundles if you&amp;#039;d like to publish or consume services globally within the container via the OSGi Service Registry. Please note, however, that due to the scoping nature of the PAR format, stand-alone bundles will not be able to consume services across application boundaries. In other words, a stand-alone bundle can not reference the services of modules deployed within a PAR.&lt;/p&gt;
&lt;h2&gt;WAR Deployment Options&lt;/h2&gt;
&lt;p&gt;For Web Application Archives (WAR), the SpringSource Application Platform provides support for the following three formats.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standard Java EE WAR&lt;/li&gt;
&lt;li&gt;Shared Libraries WAR&lt;/li&gt;
&lt;li&gt;Shared Services WAR&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each of these formats plays a distinct role in the incremental migration path from a standard Java EE WAR to an OSGi-ified web application.&lt;/p&gt;
&lt;h3&gt;Standard WAR&lt;/h3&gt;
&lt;p&gt;As Rob has already pointed out, &lt;em&gt;&amp;#034;Standard WAR files are supported directly in the Platform. At deployment time, the WAR file is transformed into an OSGi bundle and installed into Tomcat. All the standard WAR contracts are honoured, and your existing WAR files should just drop in and deploy without change.&amp;#034;&lt;/em&gt; Support for standard, unmodified WAR files allows you to try out the SpringSource Application Platform on your existing web applications and then gradually migrate toward the &lt;em&gt;Shared Libraries WAR&lt;/em&gt;, &lt;em&gt;Shared Services WAR&lt;/em&gt;, and &lt;em&gt;Web Module&lt;/em&gt; formats.&lt;/p&gt;
&lt;h3&gt;Shared Libraries WAR&lt;/h3&gt;
&lt;p&gt;If you have experience with developing and packaging web applications using the standard WAR format, you&amp;#039;re certainly familiar with the pains of &lt;em&gt;library bloat&lt;/em&gt;. So, unless you&amp;#039;re installing shared libraries in a common library folder for your Servlet container, you have to pack all JARs required by your web application in &lt;span style=&quot;font-family:courier&quot;&gt;/WEB-INF/lib&lt;/span&gt;. Prior to the release of the Platform, such library bloat has essentially been the &lt;em&gt;norm&lt;/em&gt; for web applications, but now there is a better solution! The &lt;em&gt;Shared Libraries WAR&lt;/em&gt; format reduces your application&amp;#039;s deployment footprint and eradicates library bloat by allowing you to declare dependencies on libraries via standard OSGi manifest headers such as &lt;span style=&quot;font-family:courier&quot;&gt;Import-Package&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt;. The Platform provides additional support for simplifying dependency management via the &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; manifest headers which are essentially macros that get expanded into OSGi-compliant &lt;span style=&quot;font-family:courier&quot;&gt;Import-Package&lt;/span&gt; statements.&lt;/p&gt;
&lt;p&gt;For detailed information on what kind of libraries you already have at your disposal, check out the &lt;a href=&quot;http://www.springsource.com/repository/app/&quot;&gt;SpringSource Enterprise Bundle Repository&lt;/a&gt;. In addition, Andy Wilkinson will be posting a blog later this week explaining how to make the most of the Bundle Repository within your applications and the SpringSource Application Platform. So stay tuned.&lt;/p&gt;
&lt;h3&gt;Shared Services WAR&lt;/h3&gt;
&lt;p&gt;Once you&amp;#039;ve begun taking advantage of declarative dependency management with a Shared Libraries WAR, you&amp;#039;ll likely find yourself wanting to take the next step toward reaping further benefits of an OSGi container: sharing services between your OSGi-compliant bundles and your web applications. By building on the power and simplicity of &lt;a href=&quot;http://www.springframework.org/osgi&quot;&gt;Spring-DM&lt;/a&gt;, the &lt;em&gt;Shared Services WAR&lt;/em&gt; format puts the OSGi Service Registry at your fingertips. As a best practice you&amp;#039;ll typically publish services from your domain, service, and infrastructure bundles via &lt;span style=&quot;font-family:courier&quot;&gt;&amp;lt;osgi:service &amp;#8230; /&amp;gt;&lt;/span&gt; and then consume them in your web application&amp;#039;s &lt;span style=&quot;font-family:courier&quot;&gt;ApplicationContext&lt;/span&gt; via &lt;span style=&quot;font-family:courier&quot;&gt;&amp;lt;osgi:reference &amp;#8230; /&amp;gt;&lt;/span&gt;. Doing so promotes programming to interfaces and allows you to completely decouple your web-specific deployment artifacts from your domain model, service layer, etc., and that&amp;#039;s certainly a step in the right direction. Of the three supported WAR deployment formats, the Shared Services WAR is by far the most attractive in terms of modularity and reduced overall footprint of your web applications.&lt;/p&gt;
&lt;h2&gt;Web Modules&lt;/h2&gt;
&lt;p&gt;Above and beyond WAR-based deployment formats, the SpringSource Application Platform introduces a deployment and packaging option for OSGi-compliant web applications, the &lt;em&gt;Web Module&lt;/em&gt; format. Web modules have a structure similar to a Shared Services WAR and can therefore take full advantage of all three WAR deployment formats. In addition, web modules benefit from reduced configuration for Spring MVC based applications via new OSGi manifest headers such as &lt;span style=&quot;font-family:courier&quot;&gt;Web-DispatcherServletUrlPatterns&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Web-FilterMappings&lt;/span&gt;. For further details on these and other &lt;span style=&quot;font-family:courier&quot;&gt;Web-*&lt;/span&gt; manifest headers, please consult the Platform&amp;#039;s &lt;a href=&quot;http://static.springsource.com/projects/applicationplatform/1.0.x/programmer-guide/html/&quot;&gt;Programmer Guide&lt;/a&gt;. Upcoming releases of the Platform will also support &lt;span style=&quot;font-family:courier&quot;&gt;web.xml&lt;/span&gt; &lt;em&gt;fragments&lt;/em&gt; as well as the aforementioned manifest headers.&lt;/p&gt;
&lt;p&gt;If you&amp;#039;re building a Spring MVC based web application as a web module, you won&amp;#039;t need to worry about configuring a &lt;em&gt;root&lt;/em&gt; &lt;span style=&quot;font-family:courier&quot;&gt;WebApplicationContext&lt;/span&gt; or an &lt;span style=&quot;font-family:courier&quot;&gt;ApplicationContext&lt;/span&gt; for your &lt;span style=&quot;font-family:courier&quot;&gt;DispatcherServlet&lt;/span&gt;. Based on metadata in your web module&amp;#039;s &lt;span style=&quot;font-family:courier&quot;&gt;/META-INF/MANIFEST.MF&lt;/span&gt;, the Platform will auto-generate an appropriately configured &lt;span style=&quot;font-family:courier&quot;&gt;web.xml&lt;/span&gt; for you on-the-fly, and your application will use the ApplicationContext created for your web module by Spring-DM. Future releases will add additional support to simplify configuration of &lt;a href=&quot;http://www.springframework.org/webflow&quot;&gt;Spring Web Flow&lt;/a&gt; based web applications as well.&lt;/p&gt;
&lt;h2&gt;Migration path from WAR to Web Module&lt;/h2&gt;
&lt;p&gt;The following diagram graphically depicts the migration path from a Standard WAR to a Web Module. As you can see, the libs move from within the deployment artifact to the Bundle Repository. Similarly, the services move from within the WAR to external bundles and are accessed via the OSGi Service Registry. In addition, the overall footprint of the deployment artifact decreases as you move towards a Web Module.&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image330&quot; src=&quot;http://blog.springsource.com/main/wp-content/uploads/2008/05/migration-path-war-to-web-module.png&quot; alt=&quot;Migration path from WAR to Web Module&quot;/&gt;&lt;/p&gt;
&lt;h2&gt;Platform Archives&lt;/h2&gt;
&lt;p&gt;The final piece of the puzzle is the PAR (Platform Archive) deployment format. A PAR is a standard JAR which contains all of the modules of your application (e.g., service, domain, and infrastructure bundles as well as a WAR or web module for web applications) in a single deployment unit. This allows you to deploy, refresh, and undeploy your entire application as a single entity. For those of you familiar with Java EE, a PAR can be considered a replacement for an EAR (Enterprise Archive) within the context of an OSGi container. As an added bonus, modules within a PAR can be refreshed independently and on-the-fly, for example via the &lt;a href=&quot;http://www.springsource.com/beta/applicationplatform/&quot;&gt;SpringSource Application Platform Tool Suite&lt;/a&gt; (register for the beta program and check out the Eclipse tooling support).&lt;/p&gt;
&lt;p&gt;Furthermore, PARs &lt;em&gt;scope&lt;/em&gt; the modules of your application within the Platform. Scoping provides both a physical and logical application boundary, shielding the internals of your application from any other applications deployed within the Platform. This means your application doesn&amp;#039;t have to worry about clashing with other running applications (e.g., in the OSGi Service Registry). You get support for load-time weaving, classpath scanning, context class loading, etc., and the Platform does the heavy lifting for you to make all this work seamlessly in an OSGi environment. If you want to take full advantage of all that the SpringSource Application Platform and OSGi have to offer, packaging and deploying your applications as a PAR is definitely the recommend choice.&lt;/p&gt;
&lt;h2&gt;Where to go from here&lt;/h2&gt;
&lt;p&gt;If you haven&amp;#039;t already done so, I encourage you to join the &lt;a href=&quot;http://www.springsource.com/beta/s2ap&quot;&gt;beta program&lt;/a&gt; and take the SpringSource Application Platform for a test drive yourself.&lt;/p&gt;
&lt;p&gt;You&amp;#039;ll find up-to-date documentation in the &lt;a href=&quot;http://static.springsource.com/projects/s2ap/1.0.x/user-guide/html/&quot;&gt;user guide&lt;/a&gt; and &lt;a href=&quot;http://static.springsource.com/projects/s2ap/1.0.x/programmer-guide/html/&quot;&gt;programmer guide&lt;/a&gt;, and if you happen to run into any issues deploying your applications or have recommendations on how we can improve the Platform, please don&amp;#039;t hesitate to &lt;a href=&quot;http://issuetracker.springsource.com/browse/PLATFORM&quot;&gt;create a JIRA issue&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And last but not least, be sure to check out upcoming posts on the &lt;a href=&quot;http://blog.springsource.com&quot;&gt;SpringSource Team Blog&lt;/a&gt; to keep abreast of news regarding the Platform and to see working examples including an OSGi-ified Spring PetClinic sample application which has been modularized and packaged as a PAR.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/284978155&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Tue, 06 May 2008 17:16:24 -0700</pubDate>
        </item>
            
        <item>
            <title>Running Spring Applications on OSGi with the SpringSource Application Platform</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Running+Spring+Applications+on+OSGi+with+the+SpringSource+Application+Platform/b4st5</link>
            <description>&lt;p&gt;A lot of people have been asking what exactly the SpringSource Application Platform does for Spring applications to make them run well under OSGi, over and above what you can get out of the box with OSGi and Spring Dynamic Modules. Adrian&amp;#039;s post yesterday highlighted some of the general issues, now lets look at a few of the details.&lt;/p&gt;
&lt;p&gt;The three most challenging aspects of running Spring applications on OSGi are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Load-time weaving&lt;/li&gt;
&lt;li&gt;Classpath scanning&lt;/li&gt;
&lt;li&gt;Thread context classloader management&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The remaining, but less interesting, issues include: JSP support, TLD scanning, annotation matching and resource lookups. Overall, there was a decent-sized set of issues that needed to be solved to make applications deploy smoothly.&lt;/p&gt;
&lt;h2 id=&quot;load_time_weaving&quot;&gt;Load-time weaving&lt;/h2&gt;
&lt;p&gt;Load-time weaving was one of the most problematic features to support in a robust manner. At the basic level, it requires hooking into the Equinox &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt; so that standard &lt;span style=&quot;font-family:courier&quot;&gt;ClassFileTransformers&lt;/span&gt; can be attached and used during the &lt;span style=&quot;font-family:courier&quot;&gt;defineClass&lt;/span&gt; calls. On top of this, many uses of LTW require access to a throwaway &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt; that can be used to inspect types to decide what needs to happen during the weave, without affecting the real &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;This base level of support was actually reasonably simple to achieve. The difficulty comes in when weaving is driven by classes in one bundle, but classes in another bundle need to be woven. This is pretty common in enterprise applications where one bundle contains domain entities and another contains types that use a JPA &lt;span style=&quot;font-family:courier&quot;&gt;EntityManager&lt;/span&gt;. The Platform takes care of this complexity by ensuring that all bundles in an application can be woven with the appropriate &lt;span style=&quot;font-family:courier&quot;&gt;ClassFileTransformers&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;When you start propagating weaving across to other bundles, you really need to know when to stop. If you simply apply weaving to all bundles, then applications will interfere with each other. The Platform prevents this from happening by explicitly scoping weaving so that it applies only to modules in the application.&lt;/p&gt;
&lt;p&gt;Another issue with LTW is that it complicates refresh. When a bundle is refreshed, OSGi will refresh all the bundles that depend on it. This means that, in the example I gave above, refreshing the domain bundle will cause the &lt;span style=&quot;font-family:courier&quot;&gt;EntityManager&lt;/span&gt; bundle to be refreshed. However, refreshing the &lt;span style=&quot;font-family:courier&quot;&gt;EntityManager&lt;/span&gt; &lt;strong&gt;does not&lt;/strong&gt; refresh the domain bundle, meaning that weaving is possibly out of sync. The Platform handles this by propagating refresh to other bundles that are affected by weaving.&lt;/p&gt;
&lt;h2 id=&quot;classpath_scanning&quot;&gt;Classpath scanning&lt;/h2&gt;
&lt;p&gt;With classpath scanning, the main issue is that Equinox doesn&amp;#039;t expose standard &lt;span style=&quot;font-family:courier&quot;&gt;jar:&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;file:&lt;/span&gt; resources. The Platform puts an adapter in the middle so that libraries see the resource protocols that they expect. This has a nice side-effect of making a &lt;strong&gt;lot&lt;/strong&gt; of third-party libraries work - it&amp;#039;s not just a fix for classpath scanning.&lt;/p&gt;
&lt;h2 id=&quot;thread_context_classloader_management&quot;&gt;Thread context classloader management&lt;/h2&gt;
&lt;p&gt;Many third-party libraries use the thread context &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt; to access application types and resources. Each bundle in OSGi has it&amp;#039;s own &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt;, so therefore, only one bundle can be exposed as the thread context &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt; at any time. This means that if a third-party library needs to see types that are distributed across multiple bundles, it isn&amp;#039;t going to work as expected.&lt;/p&gt;
&lt;p&gt;The Platform fixes this by creating a &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt; that imports all the exported packages of every module in your application. This &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt; is then exposed as the thread context &lt;span style=&quot;font-family:courier&quot;&gt;ClassLoader&lt;/span&gt;, enabling third-party libraries to see all the exported types in your application.&lt;/p&gt;
&lt;p&gt;This is just a small cross-section of the issues that are addressed by the Platform but hopefully it gives you an idea of what the Platform means for Spring Framework users.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/282139253&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Fri, 02 May 2008 08:17:08 -0700</pubDate>
        </item>
            
        <item>
            <title>Completing the picture: Spring, OSGi, and the SpringSource Application Platform</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Completing+the+picture%3A+Spring%2C+OSGi%2C+and+the+SpringSource+Application+Platform/b4se6</link>
            <description>&lt;p&gt;** Updated May 2nd with case study :- see the bottom of this post for details **&lt;br/&gt;
I&amp;#039;m sure most of you reading this blog will have seen the announcement of the SpringSource Application Platform yesterday.  If not, be sure to check out &lt;a href=&quot;http://blog.springsource.com/main/2008/04/30/introducing-the-springsource-application-platform/&quot;&gt;Rob&amp;#039;s blog post&lt;/a&gt; which describes some of the motivation, programming model, and roadmap.&lt;/p&gt;
&lt;p&gt;A couple of common questions are being asked that I&amp;#039;d like to address straight away in this post. After that I&amp;#039;ll describe two other exciting announcements that complement the SpringSource Application Platform itself but that didn&amp;#039;t grab the headlines yesterday: the SpringSource Enterprise Bundle Repository and the Application Platform tools for Eclipse. Together these complete the story around OSGi-based enterprise application development with Spring.&lt;/p&gt;
&lt;p&gt;The question I&amp;#039;ve heard several times over the last 24 hours is: what&amp;#039;s wrong with OSGi - why can&amp;#039;t we just use a vanilla OSGi Service Platform (such as Equinox, Felix, or Knopflerfish) instead of the SpringSource Application Platform?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;There is absolutely nothing wrong with OSGi.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;OSGi is a great foundation and service platform - that&amp;#039;s why we and many others have chosen to build upon it. It&amp;#039;s &lt;a href=&quot;http://www.osgi.org/Markets/HomePage&quot;&gt;proven in a wide range of industries and applications&lt;/a&gt;, and underpins applications such as Eclipse and IBM&amp;#039;s WebSphere as well as the middleware stacks of several other vendors.&lt;/p&gt;
&lt;p&gt;Programming straight to the the OSGi specification APIs lacks some of the qualities we have come to expect for enterprise applications - such as the ability to use dependency injection and create applications that are easily unit and integration testable outside of the container. Programming straight to the OSGi specification APIs also forces you to deal at a relatively low level with the dynamics of the OSGi platform - what do you do when modules and services you depend on are stopped, started, installed, and updated at runtime? But there&amp;#039;s no fundamental obstacle here that we weren&amp;#039;t able to overcome with the &lt;a href=&quot;http://www.springframework.org/osgi&quot;&gt;Spring Dynamic Modules&lt;/a&gt; project. Applications built using Spring Dynamic Modules can run on any standard OSGi Service Platform, and we test all our builds against Equinox, Felix, and Knopflerfish. We are committed to ensuring that Spring Dynamic Modules and the Spring based programming model remain runtime neutral. That position will not change with the introduction of the SpringSource Application Platform.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;There is also absolutely nothing wrong with existing enterprise libraries.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Well, ok. There are some cases that leave a little to be desired, but by and large we know how to make them work for enterprise application development needs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;So what&amp;#039;s the problem then?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If OSGi works so well, and existing enterprise libraries are meeting our needs, then where&amp;#039;s the problem? The difficulty comes when you try to &lt;em&gt;combine&lt;/em&gt; an OSGi Service Platform with a set of existing enterprise libraries that weren&amp;#039;t written with OSGi in mind. That&amp;#039;s not the fault of OSGi, it&amp;#039;s got a great model that provides for excellent modularity, versioning, and operational control. It&amp;#039;s not the fault of the enterprise libraries either - they weren&amp;#039;t written to run under OSGi. But the very things that make OSGi so attractive break assumptions that the developers of those enterprise libraries made. The modularity model of OSGi for example stops you seeing the private parts of other people&amp;#039;s bundles. That&amp;#039;s exactly what you want, until you realise that your enterprise library can no longer see your application types. Lots of things can break: from commons logging to jsps, tag libraries to data sources, load-time weaving to component scanning, resource loading to orm mapping. The list goes on&amp;#8230; (Yes, you can get many of these things to work when you package your application code and all of the libraries it needs into a single bundle, but that&amp;#039;s very much missing the point!).&lt;/p&gt;
&lt;p&gt;This is why you see lots of people building on top of OSGi, but very few cases of passing OSGi benefits on into the application programming model (Eclipse RCP is a rare exception). When you build on top of OSGi, but don&amp;#039;t necessarily expose that model for end user application development, you can build to the OSGi model and make things work. When you need to provide a platform on which large numbers of existing enterprise libraries can be used it&amp;#039;s a different ball game. If we could just throw all that away and start again with libraries written explicitly for OSGi we&amp;#039;d be fine. We&amp;#039;ve made sure for example that the Spring Framework is fully able to run inside an OSGi Service Platform. But that&amp;#039;s not a realistic proposition. Alternatively we could wait for the developers of existing libraries to convert them all to run under OSGi out of the box (as we have done with Spring). But what&amp;#039;s the motivation for them to do that unless everyone else does it too? So we seem to be stuck in a chicken-and-egg situation. It&amp;#039;s a problem that the OSGi Enterprise Expert Group has spent a lot of time discussing over the past year.&lt;br/&gt;
&lt;em&gt;This&lt;/em&gt; is the problem that the SpringSource Application Platform solves :- it bootstraps enterprise application development into the world of OSGi by making standard OSGi bundles with standard OSGi semantics work with existing enterprise application libraries.&lt;/p&gt;
&lt;p&gt;I&amp;#039;d also like to re-emphasize that the platform is not just about OSGi : the OSGi support is one of the features we&amp;#039;re most excited about, but the SpringSource Application Platform is also an excellent server platform for deploying standard war files. We&amp;#039;ll describe the benefits the platform offers in such scenarios in later postings.&lt;/p&gt;
&lt;p&gt;Hopefully this post has helped to clear up some of the confusion surrounding exactly how the SpringSource Application Platform relates to OSGi. If you&amp;#039;ve been following along so far, you might have picked up on another lurking problem: it&amp;#039;s all well and good to make existing enterprise libraries work under OSGi, but don&amp;#039;t you need to turn all of their jar files into OSGi bundles in order to be able to deploy them? Yes you do. And it turns out that&amp;#039;s a lot of work if you want to correctly version all of the imports and exports and ensure that you have correct symbolic names etc.. The good news is that for hundreds of commonly used enterprise applications libraries, we&amp;#039;ve done the hard work for you and made the OSGi-ready versions available in the SpringSource Enterprise Bundle Repository&amp;#8230;&lt;/p&gt;
&lt;h2&gt;SpringSource Enterprise Bundle Repository&lt;/h2&gt;
&lt;p&gt;The SpringSource Enterprise Bundle Repository is both a repository that can be used from Ivy and Maven, and also an online searchable database of enterprise libraries. You&amp;#039;ll find it at &lt;a href=&quot;http://www.springsource.com/repository&quot;&gt;www.springsource.com/repository&lt;/a&gt;. You can browse for bundles by name, or just type in a search term to find bundles with matching names, exported packages, classes, or resources. You can also see the minimal (satisfying only the required dependencies) and maximal (satisfying as many of the optional dependencies as possible) transitive dependencies of any bundle.&lt;/p&gt;
&lt;p&gt;From the FAQ:&lt;/p&gt;
&lt;p&gt;&amp;#034;The SpringSource Enterprise Bundle Repository is a collection of open source libraries commonly used for developing enterprise Java applications with the Spring Framework. The repository contains jar files (bundles) and library definition (&amp;#034;.libd&amp;#034;) files. A library defines a collection of bundles that are often used together for some purpose (e.g. the &amp;#034;Spring Framework&amp;#034; library). There are hundreds of bundles contained in the repository.&amp;#034;&lt;br/&gt;
The repository meets the following criteria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every jar file in the repository is a valid OSGi bundle. Any jar you download from the repository can be deployed as-is into an OSGi Service Platform and the SpringSource Application Platform. It can also be used as a regular jar file outside of OSGi.&lt;/li&gt;
&lt;li&gt;Every bundle and library has full version information associated with it. The package export information for a bundle contains version information, and the package import information for a bundle contains full version range compatibility information.&lt;/li&gt;
&lt;li&gt;The repository is transitively complete. The mandatory dependencies of any bundle are guaranteed to also be in the repository. Most of the optional dependencies of any bundle in the repository will also be present. The bundles listed in any library definition are guaranteed to be in the repository.&lt;/li&gt;
&lt;li&gt;The repository is self-consistent. Before any artefact is uploaded to the repository, we verify that it can be installed, resolved, and started in an OSGi Service Platform (using the same profile as the SpringSource Application Platform) alongside all of the other bundles in the repository.&lt;/li&gt;
&lt;li&gt;The repository can be used from Ivy and Maven based builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To maintain these guarantees we have put in place a governance model around the publishing of artefacts to the repository. There is a JIRA instance against which you can raise requests for additional libraries to be included and to report any problems (relating to OSGi manifests etc.) with existing published artefacts.&lt;/p&gt;
&lt;h2&gt;Application Development Tools:&lt;/h2&gt;
&lt;p&gt;So far we&amp;#039;ve discussed the Spring-based programming model for developing applications as OSGi bundles, the availability of enterprise libraries to deploy into an OSGi Service Platform, and a runtime (the SpringSource Application Platform) that enables these legacy libraries to work in an OSGi runtime. The missing piece of the puzzle is the developer tools that make the creation of OSGi-based applications easy.&lt;/p&gt;
&lt;p&gt;Eclipse already has OSGi development tools built-in. Since every Eclipse plugin is also an OSGi bundle, the Eclipse PDE tools (Plugin Development Environment tools) can be used for OSGi application development. However, the fact that these tools were primarily designed for the development of Eclipse plugins shows through and there are a couple of common frustrations when using them for OSGi application development. One is that the META-INF/MANIFEST.MF file can only be placed at the root of the project - which doesn&amp;#039;t work well with build tools such as Ivy and Maven, and the other is that you are restricted to a single target platform (collection of bundles to develop against) for your whole workspace. What *is* great about the PDE tools, and which you really need, is that they build the compilation classpath for your project from the OSGi manifest - so that you don&amp;#039;t have differences in classpath and class visibility between compile, test, and runtimes.&lt;/p&gt;
&lt;p&gt;Alongside the SpringSource Application Platform we&amp;#039;ve also released a set of Eclipse plugins (available from the SpringSource Application Platform download page) that makes the development of OSGi applications easier, especially applications targeted at the SpringSource Application Platform. Your META-INF/MANIFEST.MF file can be in any source directory, and the tools build the compilation classpath from the manifest entries. Instead of a single target platform though, you can associate your project with a SpringSource Application Platform server defined to Eclipse (using the WTP facilities). The classpath for your project is then derived from the import statements in your manifest, resolved against other bundle projects in your workspace and the bundles installed in the associated server. You get the exact same interpretation of your classpath and dependencies at compile time as you do at runtime. And of course, the normal &amp;#034;deploy to server&amp;#034; options work too.&lt;/p&gt;
&lt;p&gt;Here&amp;#039;s how the server looks when it&amp;#039;s running inside Eclipse:&lt;br/&gt;
&lt;img src=&quot;http://static.springsource.com/projects/s2ap/1.0.0.beta/programmer-guide/html/images/ToolingDeployedApplication.png&quot;/&gt;&lt;/p&gt;
&lt;p&gt;And this screenshot shows how the classpath is managed with a &amp;#034;Bundle Dependencies&amp;#034; classpath container. Notice how packages that you have not imported in your manifest file are greyed out to indicate that you can&amp;#039;t currently access them.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://static.springsource.com/projects/s2ap/1.0.0.beta/programmer-guide/html/images/ToolingClasspath.png&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Even better is how we&amp;#039;re able to take advantage of OSGi&amp;#039;s modularity. A set of projects (one per bundle) make up your application. When you change anything in the project, an additional incremental builder analyses the resources deltas and does a live update of the running bundle in the SpringSource Application Platform - so you&amp;#039;re continually running with the latest code : every time, all the time. That&amp;#039;s a great productivity boost and a great development experience.&lt;/p&gt;
&lt;h2&gt;Case Study&lt;/h2&gt;
&lt;p&gt;Matt Raible posted a &lt;a title=&quot;Running Spring MCV Web Applications&quot; href=&quot;http://raibledesigns.com/rd/entry/running_spring_mvc_web_applications&quot;&gt;blog entry&lt;/a&gt; about his adventures trying to get a Spring web application working under OSGi using Freemarker - without using the SpringSource Application Platform. This seemed like a good challenge application to test out what I said above about making existing enterprise libraries work. The good news is, this application runs very happily on the SpringSource Application Platform. Here are the steps I followed to make it work (total time, about 10 minutes):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download the zip file from Matt&amp;#039;s blog&lt;/li&gt;
&lt;li&gt;Run &amp;#039;mvn&amp;#039;&lt;/li&gt;
&lt;li&gt;cp target/mpapp.war to the pickup directory of the Platform&lt;/li&gt;
&lt;li&gt;Startup the platform: bin/startup.sh.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I got the following output to the console:&lt;/p&gt;
&lt;pre&gt;com.springsource.platform.deployer.core.DeploymentException: Unable to satisfy constraints of &#039;myapp&#039; version &#039;0.0.0&#039;:&lt;/pre&gt;
&lt;pre&gt;Cannot resolve: myapp  Unsatisfied leaf constraints:&lt;/pre&gt;
&lt;pre&gt;Bundle: myapp_0.0.0 - Import-Package: org.springframework.osgi.web.context.support; version=&quot;0.0.0&quot;&lt;/pre&gt;
&lt;pre&gt;Did you mean: &#039;org.springframework.osgi.context.support&#039;?&lt;/pre&gt;
&lt;pre&gt;Bundle: myapp_0.0.0 - Import-Package: freemarker.ext.servlet; version=&quot;0.0.0&quot;&lt;/pre&gt;
&lt;pre&gt;Did you mean: &#039;javax.servlet&#039;?&lt;/pre&gt;
&lt;pre&gt;Bundle: myapp_0.0.0 - Import-Package: freemarker.core; version=&quot;0.0.0&quot;&lt;/pre&gt;
&lt;pre&gt;Did you mean: &#039;org.hamcrest.core&#039;?&lt;/pre&gt;
&lt;pre&gt;Bundle: myapp_0.0.0 - Import-Package: freemarker.template; version=&quot;0.0.0&quot;&lt;/pre&gt;
&lt;pre&gt;Did you mean: &#039;org.antlr.tool&#039;?&lt;/pre&gt;
&lt;pre&gt;Bundle: myapp_0.0.0 - Import-Package: freemarker.cache; version=&quot;0.0.0&quot;&lt;/pre&gt;
&lt;pre&gt;Did you mean: &#039;org.apache&#039;?&lt;/pre&gt;
&lt;p&gt;These are expected messages since I don&amp;#039;t have freemarker or the osgi.web.context support bundles installed in the platform.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to http://www.springsource.com/repository. Type &amp;#034;freemarker&amp;#034; into the search box, find the one matching entry and click on the link to download it. Copy the downloaded bundle in repository/bundles/usr&lt;/li&gt;
&lt;li&gt;Simplify the manifest to point to the new bundles and libraries on the platform. The original manifest looked like this:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;Import-Package: javax.servlet,javax.servlet.http,javax.servlet.resources,javax.swing.tree,&lt;/pre&gt;
&lt;pre&gt;javax.naming,org.w3c.dom,org.apache.commons.logging,javax.xml.parsers;resolution:=optional,&lt;/pre&gt;
&lt;pre&gt;org.xml.sax;resolution:=optional,org.xml.sax.helpers;resolution:=optional,&lt;/pre&gt;
&lt;pre&gt;org.springframework.osgi.web.context.support, org.springframework.context.support,&lt;/pre&gt;
&lt;pre&gt;org.springframework.web.context, org.springframework.web.context.support,&lt;/pre&gt;
&lt;pre&gt;org.springframework.web.servlet, org.springframework.web.servlet.mvc,&lt;/pre&gt;
&lt;pre&gt;org.springframework.web.servlet.mvc.support, org.springframework.web.servlet.view,&lt;/pre&gt;
&lt;pre&gt;org.springframework.ui, org.springframework.web.servlet.view.&lt;/pre&gt;
&lt;pre&gt;freemarker, freemarker.cache,freemarker.core,freemarker.template,freemarker.ext.servlet&lt;/pre&gt;
&lt;p&gt;and I took it down to:&lt;/p&gt;
&lt;pre&gt;Import-Package: org.apache.commons.logging&lt;/pre&gt;
&lt;pre&gt;Import-Library: org.springframework.spring;version=&quot;[2.5.4,3.0.0)&quot;&lt;/pre&gt;
&lt;pre&gt;Import-Bundle: com.springsource.freemarker;version=&quot;2.3.12&quot;&lt;/pre&gt;
&lt;p&gt;When we know you are deploying a web application, the commonly required imports are automatically added at deployment time. Import-Library and Import-Bundle allow you to conveniently refer to libraries and bundles in a single statement. I also deleted the &amp;#034;Bundle-Classpath&amp;#034; entry as the application platform will automatically detect libraries in WEB-INF/lib and add them to the bundle classpath.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I edited web.xml and commented out the context-param declaration since there is no need to use a custom application context type here&lt;/li&gt;
&lt;li&gt;Run &amp;#039;mvn&amp;#039; again, and copy the myapp.war into the pickup directory.&lt;/li&gt;
&lt;li&gt;The Application Platform automatically redeployed the application&lt;/li&gt;
&lt;li&gt;Point a browser at http://localhost:8080/myapp/ &amp;#8230;. SUCCESS!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think this is a nice demonstration of the value proposition of the platform in smoothing the path of making enterprise libraries work under OSGi.
&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/281680581&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 01 May 2008 14:19:00 -0700</pubDate>
        </item>
            
        <item>
            <title>Introducing the SpringSource Application Platform</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Introducing+the+SpringSource+Application+Platform/b4rm4</link>
            <description>&lt;p&gt;After many months of feverish coding, I am pleased to announce the beta release of the SpringSource Application Platform 1.0.&lt;/p&gt;
&lt;p&gt;At the beginning of 2007 we began discussing possible alternatives to the monolithic and heavyweight application servers with which Enterprise Java has become synonymous. Customers were looking for a platform that was lightweight, modular and flexible enough to meet their development and deployment needs. &lt;/p&gt;
&lt;p&gt;The Spring and Tomcat pairing demonstrates that developers and operators can successfully use a lightweight platform in production. Despite the success of this combination, the lack of modularity and explicit support for non-web applications limits its applicability and flexibility. &lt;/p&gt;
&lt;p&gt;We set about building the SpringSource Application Platform to address these requirements and remove these limitations. &lt;/p&gt;
&lt;p&gt;At the heart of the Platform is the Dynamic Module Kernel (DMK). The DMK is an OSGi-based kernel that takes full advantage of the modularity and versioning of the OSGi platform. The DMK builds on Equinox and extends its capabilities for provisioning and library management, as well as providing core function for the Platform.&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image322&quot; src=&quot;http://blog.springsource.com/main/wp-content/uploads/2008/04/architecture.png&quot; alt=&quot;SpringSource Application Platform Architecture&quot;/&gt;&lt;/p&gt;
&lt;p&gt;To maintain a minimal runtime footprint, OSGi bundles are installed on demand by the DMK provisioning subsystem. This allows for an application to be installed into a running Platform and for its dependencies to be satisfied from an external repository. Not only does this remove the need to manually install all your application dependencies, which would be tedious, but it keeps memory usage to a minimum.&lt;/p&gt;
&lt;p&gt;The DMK itself requires a minimal set of bundles to run, and is configured with a &lt;strong&gt;profile&lt;/strong&gt; to control exactly the set of additional modules that are loaded. For example, the DMK does not require Tomcat to be present, but the default Platform profile includes Tomcat to allow web applications to be deployed. If you want to run a Platform without Tomcat, you can simply edit the profile and it won&amp;#039;t be installed. (If you try this - remember that removing web support means that web modules will no longer deploy, so delete the contents of the pickup directory so the platform won&amp;#039;t attempt to install the Admin and splash screen applications when it starts.) The default Platform configuration with the admin console installed takes only 15MB of memory.&lt;/p&gt;
&lt;p&gt;One frustration I have always had with Enterprise Java is that applications are often shoe-horned into contrived silos, and that explicit support for different application types is lacking. Consider an application for an online store. This application has a web front-end, a message-driven order processing module, a batch-driven stock reordering module and a B2B web service module. Today, many applications like this would be packaged as a WAR or an EAR and the modules would look very similar, with little support for the differences in the module types.  Interestingly, many people would refer to this as a web application, rather than an application with a web module.&lt;/p&gt;
&lt;p&gt;In the SpringSource Application Platform, applications are modular and each module has a &lt;strong&gt;personality&lt;/strong&gt; that describes what kind of module it is: web, batch, web service, etc. The Platform deploys modules of each personality in a personality-specific manner. For example, web modules are configured in Tomcat with web context. Each module in the application can be updated independently of the other modules whilst retaining the identity of being part of the larger application. Whatever kind of application you are building, the programming model remains standard Spring and Spring DM.&lt;/p&gt;
&lt;p&gt;In the 1.0 Platform release we support the &lt;strong&gt;web&lt;/strong&gt; and &lt;strong&gt;bundle&lt;/strong&gt; personalities, which enable you to build sophisticated web applications. Future releases will include support for more personalities as detailed later.&lt;/p&gt;
&lt;h2 id=&quot;building_applications&quot;&gt;Building Applications&lt;/h2&gt;
&lt;p&gt;The Platform supports applications packaged in three forms:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Java EE WAR&lt;/li&gt;
&lt;li&gt;Raw OSGi bundles&lt;/li&gt;
&lt;li&gt;Platform Archive (PAR)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Standard WAR files are supported directly in the Platform. At deployment time, the WAR file is transformed into an OSGi bundle and installed into Tomcat. All the standard WAR contracts are honoured, and your existing WAR files should just drop in and deploy without change.&lt;/p&gt;
&lt;p&gt;Any OSGi-compliant bundle can be deployed directly into the Platform, and can take full advantage of on-the-fly provisioning for any dependencies referred to by &lt;span style=&quot;font-family:courier&quot;&gt;Import-Package&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;The PAR format is the recommended approach for packaging and deploying applications for the Platform. A PAR is simply a collection of OSGi bundles (modules) grouped together in a standard JAR file, along with a name and a version that uniquely identify the application. The PAR file is deployed as a single unit into the Platform. The Platform will extract all the modules from the PAR and install them. Third-party dependencies will be installed on-the-fly as needed.&lt;/p&gt;
&lt;p&gt;The PAR format has three main benefits over deploying the bundles directly into the Platform. Firstly, it&amp;#039;s just easier. An average-sized enterprise application might contain 12+ bundles - deploying these by hand will be far too cumbersome. Secondly, the PAR file forms an explicit scope around all the bundles in the application which prevents applications that use overlapping types or services from clashing with each other. This scope is also used by some advanced features such as load-time weaving to ensure that weaving of one application doesn&amp;#039;t interfere with weaving of another. Lastly, the PAR forms a logical grouping to define what modules are part of an application and what third-party dependencies the application has. This grouping is used by the management tools to provide a detailed view of the application. A typical PAR application looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image323&quot; src=&quot;http://blog.springsource.com/main/wp-content/uploads/2008/04/par-structure.png&quot; alt=&quot;PAR File Structure&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Dependencies between modules in an application are typically expressed using &lt;span style=&quot;font-family:courier&quot;&gt;Import-Package&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Export-Package&lt;/span&gt;. Dependencies on third-party libraries can be expressed in the same way, but for many libraries this can be error-prone and time-consuming. When using a library such as Hibernate, you will typically have to import more packages than you initially expect. To get around this you &lt;em&gt;could&lt;/em&gt; use &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt;, but this has some semantic rough edges such as split packages where a logical package is split across two or more class loaders causing problems at runtime. The Platform introduces two new mechanisms for referring to third-party dependencies: &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Libary&lt;/span&gt;. &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; is analogous to &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt; except it prevents split packages and the other problems with &lt;span style=&quot;font-family:courier&quot;&gt;Require-Bundle&lt;/span&gt;. &lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; provides a mechanism to refer to all the packages exported by a group of bundles, for instance all bundles in the Spring Framework, in a single declaration:&lt;/p&gt;
&lt;div class=&quot;codesnip-container&quot;&gt;Bundle-SymbolicName: com.myapp.dao.jdbc&lt;br/&gt;
Bundle-Version: 1.0.0&lt;br/&gt;
Import-Bundle: org.apache.commons.dbcp;version=&amp;#034;1.2.2.osgi&amp;#034;&lt;br/&gt;
Import-Library: org.springframework.spring;version=&amp;#034;2.5.4.A&amp;#034;&lt;/div&gt;
&lt;p&gt;Here I have a module bundle that depends on the Commons DBCP bundle and the Spring Framework library. The Spring Framework library contains all the bundles needed to use Spring in your application.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family:courier&quot;&gt;Import-Library&lt;/span&gt; and &lt;span style=&quot;font-family:courier&quot;&gt;Import-Bundle&lt;/span&gt; expand under the covers into &lt;span style=&quot;font-family:courier&quot;&gt;Import-Package&lt;/span&gt; and are therefore consistent with standard OSGi semantics. &lt;/p&gt;
&lt;p&gt;The Platform understands the personality of a module, and from this can infer how to configure the module&amp;#039;s execution environment. When deploying a web module, all the servlet infrastructure needed for a typical Spring MVC application is created automatically, removing the need to recreate this boilerplate code across applications. In the 1.0 final release, more smarts will be added to the web module personality to support additional technologies such as Spring Web Flow.&lt;/p&gt;
&lt;p&gt;Whatever packaging format you choose, the programming model is simply Spring Framework and Spring Dynamic Modules, with the other Spring Portfolio products running on top.&lt;/p&gt;
&lt;h2 id=&quot;serviceability&quot;&gt;Serviceability&lt;/h2&gt;
&lt;p&gt;Serviceability was a critical consideration for the whole engineering team. We have spent an inordinate amount of time worrying about the format of log messages and the size of stack traces to make sure that diagnosing problems with your applications is as easy as possible. Any time we find a task that is repetitive and time-consuming we look for a way to automate it or remove it altogether.&lt;/p&gt;
&lt;p&gt;To aid with problem diagnosis the Platform has a strong split between log and trace messages. Log messages are intended for end-user consumption and allow you to get access to the most important failure information without having to trawl through gigabytes of trace content. All application failures are displayed and coded in the log output - the codes serving as a convenient way to access knowledge base or support content. To understand why this is so useful, consider the following output from Platform startup:&lt;/p&gt;
&lt;div class=&quot;codesnip-container&quot;&gt;[2008-04-29 12:12:01.124] main                     &amp;lt;SPKB0001I&amp;gt; Platform starting.&lt;br/&gt;
[2008-04-29 12:12:04.037] main                     &amp;lt;SPKE0000I&amp;gt; Boot subsystems installed.&lt;br/&gt;
[2008-04-29 12:12:06.013] main                     &amp;lt;SPKE0001I&amp;gt; Base subsystems installed.&lt;br/&gt;
[2008-04-29 12:12:07.396] platform-dm-1            &amp;lt;SPPM0000I&amp;gt; Installing profile &amp;#039;web&amp;#039;.&lt;br/&gt;
[2008-04-29 12:12:07.674] platform-dm-1            &amp;lt;SPPM0001I&amp;gt; Installed profile &amp;#039;web&amp;#039;.&lt;br/&gt;
[2008-04-29 12:12:07.721] platform-dm-14           &amp;lt;SPSC0000I&amp;gt; Creating ServletContainer on port 8080&lt;br/&gt;
[2008-04-29 12:12:08.036] platform-dm-10           &amp;lt;SPPM0002I&amp;gt; Platform open for business with profile &amp;#039;web&amp;#039;.&lt;br/&gt;
[2008-04-29 12:12:09.405] fs-watcher               &amp;lt;SPSC1000I&amp;gt; Creating web application &amp;#039;/admin&amp;#039;&lt;br/&gt;
[2008-04-29 12:12:09.652] async-delivery-thread-1  &amp;lt;SPSC1001I&amp;gt; Deploying web application &amp;#039;/admin&amp;#039;&lt;/div&gt;
&lt;p&gt;Gone are the pages and pages of output detailing the inner workings of every single type in the startup call chain. Instead, you get messages that &lt;em&gt;actually mean something&lt;/em&gt;. Of course, this doesn&amp;#039;t mean you can&amp;#039;t find out what every type is doing: we still maintain an extensive trace. Indeed, because we split out the most important log messages from trace, our trace can be more verbose because it is intended to be read less often. &lt;/p&gt;
&lt;p&gt;Critical failures in the Platform generate a service dump that can be passed to support personnel to aid in the diagnosis process. This dump contains state from all the major subsystems in the Platform and is hooked in via AspectJ to make sure we pick up every possible site where an unchecked Exception can be raised.&lt;/p&gt;
&lt;p&gt;The Platform also actively monitors for problems in the JVM and triggers a dump. In the 1.0 release this is limited to deadlock monitoring only, but will include memory, lock contention and CPU contention in future releases.&lt;/p&gt;
&lt;h2 id=&quot;roadmap&quot;&gt;Roadmap&lt;/h2&gt;
&lt;p&gt;This beta release is only the start for the SpringSource Application Platform. We have tentatively defined a roadmap to cover the 2.0 release with a focus on five main areas: the Admin Console, middleware integration, additional personalities, clustering and DMK 2.0.&lt;/p&gt;
&lt;p&gt;With the Admin Console we want to exploit all the application knowledge that the Platform has, and make this available to the end-user. The Admin Console will allow for detailed inspection of applications starting at the module level and running right down to the bean level. Applications will be linked to the libraries and bundles they depend on, and the Admin Console will provide the ability to upgrade these libraries dynamically. By understanding the different types of beans that an application contains, the Admin Console will provide for detailed insight into application internals and allow for dynamic reconfiguration of certain application components.&lt;/p&gt;
&lt;p&gt;To support typical enterprise deployment scenarios, the 2.0 version of the Platform will provide explicit support for common enterprise middleware components such as Oracle, TIBCO EMS and IBM MQSeries. Integration with the Admin Console will allow for connections to these middleware providers to be established in minutes rather than hours or days. Applications will be able to access these connections using the OSGi service registry and Spring DM&amp;#039;s &lt;span style=&quot;font-family:courier&quot;&gt;&amp;lt;osgi:reference&amp;gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;The 2.0 release will introduce additional personalities to cover batch, web services and SOA applications.&lt;/p&gt;
&lt;p&gt;Clustering is an important feature for the 2.0 release, with cluster-wide Single System Image (SSI) being the critical piece, and load-balancing and clustered caching being on the roadmap as well. Using the SSI support, administration and deployment operations will be propagated across the cluster. Ultimately, we want to support per-module updates across the cluster, with full cluster-rollback if the upgrade breaks a deployed application.&lt;/p&gt;
&lt;p&gt;DMK 2.0 will include improvements to the concurrency subsystem to support large numbers of bundles that change frequently and to support larger numbers of modules with more complex interdependencies. Also included will be updates to the provisioning subsystem and integrated resource management and monitoring for memory, threads, IO and CPU.&lt;/p&gt;
&lt;h2 id=&quot;what_next&quot;&gt;What next?&lt;/h2&gt;
&lt;p&gt;Please download the Platform and try it out. We are keen to hear about your experiences building new applications and deploying existing ones. All feedback, positive or negative, is welcome. We are particularly interested to hear how we can make the process of building and deploying applications easier and more enjoyable.&lt;/p&gt;
&lt;p&gt;The binary releases and forums can be found &lt;a href=&quot;http://www.springsource.com/beta/s2ap&quot;&gt;here&lt;/a&gt;. Both the &lt;a href=&quot;http://static.springsource.com/projects/s2ap/1.0.0.beta/user-guide/html/&quot;&gt;user&amp;#039;s guide&lt;/a&gt; and &lt;a href=&quot;http://static.springsource.com/projects/s2ap/1.0.0.beta/programmer-guide/html/&quot;&gt;programmer&amp;#039;s guide&lt;/a&gt; are available online. We have a JIRA instance set up &lt;a href=&quot;http://issuetracker.springsource.com/browse/PLATFORM&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/280954280&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Wed, 30 Apr 2008 12:06:07 -0700</pubDate>
        </item>
            
        <item>
            <title>Today, Portability Matters More Than Ever</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Today%2C+Portability+Matters+More+Than+Ever/b4pye</link>
            <description>&lt;p&gt;Yesterday, I blogged about &lt;a href=&quot;http://blog.springsource.com/main/2008/04/28/portability-at-the-framework-level&quot;&gt;how Spring helps maximize application portability&lt;/a&gt;. Even if the portability problem has been an ongoing topic in enterprise Java land for many years, that blog was timely. Today, &lt;a href=&quot;http://www.news.com/8301-10784_3-9931219-7.html?tag=nefd.blgs&quot;&gt;Oracle announced that its $6.7 billion acquisition of BEA Systems has closed&lt;/a&gt;. There is substantial overlap between the product sets of the two companies, so this is bound to bring uncertainty to the WebLogic and OC4J customer bases. WebLogic and OC4J may both fall into the &amp;#034;J2EE server&amp;#034; category but they are very different products with very different characteristics.&lt;/p&gt;
&lt;p&gt;Since many enterprise applications end up integrating very closely with the hosting environment, switching a J2EE server is never a trivial task. Quite on the contrary, it may turn out to cause as much pain as switching an operating system. Common J2EE APIs such as the Servlet API are usually less of a problem, despite subtleties in configuration etc. The real problems usually hide in transaction management setup, resource access semantics, integration with external messaging providers, application-wide authentication and authorization, etc. Even the very heart of J2EE, namely JNDI as lookup mechanism, can cause a lot of issues due to different setup rules, server-specific names for EJB components, etc.&lt;/p&gt;
&lt;p&gt;Fortunately, the many WebLogic and OC4J customers who adopted the Spring programming model are in a comfortable position. They are not only enjoying Spring-style productivity, but are well placed to manage any server migration that may lie ahead. The Spring Framework in conjunction with key portfolio products such as Spring Security allows for handling many common concerns within an enterprise application&amp;#039;s own boundaries. Environment services are used in typical Spring delegation style, in a more specific fashion than in a standard J2EE scenario. As a consequence, moving to a different hosting environment is usually much less intrusive from the application&amp;#039;s perspective.&lt;/p&gt;
&lt;p&gt;We also hear from Spring users on WebSphere who appreciate those same portability benefits in the migration scenarios that they are currently facing: between different generations of the WebSphere Application Server itself (5.1 / 6.0 / 6.1 / 6.1 with EE 5 feature packs), but also between the established WebSphere Application Server and the Geronimo-based WebSphere Community Edition (which are very different products under the common WebSphere naming umbrella).&lt;/p&gt;
&lt;p&gt;I never thought that I would be in the insurance business &lt;img src=&quot;http://blog.springsource.com/main/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;-)&quot; class=&quot;wp-smiley&quot;/&gt;  - but it is satisfying to see Spring helping developers deal with the changing marketplace.
&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/280246162&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Tue, 29 Apr 2008 12:14:03 -0700</pubDate>
        </item>
            
        <item>
            <title>Web Applications and OSGi</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Web+Applications+and+OSGi/b4pws</link>
            <description>&lt;p&gt;Since the first milestones of Spring Dynamic Modules, requests for running web applications in OSGi started to come in. It has been probably one of the most requested features and no wonder, once 1.0 final was released, web support has been the main focus of the 1.1 branch. I am pleased to report that, with the just &lt;a href=&quot;http://www.springframework.org/node/646&quot;&gt;released&lt;/a&gt; M2, as already &lt;a href=&quot;http://blog.springsource.com/main/2008/04/28/portability-at-the-framework-level/&quot;&gt;hinted&lt;/a&gt; by &lt;a href=&quot;http://blog.springsource.com/main/author/juergenh/&quot;&gt;Juergen&lt;/a&gt;, Spring-DM supports not just vanilla wars (available since 1.1.0 M1) but also Spring-MVC applications running inside OSGi. In this entry, I would like to briefly discuss the typical OSGi web scenario and Spring-DM&amp;#039;s approach. But first,&lt;/p&gt;
&lt;h2&gt;Why deploy WARs in OSGi?&lt;/h2&gt;
&lt;p&gt;Easy question: OSGi &lt;em&gt;natively&lt;/em&gt; provides versioning, package wiring and hot reloading. Imagine taking advantage of these features within your applications: you can stop embedding libraries under &lt;tt&gt;WEB-INF/lib&lt;/tt&gt; and start sharing them between your web apps, avoid taglibs duplications (while keeping multiple versions running) and update, at runtime, only certain parts of your application. This is especially useful as web applications tend to be tiered and thus subject to a significant number of changes during their life cycle.&lt;/p&gt;
&lt;h2&gt;Why are web applications in OSGi problematic?&lt;/h2&gt;
&lt;p&gt;The Servlet specification revolves around the idea of a &lt;em&gt;web container&lt;/em&gt;: a runtime environment for web components that provides standard services such as life cycle management (object creation and disposal, thread allocation), concurrency, HTTP request handling and so on. The OSGi platform on the other hand, acts also as a managed environment with its Service Registry, package wiring and versioning (to name just a few). To deal with this problem, the OSGi committee designed, part of the compendium specification, the &lt;a href=&quot;http://www2.osgi.org/javadoc/r4/org/osgi/service/http/HttpService.html&quot;&gt;Http Service&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;As a side note, when dealing with two managed environments, one is facing an interesting problem: what deployment model to use? That is which is be the bootstrapping platform and which one embedded? In our case, one can either deploy the OSGi platform as a WAR or deploy the web container (under some form of service), inside the OSGi platform. More about this though, in a future entry.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This optional service provides a simple API for registering &lt;tt&gt;Servlet&lt;/tt&gt;s and static resources which are mapped to incoming HTTP requests. In order to have a &lt;tt&gt;Servlet&lt;/tt&gt; serving requests inside OSGi, one must &lt;strong&gt;programmatically&lt;/strong&gt; create the &lt;tt&gt;Servlet&lt;/tt&gt; instance and registered it through the aforementioned API. Further more, the Http service supports only the &lt;tt&gt;Servlet&lt;/tt&gt; 2.1 specification which can be quite inconvenient since filters and listeners (used by virtually all of the web frameworks today) are not available.&lt;br/&gt;
Most (if not all) of the solutions available today (that I am aware of), for running web applications in OSGi, rely on the Http Service for their functionality. Some address the problems mentioned above using one of the following techniques (as far as I know):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eliminate the need for code by imposing new or translating existing declarative approaches (such as &lt;tt&gt;web.xml&lt;/tt&gt;) into calls to the Http Service&lt;/li&gt;
&lt;li&gt;provide &lt;tt&gt;Servlet&lt;/tt&gt; 2.1+ features by building on top of the 2.1 API (for example a filter can be implemented by decorating a &lt;tt&gt;Servlet&lt;/tt&gt; instance) or by extending the standard API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both of these methods can be successful and go a long way however, in Spring-DM, we opted for a different, unique approach by:&lt;/p&gt;
&lt;h2&gt;Integrating directly with the web container&lt;/h2&gt;
&lt;p&gt;In Spring-DM, the OSGi and container space are bridged: the WARs, deployed as usual to the web container, use the OSGi space for their class path and resource lookups. The main advantage of this approach is that to both the OSGi platform and the web container, nothing major has changed - it is just &amp;#034;business as usual&amp;#034;.&lt;/p&gt;
&lt;p&gt;With Spring-DM one gets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;full Servlet 2.4/2.5, JSP 2.0/2.1 spec support&lt;/li&gt;
&lt;li&gt;availability of the container capabilities (blocking vs non-blocking IO, allocated threads in the thread pool and so on)&lt;/li&gt;
&lt;li&gt;complete access to &lt;tt&gt;web.xml&lt;/tt&gt; syntax whether it&amp;#039;s about filters, listeners, mapping declaration, security or even jndi references. This is especially useful in cases where the container is integrated with a JTA Transaction Manager or a JMS queue. Note that Spring-DM does no parsing (we figured the container does this a &lt;em&gt;lot&lt;/em&gt; better then we can)&lt;/li&gt;
&lt;li&gt;container specific configuration files (such as Tomcat&amp;#039;s &lt;tt&gt;META-INF/context.xml&lt;/tt&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of the above and much more are possible since Spring-DM deploys bundles &lt;strong&gt;natively&lt;/strong&gt; to the chosen web container (currently Apache Tomcat 5.5.x/6.0.x and Jetty 6.1.x+ are supported out of the box). This means that it&amp;#039;s the web container that instantiates and manages the web application and thus pretty much everything that the container supports is available to the OSGi bundles.&lt;/p&gt;
&lt;p&gt;Though 1.1 is not yet final, I encourage you to give &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=73357&amp;#038;package_id=227224&quot;&gt;M2&lt;/a&gt; a try. The &lt;a href=&quot;http://static.springframework.org/osgi/docs/current/api/&quot;&gt;API&lt;/a&gt;s are pretty much stable and the new features &lt;a href=&quot;http://static.springframework.org/osgi/docs/current/reference/html/what-is-new.html#dm-1.1.x&quot;&gt;documented&lt;/a&gt; (more to come as we approach the GA release) - if you need help, check out the Spring-DM &lt;a href=&quot;http://forum.springframework.org/forumdisplay.php?f=43&quot;&gt;forum&lt;/a&gt; (yes, we finally have one) and the mailing &lt;a href=&quot;http://groups.google.com/group/spring-osgi&quot;&gt;list&lt;/a&gt;. Additionally, if you happen to be at JavaOne, stop by the SpringSource &lt;a href=&quot;http://www.springframework.org/node/634&quot;&gt;booth&lt;/a&gt; and you will get the answers from the source.
&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/280227442&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Tue, 29 Apr 2008 11:14:11 -0700</pubDate>
        </item>
            
        <item>
            <title>Portability at the Framework Level</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Portability+at+the+Framework+Level/b4oy0</link>
            <description>&lt;p&gt;Portability is a key factor in the Spring universe. We believe in portability at the framework level: Application components are written against a specific framework (or framework generation), such as Spring 2.5; the framework is then in turn responsible for adapting onto any underlying hosting environment. However, the specific application framework is above and distinct from the hosting environment. A brand-new framework version may be deployed onto an established generation of the hosting platform, as long as the fundamental capabilities of the environment are sufficient. This approach differs significantly from the traditional approach of baking component frameworks into the deployment platform itself, where the environment supports a specific version of the framework only - and an intended update of the framework requires an update of the entire platform.&lt;/p&gt;
&lt;p&gt;The current Spring Framework generation, 2.5, features explicit support for a wide range of deployment environments. The common Spring programming model applies to all those platforms, with application code typically referring to common framework APIs and specific third-party APIs only. Of course, the actual runtime capabilities differ widely, so the actual services applicable to your application components may differ as well. Here is a list of typical hosting environments:&lt;/p&gt;
&lt;h2&gt;J2EE 1.3 Application Servers&lt;/h2&gt;
&lt;p&gt;Spring 2.5 still supports J2EE 1.3 servers (such as WebSphere 5.1 and WebLogic 8.1) as far as possible. Since those servers usually run on JDK 1.4, obviously annotation support and other Java 5+ goodies won&amp;#039;t be available. However, the basic Spring programming model and all the Spring 2.5 support goodness around it is fully available, as are many popular third-party libraries for which Spring integration code is provided out of the box (e.g. Hibernate 3.2, Quartz 1.6).&lt;/p&gt;
&lt;p&gt;Close integration with server facilities such as the Servlet 2.3 container, the JTA subsystem, server-provided JDBC and JMS resources etc is straightforward. This can easily be achieved through corresponding configuration, with application components being transparently wired through Spring&amp;#039;s dependency injection and AOP capabilities. For example, message listeners can be managed as Spring beans; the corresponding configuration takes into account that the JMS version on a J2EE 1.3 server is limited to 1.0.2, adapting accordingly.&lt;/p&gt;
&lt;h2&gt;J2EE 1.4 Application Servers&lt;/h2&gt;
&lt;p&gt;The mainstream deployment environment for Spring applications these days is a J2EE 1.4 server, simply because of the widespread availability of J2EE 1.4 products. Many such servers (e.g. WebSphere 6.1 and WebLogic 9.2) run on JDK 1.5, so the full power and flexibility of Spring&amp;#039;s Java annotation support is available on those platforms - even if the native APIs and component models of those servers do not provide dedicated Java 5 support. Of course, if the server platform is limited to JDK 1.4 (like on WebSphere 6.0), then Spring is limited to JDK 1.4 as well - fortunately, with a lot of goodies still being available.&lt;/p&gt;
&lt;p&gt;Spring 2.5 provides in-depth support for J2EE 1.4 APIs and common server extensions. This includes Servlet 2.4, JSP 2.0 and JAX-RPC 1.1, as well as JMS 1.1 and JCA 1.5. Spring&amp;#039;s JMX support also plays very nicely with the J2EE 1.4 provided JMX support in the server environment - easy to configure through Spring 2.5&amp;#039;s &amp;#034;&amp;lt;context:mbean-export&amp;gt;&amp;#034; element. Spring can autodetect the specific server&amp;#039;s JTA capabilities through the &amp;#034;&amp;lt;tx:jta-transaction-manager&amp;gt;&amp;#034; element; this includes automatic support for WebSphere&amp;#039;s UOWManager API and WebLogic&amp;#039;s JTA extensions, if applicable. As a further common extension, Spring may delegate to a CommonJ WorkManager (on WebSphere and WebLogic) or a JCA WorkManager (on GlassFish and JBoss) in order to have asynchronous tasks managed by the hosting environment, with the corresponding thread pool configured in the server&amp;#039;s console.&lt;/p&gt;
&lt;h2&gt;Java EE 5 Application Servers&lt;/h2&gt;
&lt;p&gt;A central theme behind the Spring Framework 2.5 release was comprehensive support for Java EE 5 APIs. Spring 2.0 already featured full-fledged support for the Java Persistence API (JPA). Since Spring 2.5, this is completed through the addition of JAX-WS support (in the &amp;#034;remoting.jaxws&amp;#034; package), explicit support for EJB 3 access (transparently through &amp;#034;&amp;lt;jee:local-slsb&amp;gt;&amp;#034; and &amp;#034;&amp;lt;jee:remote-slsb&amp;gt;&amp;#034;), and JTA 1.1 support (autodetected by &amp;#034;&amp;lt;tx:jta-transaction-manager&amp;gt;&amp;#034;) as well as JSF 1.2 support (through SpringBeanFacesELResolver). Furthermore, Spring provides support for the JSR-250 Common Annotations and common JAX-WS, JPA and EJB 3 annotations in Spring-managed bean components (through &amp;#034;&amp;lt;context:annotation-config/&amp;gt;&amp;#034;); this is consistent with the support for those annotations in JSF 1.2 managed beans and EJB 3 session beans.&lt;/p&gt;
&lt;p&gt;The primary Java EE 5 product that is popular among Spring users is Sun&amp;#039;s GlassFish V2 - already out there for two years. More recently, WebLogic 10 and Geronimo 2.0 joined the group of fully certified Java EE 5 servers, with previous (J2EE 1.4 compatible) generations of those servers still being very popular as well. Spring 2.5 also supports J2EE 1.4 servers with early support for specific Java EE 5 APIs: e.g. WebSphere 6.1 with its JAXB/JAX-WS and JPA/EJB3 feature packs, as well as JBoss 4.2 with its JPA/EJB3 support.&lt;/p&gt;
&lt;h2&gt;Servlet containers a.k.a. web application servers&lt;/h2&gt;
&lt;p&gt;A very common deployment environment for Spring is Tomcat, typically in its 5.5 or 6.0 generation. Jetty proves to be quite popular as well, as does Caucho&amp;#039;s Resin. The latest generations of those products support Servlet 2.5 and JSP 2.1, i.e. the Java EE 5 level of web container specifications. Spring 2.5 happily runs on all of those servlet containers, providing full application container services within each Java EE web application (WAR file).&lt;/p&gt;
&lt;p&gt;Typical setup choices in such an environment include native JDBC transactions and native Java 5 thread pooling. However, Spring - as the open framework that it is - also supports embedding a dedicated JTA transaction coordinator product (e.g. Atomikos or the Geronimo Transaction Manager), or any other third-party middleware. Furthermore, Spring provides full JPA container support in such an environment, allowing for &amp;#034;Java EE level&amp;#034; JPA support in a plain servlet container.&lt;/p&gt;
&lt;p&gt;Servlet containers typically allow for full control over the underlying JVM. This can be leveraged in a Spring environment on such a container, e.g. through the unlimited use of AspectJ load-time weaving (which faces limits in a traditional Java EE environment) or through choosing Java 6 (whereas most Java EE servers are limited to a Java 5 platform). Note that Spring 2.5 explicitly supports Java 6 environments, allowing for the use of JMX MXBeans, JDBC 4.0, JAX-WS 2.1 etc!&lt;/p&gt;
&lt;h2&gt;Custom environments - plain or OSGi based&lt;/h2&gt;
&lt;p&gt;Beyond Java EE oriented environments, Spring is also very well suited for custom environments on a Java basis. This includes plain JVMs bootstrapped from the command line, possibly integrated with corporate management infrastructure. Such &amp;#034;simple&amp;#034; processes are often used for headless systems that operate in the background, for example message-processing backbones. Spring provides comprehensive framework services for such environments, including component lifecycle management, declarative transactions, and message listener management. While such an architecture is not often talked about, some pretty interesting systems at the heart of large enterprises are implemented that way.&lt;/p&gt;
&lt;p&gt;In recent times, OSGi is becoming more and more of an obvious choice for such environments. OSGi provides foundational deployment and runtime services that constitute a great match for the requirements of modular enterprise systems. In such a setting, Spring manages application components within each OSGi bundle, whereas the OSGi platform provides overall management of all deployed bundles. With the upcoming Spring Dynamic Modules 1.1, even web application scenarios on an OSGi basis are becoming as straightforward as they need to be for mainstream usage. Spring on OSGi is a very promising combination that is only starting to show the full breadth and depth of its power!&lt;/p&gt;
&lt;h2&gt;The same model in any kind of deployment environment&lt;/h2&gt;
&lt;p&gt;Spring essentially brings its common programming model to any kind of Java-based deployment environment - actually, not just a &lt;em&gt;programming model&lt;/em&gt; but a comprehensive &lt;em&gt;configuration model&lt;/em&gt; too. This common framework is not limited to &amp;#034;compliant&amp;#034; hosting environments; it can be deployed onto existing platforms as well - runtime platforms that never expected to support this specific framework (or in fact any specific framework) in the first place. Spring redefines the notion of &amp;#034;component portability&amp;#034; to span more hosting environments than Java EE was ever (and will ever be) intended for, with the component model and central framework services being completely independent from specific hosting environments and specific deployment units. &lt;/p&gt;
&lt;p&gt;An important benefit of such an arrangement is that it allows the framework and the hosting environment to evolve independently - in particular, a brand-new framework version can be deployed onto an established hosting environment. Spring focuses on application components and configuration convenience; the hosting environment focuses on the generic management of deployment units and shared services. If such a deployment platform happens to be integrated into your corporate environment already, you can preserve the investment while still taking full advantage of the latest application framework innovations&amp;#8230; If, on the other hand, new innovations in terms of deployment platforms emerge, Spring allows you to take immediate advantage of those without fundamental changes in the programming model.&lt;/p&gt;
&lt;p&gt;Switching between different hosting environments should have &lt;em&gt;as little impact on application components and application configuration as possible&lt;/em&gt;, even when switching between different deployment models. This is a central element in the Spring vision, and we&amp;#039;re more committed than ever to live up to that promise! From traditional J2EE servers to OSGi-based deployment environments - the Spring Framework brings a lot of commonality to all those environments, while at the same time deeply integrating with relevant platform services in order to get maximum benefit from the specific environment that you chose. Whichever platform you are running on - you may be sure that the Spring Framework is at your full disposal!
&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/279446909&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Mon, 28 Apr 2008 08:13:48 -0700</pubDate>
        </item>
            
        <item>
            <title>The Conference Season Rolls On</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/The+Conference+Season+Rolls+On/b4miu</link>
            <description>&lt;a href=&quot;http://blog.interface21.com/main/author/rodj/&quot; title=&quot;Posts by Rod Johnson&quot;&gt;&lt;img src=&quot;http://blog.interface21.com/main/wp-content/images/authors/rodj.jpg&quot; alt=&quot;Rod Johnson&quot; title=&quot;Rod Johnson&quot;/&gt;&lt;/a&gt;&lt;p&gt;Yesterday I gave the opening keynote at the &lt;a href=&quot;http://it-republik.de/jaxenter/jax/&quot;&gt;JAX conference&lt;/a&gt; in Wiesbaden, Germany. JAX is one of Europe’s largest Java conferences, with over 2,000 attendees. The topic was &lt;em&gt;The Future of Enterprise Java&lt;/em&gt;, and I expanded on the themes of my &lt;a href=&quot;http://blog.springsource.com/main/2008/04/09/the-biggest-losers-next-contestant-java-bloatware/&quot;&gt;recent blog of predictions&lt;/a&gt;, going into more detail about the &lt;a href=&quot;http://blog.springsource.com/main/2007/07/03/java-ee-6-gets-it-right/&quot;&gt;implications of Java EE 6&lt;/a&gt; and the future of the application server.&lt;br/&gt;
&lt;br/&gt;
I’ve &lt;a href=&quot;http://blog.springsource.com/main/wp-content/uploads/2008/04/JAX%20Keynote%20-%20Future%20of%20enterprise%20Java.pdf&quot;&gt;uploaded the slides&lt;/a&gt;, which include 8 predictions for an interesting period in the evolution of enterprise Java. This is the first time I&amp;#039;ve referred to Joseph Stalin, Monica Lewinsky and Monty Python in the same presentation.&lt;br/&gt;
&lt;br/&gt;
JAX was an enjoyable experience overall, with excellent speakers from both Europe and North America and great questions from attendees. The SpringSource booth looked great as always, and it was good to see so many attendees. And, of course, German beer tastes as good as ever!&lt;br/&gt;
&lt;br/&gt;
This seems to be the most active time of year for conferences. In the last few weeks I’ve spoken at QCon in London and the ServerSide in Vegas, and I have several more conferences coming up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://java.sun.com/javaone/sf/index.jsp&quot;&gt;JavaOne&lt;/a&gt;. I’ll be speaking on Spring 2.5 (I’m giving the session twice, as there is so much interest), Ben Alex will take about Spring Security and Dave Syer about Spring Batch. SpringSource will have its biggest ever presence at JavaOne. Come to our booth to meet the ultimate Spring experts, and see demos of &lt;a href=&quot;http://blog.springsource.com/main/2008/03/20/springsource-tool-suite-released/&quot;&gt;SpringSource Tool Suite&lt;/a&gt;, &lt;a href=&quot;http://blog.springsource.com/main/2008/03/31/springsource-application-management-suite-ams-released/&quot;&gt;SpringSource Application Management Suite&lt;/a&gt; and other &lt;a href=&quot;http://www.springsource.com/web/guest/products/enterprise/edition&quot;&gt;SpringSource Enterprise&lt;/a&gt; technologies.
&lt;li&gt;&lt;a href=&quot;http://jaoo.com.au/sydney-2008/conference/&quot;&gt;JAOO Sydney (June 2-3)&lt;/a&gt;: I’ve spoken several times at the Sydney JUG (the first time, nearly 10 years ago, about JSP 0.92 IIRC) and the Sydney Spring Users Group, but this is the first time I’ll have spoken at a conference in Sydney. It’s exciting to see a major conference coming to Sydney.
&lt;li&gt;&lt;a href=&quot;http://www.springone.com/display/SpringOne08/Home&quot;&gt;SpringOne&lt;/a&gt; in Antwerp, Belgium (June 11-12). With all the recent releases in the Spring Portfolio, this should be a great show.
&lt;li&gt;&lt;a href=&quot;http://jazoon.com/&quot;&gt;Jazoon&lt;/a&gt;, in Zurich (June 23-26). I’m giving a keynote, again on the big picture for the industry.
&lt;/ul&gt;
&lt;p&gt;I hope to see you at at least one of these events!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/276671094&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Wed, 23 Apr 2008 23:23:44 -0700</pubDate>
        </item>
            
        <item>
            <title>Spring Security 2.0 Final Release: No More Dead Fairies</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Spring+Security+2.0+Final+Release%3A+No+More+Dead+Fairies/b4cjo</link>
            <description>&lt;a href=&quot;http://blog.interface21.com/main/author/rodj/&quot; title=&quot;Posts by Rod Johnson&quot;&gt;&lt;img src=&quot;http://blog.interface21.com/main/wp-content/images/authors/rodj.jpg&quot; alt=&quot;Rod Johnson&quot; title=&quot;Rod Johnson&quot;/&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;http://www.springframework.org/node/627&quot;&gt;Spring Security 2.0 has been released&lt;/a&gt;. This is a major step forward for the Spring Portfolio. Spring (Acegi) Security is already the Java platform&amp;#039;s most widely used enterprise security framework, with over 250,000 downloads on SourceForge and over 20,000 downloads per release. Through making it so much simpler to use, this release will undoubtedly take adoption to a new level.&lt;/p&gt;
&lt;p&gt;I&amp;#039;m particularly pleased about this release for a number of reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;#039;s a great thing for the Spring community. It&amp;#039;s (a lot) simpler to use, as well as more powerful. It puts the most powerful enterprise Java security solution within the reach of many more users, pretty much eliminating the hurdles to adoption. See this &lt;a href=&quot;http://static.springframework.org/spring-security/site/petclinic-tutorial.html&quot;&gt;tutorial &lt;/a&gt;for an example of just how much easier it makes it to secure a typical web application. The proliferation of XML bean definitions is a thing of the past.&lt;/li&gt;
&lt;li&gt;It&amp;#039;s a continuation of the work of Spring 2.x, through applying the power of a custom XML namespace to enable aggressive defaulting, while still allowing for customization.&lt;/li&gt;
&lt;li&gt;Like Spring 2.5, it exhibits the current Spring Portfolio trend toward radical reduction in the need for XML.
&lt;li&gt;It&amp;#039;s a proof of the value of the SpringSource business model. Our revenue model enables us to invest more than ever in creating open source software. Without being able to hire both Acegi/Spring Security creator Ben Alex and the other major committer, Luke Taylor, this release either wouldn&amp;#039;t have occurred or would have been much less extensive.&lt;/li&gt;
&lt;li&gt;It&amp;#039;s &lt;a href=&quot;http://blog.springsource.com/main/2007/12/06/whats-new-in-spring-security-2/&quot;&gt;good for the fairy kingdom&lt;/a&gt;.
&lt;/ul&gt;
&lt;p&gt;Acegi/Spring Security creator Ben Alex and Luke Taylor have done a great job. Ben will be talking about Spring Security at Java One next month. If you&amp;#039;ll be in San Francisco then, it will be a great opportunity to hear about the new features and get a chance to talk to the guy behind the product.&lt;/p&gt;
&lt;p&gt;Download &lt;a href=&quot;http://www.springframework.org/download&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/272008901&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 17 Apr 2008 01:21:19 -0700</pubDate>
        </item>
            
        <item>
            <title>Runtime Error Analysis in the SpringSource Tool Suite</title>
            <link>http://swik.net/Spring/Interface21+Team+Blog/Runtime+Error+Analysis+in+the+SpringSource+Tool+Suite/b4aji</link>
            <description>&lt;a href=&quot;http://blog.interface21.com/main/author/alefa/&quot; title=&quot;Posts by Alef Arendsen&quot;&gt;&lt;img src=&quot;http://blog.interface21.com/main/wp-content/images/authors/alefa.jpg&quot; alt=&quot;Alef Arendsen&quot; title=&quot;Alef Arendsen&quot;/&gt;&lt;/a&gt;&lt;p&gt;Three weeks ago, the SpringSource Tool Suite was released. Christian, in charge of this product &lt;a href=&quot;http://blog.springsource.com/main/2008/03/20/springsource-tool-suite-released/&quot;&gt;blogged about it&lt;/a&gt; already and we also have a webinar available for those of you that want to get up to speed with all of the functionality it currently offers. In this entry, I wanted to highlight the runtime error reporting functionality specifically.&lt;/p&gt;
&lt;p&gt;When I&amp;#039;m programming, sometimes, the console window shows dozens of stack traces due to some error I&amp;#039;ve caused. Sometimes, I&amp;#039;m lucky and the stack trace looks familiar. If so, then the problem is probably easy to solve. Sometimes however, the information you need is buried so deep inside all those stack traces, that figuring out what the real problem is takes a while.&lt;/p&gt;
&lt;p&gt;With the introduction of the SpringSource Tool Suite, we&amp;#039;ve started to build up a online knowledge base that includes resolutions for common problems you might encounter. Using the knowledge base, you no longer have to browse through pages and pages of exception stack trace information. Instead clicking a simple button will run a query over the knowledge base and if possible cause is found, you automatically get relevant information that will help you solve your particular problem. The quick screencast below should give you some insight into the functionality. Note that the full screen functionality of blip.tv works fairly well, so in case the fonts are a bit small in some parts of the screen cast, using the full screen mode solves this.&lt;/p&gt;
&lt;p&gt;&lt;embed src=&quot;http://blip.tv/play/AbLJBwA&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;850&quot; height=&quot;558&quot;&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;We have just started out filling the knowledge base and with the release of the tool suite, it&amp;#039;ll probably contain a wealth of errors already. But obviously, the knowledge base cannot hold a resolution for every problem you might encounter. That&amp;#039;s why we are constantly adding information about potential errors ourselves, &lt;b&gt;but also allow you to add particular error conditions with suggested solutions&lt;/b&gt;. Authoring tools are available directly inside the IDE, so you don&amp;#039;t have to bother about using some kind of proprietary XML format. All content submitting by you (and other developers) will periodically be reviewed and released as an update to the knowledge base. In a next screen cast, I&amp;#039;ll highlight this functionality.&lt;/p&gt;
&lt;p&gt;I&amp;#039;m am really excited about this particular feature of the SpringSource Tool Suite as it will help me get my errors out of the way much quicker than in the past. If you&amp;#039;re interested in reviewing the SpringSource Tool Suite, please visit the &lt;a href=&quot;http://www.springsource.com/web/guest/products/suite/sts&quot;&gt;product page&lt;/a&gt; on our web site where currently, you can download a beta after having registered. On that page, we also have a longer webinar available in which Christian Dupuis explains the SpringSource Tool Suite in much more detail.
&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Interface21TeamBlog/~4/270264456&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Mon, 14 Apr 2008 15:21:10 -0700</pubDate>
        </item>
            
    </channel>
</rss>
