<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Jivespace Community Blog</title>
    <link>http://www.jivesoftware.com/jivespace/blogs/jivespace</link>
    <description>Jivespace Developer Community Blog</description>
    <pubDate>Tue, 24 Jun 2008 19:33:43 GMT</pubDate>
    <generator>Clearspace 2.5.5 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2008-06-24T19:33:43Z</dc:date>
    <item>
      <title>Customizations in Clearspace 2.x Part One</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/06/24/customizations-in-clearspace-2x-part-one</link>
      <description>&lt;!-- [DocumentBodyStart:ca971787-1d50-4c4b-9030-cf906e949454] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;We've been noticing more and more discussion on Jivespace about people migrating older customizations to the new Clearspace 2.x architecture along with quite a few people writing new customizations. I thought that now would be a good time for a refresher series of posts on customizing for Clearspace 2.x&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Clearspace version 2 includes a few big changes to the conventions and frameworks on which Clearspace is built. Many of these changes were made to improve Clearspace extensibility by letting the application and extensions be more loosely coupled -- and so be more durable during upgrade. Other changes that impact customizations were simply feature improvements in which some change to code is required.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here's a high-level list of the changes that effect extension and customization code:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Clearspace was &lt;strong&gt;migrated to the Spring framework&lt;/strong&gt;. This has both broad and deep effects on code written to run on Clearspace; such code must use the same conventions in order to integrate well. The changes include API refactoring to support dependency injection and integration of Spring modules (for security and transaction management, for example).&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Clearspace was &lt;strong&gt;migrated from WebWork2 to Struts2&lt;/strong&gt;. This has broad impact on plugins, but the changes are relatively small&amp;nbsp; -- primarily effecting syntax in FreeMarker templates and configuration files.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;strong&gt;Widgets were enhanced&lt;/strong&gt; to support use in multiple contexts, rather than just space overview pages. Changes to widget development support this new feature.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;The &lt;strong&gt;macro-related API was narrowed&lt;/strong&gt; to the area documented in version 1, essentially excluding an undocumented area that some people used. Also, macros must now return HTML that qualifies as well-formed XML.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;strong&gt;Web services support&lt;/strong&gt; is now provided through CXF, an evolution of XFire (the version 1 technology). A larger change results from the migration to Spring, which makes integrating new web services a bit more complex.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;strong&gt;Custom user data providers&lt;/strong&gt; are now based on a streamlined API. These must be rewritten, but the new model is much simpler.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;strong&gt;Custom authentication providers&lt;/strong&gt; are now based on Spring through Acegi. The change is pretty significant, including new API and configuration conventions.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;strong&gt;Myriad API changes&lt;/strong&gt; resulted from the migration to Spring and from an effort to streamline and modularize the Clearspace API. These include support for the projects feature, refactoring manager interfaces, content handling, and conventions such as dependency injection.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;For those extensions and customizations deployed as plugins (widgets, actions, macros, and web services), there are a few changes in version 2 with broad effect.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Migration from WebWork to Struts means replacing your xwork-plugin.xml with a struts.xml&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Migration to Spring means adding a spring.xml for certain kinds of Spring support.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;One benefit of the new model is that modifying your plugin.xml, struts.xml, or spring.xml will provoke Clearspace to reload your plugin. This can be handy for debugging.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Support for a &amp;lt;maxserverversion&amp;gt; element was added. Similar to the &amp;lt;minserverversion&amp;gt; element, use the new one to specify that highest Clearspace version on which your plugin is supported. This can be useful when you want to ensure that upgrades to Clearspace prompt the plugin's users to upgrade the plugin also.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Plugin life cycle methods changed. If you used the version 1 com.jivesoftware.base.Plugin interface, you'll notice that its two methods have changed in order to support Spring. Semantics for the methods is unchanged. &lt;br/&gt; &lt;/p&gt;&lt;/li&gt;&lt;ul&gt;&lt;li level="2" type="ul"&gt;&lt;p&gt;Plugin.initialize(PluginManager, PluginMetaData) is now Plugin.init, a method without parameters. Use Spring dependency injection to receive a PluginManager instance; you can retrieve a PluginMetaData instance from the manager.&lt;/p&gt;&lt;/li&gt;&lt;li level="2" type="ul"&gt;&lt;p&gt;Plugin.destroyPlugin is now Plugin.destroy.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The information above along with more details can be found in the &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-2060/"&gt;Upgrading Extensions to 2.0 documentation&lt;/a&gt;.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:ca971787-1d50-4c4b-9030-cf906e949454] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">spring</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">2.0</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugins</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">spring</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">struts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">webservices</category>
      <pubDate>Tue, 24 Jun 2008 20:00:29 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/06/24/customizations-in-clearspace-2x-part-one</guid>
      <dc:date>2008-06-24T20:00:29Z</dc:date>
      <clearspace:dateToText>6 months, 2 weeks ago</clearspace:dateToText>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/customizations-in-clearspace-2x-part-one</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1542</wfw:commentRss>
    </item>
    <item>
      <title>Theming in Clearspace 2.0</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/12/theming-in-clearspace-20</link>
      <description>&lt;!-- [DocumentBodyStart:3e58a3e4-4594-49df-9edb-2a155077ba30] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;As you know, we changed a few things in our underlying architecture for Clearspace 2.0, including some changes in the Freemarker templates as a result of moving from Webwork to Struts along with some other changes. In this video, Matt Walker, Professional Services Engineer at Jive Software, talks about the process of upgrading existing themes along with plenty of best practices to make your themes more easily upgradeable in the future.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Matt also did an earlier screencast as an &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/blogs/podcasts/2008/01/17/introduction-to-skinning-clearspace"&gt;Introduction to Skinning Clearspace&lt;/a&gt;, which you might also want to watch along with this video.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-ThemingClearspace178.flv&amp;amp;source=" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-ThemingClearspace178.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can also download the &lt;a class="jive-link-external-small" href="http://blip.tv/file/get/Samjive-ThemingClearspace178.mov"&gt;Quicktime version&lt;/a&gt; (Caution: file is ~200MB), or you can &lt;a class="jive-link-external-small" href="http://blip.tv/file/893313"&gt;watch a larger version&lt;/a&gt; online, which will improve readability of embedded screenshots (recommended). &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The entire presentation is also attached below as a PDF file.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:3e58a3e4-4594-49df-9edb-2a155077ba30] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">struts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">themes</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jive_software</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">struts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">freemarker</category>
      <pubDate>Mon, 12 May 2008 16:58:01 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/12/theming-in-clearspace-20</guid>
      <dc:date>2008-05-12T16:58:01Z</dc:date>
      <clearspace:dateToText>8 months, 1 day ago</clearspace:dateToText>
      <clearspace:replyCount>2</clearspace:replyCount>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/theming-in-clearspace-20</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1523</wfw:commentRss>
    </item>
    <item>
      <title>How and Where we used the Spring framework in Clearspace 2.0</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/03/20/how-and-where-we-used-the-spring-framework-in-clearspace-20</link>
      <description>&lt;!-- [DocumentBodyStart:a7e3f9d8-ed57-4404-bf0e-77174676fbb6] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;For those of you who are fans of Spring, or those who are just plain curious, I'd like to briefly go over the parts of the framework we used in the latest release of Clearspace.&amp;nbsp; One of our goals for the new release was to take advantage of the power the framework offered where it made sense to us, and in the end it turned out Spring and Clearspace are a good fit for eachother.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Core Context and Struts&lt;/strong&gt;: The JiveContext now extends the Spring ApplicationContext.&amp;nbsp; Everything registered with the context is a Spring bean.&amp;nbsp; Struts actions and interceptors are autowired using these bean definitions.&amp;nbsp; Writing Actions just got a whole lot simpler. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Data Access&lt;/strong&gt;: We changed a lot of our code to use Spring's JdbcTemplate and SimpleJdbcTemplate.&amp;nbsp; This has the advantage of making our DAO code much simpler and less error prone, as well as quicker to write.&amp;nbsp; Some classes ended up half the size after this effort.&amp;nbsp; We used annotation-based transactions, wired in using Spring's AspectJ support via the AnnotationTransactionAspect.&amp;nbsp; This allowed us to quickly add transactional coverage of far more DAO methods than before, and more easily make methods transactional in future development.&amp;nbsp; Finally we used Spring's LDAPTemplate in several places to simplify directory access code.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: We're using Acegi (Spring Security) for authentication.&amp;nbsp; This allows the possibility to authenticate against more than one data store.&amp;nbsp; For example, you could have one account that authenticates against LDAP, and a separate machine account that authenticates against a database.&amp;nbsp; It also provides a well documented, peer-reviewed framework to use as a platform for developing custom authentication solutions.&amp;nbsp; We are investigating using Acegi more fully for authorization in future releases.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tasks&lt;/strong&gt;: We worked hard to externalize timed tasks so that they each have bean definitions.&amp;nbsp; This gives greater insight into what is being fired, why, and where.&amp;nbsp; It also makes it much easier to control when a task is firing, or turn it off completely for testing purposes.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: We allow plugins to add their own Spring bean definitions to the context, so that Plugin actions and interceptors can be autowired as expected.&amp;nbsp; This is done via the plugin's "spring.xml" file.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Web Services and AJAX&lt;/strong&gt;: Apache CXF is now used to expose SOAP and REST style web services.&amp;nbsp; It relies heavily on Spring for its configuration.&amp;nbsp; We are also using Spring for DWR configuration, via the Spring 2.0 DWR namespace.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Customizations&lt;/strong&gt;: As part of the new release we also parse any XML file in the &amp;lt;jive home&amp;gt;/etc directory with the expectation that it's a Spring configuration file.&amp;nbsp; Developers can use this to extend or override bean definitions in the core application context.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;In the end, we found Spring very helpful to simplifying our codebase and providing a point of cohesion.&amp;nbsp; We look forward to using it even more fully as we continue to develop Clearspace, and as the Spring framework itself evolves.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:a7e3f9d8-ed57-4404-bf0e-77174676fbb6] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspacex</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">2.0</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">spring</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">springframework</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">struts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">differences</category>
      <pubDate>Thu, 20 Mar 2008 19:55:01 GMT</pubDate>
      <author>dolan.halbrook@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/03/20/how-and-where-we-used-the-spring-framework-in-clearspace-20</guid>
      <dc:date>2008-03-20T19:55:01Z</dc:date>
      <clearspace:dateToText>9 months, 3 weeks ago</clearspace:dateToText>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/how-and-where-we-used-the-spring-framework-in-clearspace-20</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1494</wfw:commentRss>
    </item>
  </channel>
</rss>

