<?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>Blog Posts From Jivespace Community Blog Tagged With sbs</title>
    <link>http://www.jivesoftware.com/jivespace/blogs/jivespace</link>
    <description>Jivespace Developer Community Blog</description>
    <pubDate>Tue, 25 Aug 2009 15:24:08 GMT</pubDate>
    <generator>Jive SBS 3.0.8 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2009-08-25T15:24:08Z</dc:date>
    <item>
      <title>Simplifying plugin upgrades</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/08/25/simplifying-plugin-upgrades</link>
      <description>&lt;!-- [DocumentBodyStart:f733ae57-90d1-478e-a3ad-a55a3671b4ad] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Attention, Developers!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Have you ever wondered how you can run an upgrade task in a plugin to do something like add an extra column to a table or a new index to boost performance?&amp;#160; You know, those one-time tasks that need to be applied consistently across all your environments?&amp;#160; One of the powerful (yet often overlooked) features in Jive SBS 3.0 is the ability to run upgrade tasks in a plugin.&amp;#160; These tasks are run once and can do anything from modifying a database to creating new files and folders.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;The Past&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;...&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Prior to SBS, developers relied on a number of techniques to perform upgrade tasks, including:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Checking for the presence of a system property and, if not present, firing off a background thread to perform the upgrade task from the plugin class' init() method&lt;br/&gt;(downside: someone deletes the system property and your upgrade task gets run again, clustering introduces risk that your upgrade will be run more than once, more work than necessary)&lt;/li&gt;&lt;li&gt;Writing a SQL script that could be run by the DBA on each environment prior to the plugin upgrade&lt;br/&gt;(downside: may require special permission to run scripts, especially in hosted environment; not cross-platform compatible; multiple steps in deployment process may easily be forgotten)&lt;/li&gt;&lt;li&gt;Overlaying the core application to include upgrade tasks with core application upgrade tasks to take advantage of native process for handling upgrades&lt;br/&gt;(downside: must be merged with every release, requires multiple deployment artifacts, risky)&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;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;...And Now?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I hoped you would ask!&amp;#160; Here's what you need to do:&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;Step 1&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you don't already have it, add the following two items to your plugin.xml:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:cb86dde2-18d4-4795-a673-dad18edaf276]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-comment"&gt;&amp;lt;!--...omitted for clarity...--&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;databaseKey&amp;gt;&lt;/span&gt;pluginName&lt;span class="jive-xml-tag"&gt;&amp;lt;/databaseKey&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;databaseVersion&amp;gt;&lt;/span&gt;1000001&lt;span class="jive-xml-tag"&gt;&amp;lt;/databaseVersion&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--...omitted for clarity...--&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:cb86dde2-18d4-4795-a673-dad18edaf276]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now when the plugin is installed, it will create a record in the jiveVersion database table with the appropriate values for name and version.&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;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Create a new file "upgrade.xml" at the root of your plugin.&amp;#160; This new file will live alongside your spring.xml, struts.xml, etc., and contains the list of upgrade tasks that will be run.&amp;#160; Each upgrade task is given a version.&amp;#160; If the version of your upgrade task is greater than the value in the jiveVersion table for your plugin, your task will be run.&amp;#160; Once the upgrade is complete, the version in the database will be the same as the highest upgrade task version.&amp;#160; Here's an example upgrade.xml taken from our Supportal:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:a02e6de3-cd8c-4ccd-bad3-5a4b8bbedc2f]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;upgrade-config&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;upgrades&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;upgrade order="1"&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;supportal&lt;span class="jive-xml-tag"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;tasks&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-comment"&gt;&amp;lt;!-- 3.2.0 --&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32000001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.AddEnvironmentsTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32000002"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.EnvironmentPermissionsTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- 3.2.1 --&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32100001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.DeleteDuplicateEnvironmentFieldValuesTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- 3.2.2 --&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32200001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.RemoveWebServerRequirementFromEnvironmentsTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- 3.2.3 --&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32300001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.UpdateEnvironmentFieldOptionsTask1"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/tasks&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/upgrade&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/upgrades&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;/upgrade-config&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:a02e6de3-cd8c-4ccd-bad3-5a4b8bbedc2f]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Once you have added your task, make sure to update the databaseVersion in your plugin.xml to the same value as your highest upgrade task!&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;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Create your upgrade task class.&amp;#160; In the example below we're calling out to an XML file that contains the new schema details.&amp;#160; More on that in a sec.&amp;#160; Here's the source code:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:9617e2c1-8051-49f7-9272-ea11feb927da]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-java"&gt;&lt;span style="color: navy;"&gt;&lt;strong&gt;package&lt;/strong&gt;&lt;/span&gt; com.jivesoftware.community.upgrade.tasks;&lt;br/&gt; &lt;br/&gt;...imports omitted&lt;br/&gt; &lt;br/&gt;&lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/span&gt; RemoveWebServerRequirementFromEnvironmentsTask &lt;span style="color: navy;"&gt;&lt;strong&gt;implements&lt;/strong&gt;&lt;/span&gt; UpgradeTask &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;private&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;static&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;final&lt;/strong&gt;&lt;/span&gt; String SQL = &lt;span style="color: red;"&gt;"RemoveWebServerRequirementFromEnvironmentsTask"&lt;/span&gt;;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getName() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Remove requirement for filling out web server from environment template fields"&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getDescription() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Task to mark environment template fields for web server as non-required."&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getEstimatedRunTime() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"1 second"&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getInstructions() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"To run manually, copy the SQL from the RemoveWebServerRequirementFromEnvironmentsTask.xml and run directly against your DB."&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;boolean&lt;/strong&gt;&lt;/span&gt; isBackgroundTask() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;void&lt;/strong&gt;&lt;/span&gt; doTask() &lt;span style="color: navy;"&gt;&lt;strong&gt;throws&lt;/strong&gt;&lt;/span&gt; Exception &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UpgradeUtils.executeSQLGenFile(SQL, getClass());&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:9617e2c1-8051-49f7-9272-ea11feb927da]--&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;p&gt;&lt;strong&gt;Step 4 (almost there!)&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The last thing you need to do (assuming you are updating your DB, of course) is to create the XML file that will be read when UpgradeUtils.executeSQLGenFile(SQL, getClass()) is called.&amp;#160; To do this create an XML file in the same path of your class with the same name as your class, only ending with the .xml extension.&amp;#160; Following the example above, this could look like the following:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:d6bd2b72-8502-462f-a546-499f26392ca1]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;schema name="Environment Schema"&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;sql description="Update default data for environments."&amp;gt;&lt;/span&gt;&amp;lt;![CDATA[&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 40;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 59;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 78;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 97;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 116;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 135;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 154;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ]]&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/sql&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;/schema&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:d6bd2b72-8502-462f-a546-499f26392ca1]--&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;p&gt;The &amp;lt;sql&amp;gt; element lets you execute arbitrary DML or DDL statements against your DB.&amp;#160; You can also use the &amp;lt;alter&amp;gt; tag to change an existing table:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:e4161a01-918a-4388-92f6-501a657fb8fd]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;alter table="jiveBlog" type="add" description="Add Container Type and ID to JiveBlog"&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="containerType" type="int" nullable="false" default="-2"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The type of the container to which the blog belongs"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="containerID" type="bigint" nullable="false" default="17"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The ID of the container to which the blog belongs."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;index type="normal" name="jiveBlg_ctID_idx" column="containerID, containerType"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/alter&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:e4161a01-918a-4388-92f6-501a657fb8fd]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Additionally, you can define new tables using the same syntax as you would in your schema.xml:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:3b663965-f348-4628-bc23-20616ec3e448]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;table name="environmentTemplate" description="Customer environment template"&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="templateID" type="bigint" nullable="false" description="Environment template ID."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="name" type="varchar" size="255" nullable="false" unicode="true"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The display name of the template (shows in environment template selection)."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="description" type="text" nullable="true" index_none="true" unicode="true"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="Tells admins the purpose of this template"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="status" type="int" nullable="false"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The published status of the environment template."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;index type="primary" name="envTempl_pk" column="templateID"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;index type="normal" name="envTempl_templID_st_idx" column="templateID,status"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:3b663965-f348-4628-bc23-20616ec3e448]--&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;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;What happens if my upgrade runs into problems?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is important to note that plugin upgrades are run in the background during plugin initialization, so you won't see the upgrade screen similar to what is shown when you upgrade SBS.&amp;#160; However, any errors that occur during the plugin installation will be reported to you in the admin console under System &amp;gt; Plugins.&amp;#160; Here's what you can expect to see:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1786-19559/pluginError.GIF"&gt;&lt;img alt="pluginError.GIF" class="jive-image-thumbnail jive-image" height="390" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1786-19559/806-390/pluginError.GIF" width="806"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Questions?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Leave a comment for me here, or shoot a message to @austrum on Twitter!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:f733ae57-90d1-478e-a3ad-a55a3671b4ad] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">upgrade</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sbs</category>
      <pubDate>Tue, 25 Aug 2009 15:24:08 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/08/25/simplifying-plugin-upgrades</guid>
      <dc:date>2009-08-25T15:24:08Z</dc:date>
      <clearspace:dateToText>2 months, 4 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/simplifying-plugin-upgrades</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1786</wfw:commentRss>
    </item>
    <item>
      <title>Giving customers the power to organize open support ticket priority, on the fly!</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/06/11/giving-customers-the-power-to-organize-open-support-ticket-priority-on-the-fly</link>
      <description>&lt;!-- [DocumentBodyStart:37ee717d-3a03-46b2-8542-11eeb53f69fb] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Out with the old&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1733-15782/old_open_cases_widget.png"&gt;&lt;img alt="old_open_cases_widget.png" class="jive-image-thumbnail jive-image" height="185" onclick="" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1733-15782/620-185/old_open_cases_widget.png" width="620"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;In the past, when a customer wanted to check on the status of any of their open cases they would log into their secure space overview page and use the Community Open Cases widget. This widget was designed with a very simple goal in mind, just display the open cases with a bit of extra information and an emphasis on Severity 1 issues. This proved useful for quite some time and gave customers a good overview of what was going on with their community from a support perspective.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;However, there was one major flaw. Customers had no way of interacting with this information and often found it very difficult to organize this data in a manner that they could use quickly and efficiently. Welcome, open cases widget 2.0!&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;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;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;The new and improved open cases widget&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1733-15784/new_open_cases_widget.png"&gt;&lt;img alt="new_open_cases_widget.png" class="jive-image-thumbnail jive-image" height="235" onclick="" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1733-15784/620-235/new_open_cases_widget.png" width="620"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Along with our upgrade of the Supportal to SBS 3.0, I took on the job of updating this widget to provide customers with better control over their open cases. There are two major upgrades that I gave this widget which have enhanced the way people use it:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1. Cases broken down by Severity&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;Instead of displaying all the open cases in a potentially enormous group, I've broken down the display into 3 distinctive parts. This is especially helpful for customers with more than 10+ open support cases at a time and allows customers to quickly see if they have any Level 1 issues that they need to attend to quickly.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2. New case option available: Priority&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;To the right of every case status is a set of up and down buttons which control the individual priority of every issue (within their respective severity).&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;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;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Okay great, so how do I use it?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Step 1: &lt;strong&gt;Log in&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;Log into the Supportal and visit your Company's secure space "Overview" tab&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1733-15785/overview.png"&gt;&lt;img alt="overview.png" class="jive-image-thumbnail jive-image" height="410" onclick="" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1733-15785/620-410/overview.png" width="620"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Step 2: &lt;strong&gt;Organize open cases&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;Browse through any open cases and use the "move up/move down" buttons to re-order them. All the moving on the screen will be done in real-time thanks to our good old friend Javascript. You may recognize these buttons from SBS, as they are used to control the location of profile fields on the admin console registration settings page.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1733-15786/priority_control.png"&gt;&lt;img alt="priority_control.png" class="jive-image" height="156" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1733-15786/423-156/priority_control.png" width="423"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Step 3: &lt;strong&gt;Don't forget to Save!&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;As of right now, your cases will be in the order you want on the overview page, but there is one final step. You will need to click the &lt;strong&gt;Save Settings&lt;/strong&gt; button at the bottom right hand corner of the widget. This will take the current ordering of your widget and persist the case priorities to the database.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1733-15787/save_settings.png"&gt;&lt;img alt="save_settings.png" class="jive-image" height="139" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1733-15787/237-139/save_settings.png" width="237"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You will receive a friendly notification at the top of the widget that your Priority changes have been successfully saved, and you are done!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1733-15788/settings_saved.png"&gt;&lt;img alt="settings_saved.png" class="jive-image" height="153" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1733-15788/477-153/settings_saved.png" width="477"/&gt;&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;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Well that's easy enough, how does it all work?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I'm glad you asked--it's really quite simple.&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;p&gt;&lt;strong&gt;Displaying the widget&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;First off, the widget loads up all the non-closed cases within a secure space and puts them into three different Collections (one for each severity):&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:61121e98-6d68-4e2d-ad7e-3d911d1a731e]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-java"&gt;&lt;font color="navy"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; (String caseID : caseIDs) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SupportCase supportCase = supportCaseManager.getSupportCase(Long.parseLong(caseID));
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String status = supportCase.getStatus();
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (status != &lt;font color="navy"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/font&gt; &amp;amp;&amp;amp; !caseStatusManager.isClosedStatus(status)) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String severity = supportCase.getSeverity();
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String priority = supportCase.getPriority();
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; supportCase.setPriority(priority != &lt;font color="navy"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/font&gt; ? priority : &lt;font color="red"&gt;"0"&lt;/font&gt;);
&amp;nbsp;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;(severity.equals(&lt;font color="red"&gt;"Level 1"&lt;/font&gt;)) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; openSev1Cases.add(supportCase);
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Collections.sort(openSev1Cases, &lt;font color="navy"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; CaseComparator());
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;(severity.equals(&lt;font color="red"&gt;"Level 2"&lt;/font&gt;)) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; openSev2Cases.add(supportCase);
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Collections.sort(openSev2Cases, &lt;font color="navy"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; CaseComparator());
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; openSev3Cases.add(supportCase);
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Collections.sort(openSev3Cases, &lt;font color="navy"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; CaseComparator());
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (NotFoundException e) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; log.error(&lt;font color="red"&gt;"Could not retreive support case in OpenCasesWidget: "&lt;/font&gt; + e.getMessage());
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&lt;font color="navy"&gt;}&lt;/font&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:61121e98-6d68-4e2d-ad7e-3d911d1a731e]--&gt;&lt;p&gt;&lt;span style="font-size: 8pt;"&gt;(Ideally this will get refactored soon to allow for more or less than 3 severities instead of being hard-coded. But it will work for now.)&lt;/span&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;p&gt;The CaseComparator() orders all the currently open cases by their priority in the database. If nothing has yet been set, it will be put in the order that the cases were created.&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;p&gt;&lt;strong&gt;The fancy effects&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The cases are now sent to the template, where they are displayed in their respective severity grouping and automatically hooked into the Javascript functions that allow the up/down buttons to work. When you click on one of the buttons the following Javascript magic happens:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1. References to the required objects on the screen are loaded up using Javascript:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:2f7d2aae-5a57-44a3-934f-1dc6ba360a63]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;var moveUp = function(e, type) {
&amp;#160;&amp;#160;&amp;#160; Event.stop(e);
&amp;#160;&amp;#160;&amp;#160; var ansc = this.up(".case-field");
&amp;#160;&amp;#160;&amp;#160; if(ansc != undefined) {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ansc.previous().insert({before: ansc});
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; updateHiddenField(ansc, ansc.next());
&amp;#160;&amp;#160;&amp;#160; }
&amp;#160;&amp;#160;&amp;#160; updateOrderingAnchors(type);
}&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:2f7d2aae-5a57-44a3-934f-1dc6ba360a63]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2. A hidden priority field for each case is updated with the new ordering value:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:92a9c43a-2ab6-4848-98ea-e7a4ab84d698]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;var updateHiddenField = function(element, newElement) {
&amp;#160;&amp;#160;&amp;#160; var temp = element.select(".case-priority")[0].value;
&amp;#160;&amp;#160;&amp;#160; element.select(".case-priority")[0].value = newElement.select(".case-priority")[0].value;
&amp;#160;&amp;#160;&amp;#160; newElement.select(".case-priority")[0].value = temp;
}&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:92a9c43a-2ab6-4848-98ea-e7a4ab84d698]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3. The ordering of the case above (or below if the down arrow was pressed) will be swapped on screen and the list rebuilt:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:2dc169bf-2efb-4f57-a2ad-3c2a5764f543]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;var updateOrderingAnchors = function(type) {
&amp;#160;&amp;#160;&amp;#160; if(type == "1") {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var elms = $("sev1-case-list-body").select("tr");
&amp;#160;&amp;#160;&amp;#160; }else if(type == "2") {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var elms = $("sev2-case-list-body").select("tr");
&amp;#160;&amp;#160;&amp;#160; }else{
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var elms = $("sev3-case-list-body").select("tr");
&amp;#160;&amp;#160;&amp;#160; }
&amp;#160;&amp;#160;&amp;#160; elms.each(function(tr, i) {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var anchors = tr.select(".field-moveup")[0];
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (i &amp;lt;= 0) {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; anchors.update("&amp;lt;span class='move-up-disabled'&amp;gt;move up&amp;lt;/span&amp;gt;");
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; anchors.update(new Element("a", {"class": "anchor-move-up", href: "#"}).update("move up"));
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; anchors = tr.select(".field-movedown")[0];
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (i == elms.length - 1) {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; anchors.update("&amp;lt;span class='move-down-disabled'&amp;gt;move down&amp;lt;/span&amp;gt;");
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; anchors.update(new Element("a", {"class": "anchor-move-down", href: "#"}).update("move down"));
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&amp;#160;&amp;#160;&amp;#160; });
&amp;#160;&amp;#160;&amp;#160; bindAnchors();
}&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:2dc169bf-2efb-4f57-a2ad-3c2a5764f543]--&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;p&gt;4. Now that the ordering is complete, you click the Save Settings button which makes a call to this Javascript to call a DWR method and display the nice notification at the top of the widget:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:e4f868d9-8643-4864-bbdb-e705d9072dcc]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;CasePriorityAction.setPriorities( values, {
&amp;#160;&amp;#160;&amp;#160; callback:function() {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $('save-button').enable();
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $('jive-success-box').style.display = "block";
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Effect.Fade($('jive-success-box'),{delay: 3, duration: 5});
&amp;#160;&amp;#160;&amp;#160; }
});&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:e4f868d9-8643-4864-bbdb-e705d9072dcc]--&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;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Saving the data&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The final step involves saving this to the database, which is done by the call to the setPriorities DWR method as noted above. This loops through all the cases on the screen and sets the priorities in the database accordingly:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:1d3b4d38-820d-4608-bcda-6815f7798e2d]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-java"&gt;&lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; setPriorities(List&amp;lt;String&amp;gt; values) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;(String value : values)&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String[] vars = value.split(&lt;font color="red"&gt;"-"&lt;/font&gt;);
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SupportCase supportCase = supportCaseManager.getSupportCase(Long.parseLong(vars[1]));
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; supportCase.setPriority(vars[2]);
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; supportCaseManager.updateSupportCase(supportCase);
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (NotFoundException e) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; log.error(&lt;font color="red"&gt;"Could not retreive case in CasePriorityAction: "&lt;/font&gt; + e.getMessage());
&amp;#160;&amp;#160;&amp;#160; &lt;font color="navy"&gt;}&lt;/font&gt;
&lt;font color="navy"&gt;}&lt;/font&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:1d3b4d38-820d-4608-bcda-6815f7798e2d]--&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;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I hope this information provides you with interesting insight into how our custom development allows us to work smarter and more efficiently with all our customers.&amp;#160; We want these new features to enrich your Jive experience!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;As always, Jive welcomes any and all feedback about this feature and the Supportal in general.&amp;#160; Please comment on this post or start a discussion in our &lt;a class="jive-link-community-small" href="http://www.jivesoftware.com/jivespace/community/support/supportal"&gt;Supportal Feedback space&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:37ee717d-3a03-46b2-8542-11eeb53f69fb] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">support</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">development</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">widget</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">javascript</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">supportal</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sbs</category>
      <pubDate>Thu, 11 Jun 2009 16:43:49 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/06/11/giving-customers-the-power-to-organize-open-support-ticket-priority-on-the-fly</guid>
      <dc:date>2009-06-11T16:43:49Z</dc:date>
      <clearspace:dateToText>5 months, 1 week ago</clearspace:dateToText>
      <clearspace:replyCount>3</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/giving-customers-the-power-to-organize-open-support-ticket-priority-on-the-fly</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1733</wfw:commentRss>
    </item>
    <item>
      <title>Enhancing the customer support experience with the Jive SBS Content Type Framework (CTF)</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/05/14/enhancing-the-customer-support-experience-with-the-jive-sbs-content-type-framework-ctf</link>
      <description>&lt;!-- [DocumentBodyStart:67be296a-59e4-41df-b9a4-332c357beaff] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Introducing the CTF&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;When Jive SBS released this March with the newly developed &lt;a class="jive-link-wiki-small" href="http://www.jivesoftware.com/jivespace/docs/DOC-4958"&gt;Content Type Framework (CTF)&lt;/a&gt;, it unlocked a world of limitless possibilities.&amp;#160; Perhaps one of the greatest (and most overlooked) features in the Jive SBS 3.0 release, the CTF allows business owners the ability to dream big without taking a big hit to the wallet by providing developers with simple, easy-to-use hooks for creating new content types like events, ideas, forms and more.&amp;#160; Customizations that would have previously taken several months or longer can be condensed into far shorter development cycles and can now all be done inside of a plugin.&amp;#160; This has the added benefit of reducing long-term cost of ownership, as it ensures developers will be insulated from core product changes, making upgrades and patch release updates a breeze.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Naturally, given all of the benefits of the framework, we couldn't resist taking advantage of it ourselves!&amp;#160; In the &lt;a class="" href="http://www.jivesoftware.com/jivespace/blogs/jivespace-supportal-get-an-upgrade"&gt;latest release of the Supportal&lt;/a&gt; we introduced a new customer environment tracking feature built on top of the CTF that we hope will shape our customer support experience in the months and years to come.&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;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;What is a customer environment?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Simply put, it is a collection of structured data that gives Support details on your setup, e.g., which version of the product you are using, the database you're hooked up to, and special configuration options that you use.&amp;#160; When published, they look similar to a document:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="https://brewspace.jiveland.com/servlet/JiveServlet/downloadImage/16850/environment_view.png"&gt;&lt;img alt="environment_view.png" class="jive-image-thumbnail jive-image" height="581" onclick="" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1713-13899/620-581/environment_view.png" width="620"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Because the environment form is built on top of the CTF, commenting, tagging, search and other extras are all features that essentially come along for free.&amp;#160; The editing experience is just like a regular form:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="https://brewspace.jiveland.com/servlet/JiveServlet/downloadImage/16881/environment_edit.png"&gt;&lt;img alt="environment_edit.png" class="jive-image-thumbnail jive-image" height="526" onclick="" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1713-13900/620-526/environment_edit.png" width="620"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Once an environment has been created, you'll want to use it when creating new cases in the Supportal:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="https://brewspace.jiveland.com/servlet/JiveServlet/showImage/102-19718-4-16882/environment_to_case.png"&gt;&lt;img alt="environment_to_case.png" class="jive-image-thumbnail jive-image" height="163" onclick="" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1713-13901/620-163/environment_to_case.png" width="620"/&gt;&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;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Why should I create an environment?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I'm glad you asked!&amp;#160; Well, first off, if you're an &lt;a class="jive-link-external-small" href="../products/technology"&gt;Enterprise SaaS&lt;/a&gt; customer, we already have you covered, so no need to worry.&amp;#160; Jive Support will create an environment document for you with the correct details and name it clearly so you know which one to use when creating new support cases.&amp;#160; If you're hosting the software internally, consider these benefits:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Faster Response Times&lt;/strong&gt;&lt;br/&gt;Once you fill out an environment, we'll never again have to ask you which version you're running on or what Java options you're using!&amp;#160; Less back and forth with our Support Engineers means less time spent gathering details and more time on fixing problems and answering questions.&amp;#160; Plus, if you have multiple environments that you manage, the environment tracking feature clarifies which one your case pertains to for both your colleagues and our support team.&amp;#160; &lt;br/&gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Transparency&lt;/strong&gt;&lt;br/&gt;We're all about keeping people in the loop and environment tracking does just that.&amp;#160; If your system admin goes on vacation, you won't be struggling to find the information you need to help our Support team resolve the problem.&amp;#160; Plus, if a technical person needs to come up to speed on a case you have submitted, all of the details are available in one central place.&amp;#160; &lt;br/&gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Improved Customer Support in the Future&lt;/strong&gt;&lt;br/&gt;When you associate an environment to your case, you're helping us build a repository of information that enables us to identify areas of collective strength and weakness.&amp;#160; Environment tracking opens the door for advanced reporting capabilities that were previously impossible or very difficult at the least.&amp;#160; It also allows us to make &lt;a class="" href="http://www.jivesoftware.com/jivespace/blogs/more-details-on-the-jive-30-platform"&gt;better decisions&lt;/a&gt; about the direction of the product.&lt;br/&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 style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Is my data safe?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;When you create an environment, it will only be visible within your secure customer space in the Supportal, so only those with access to your secure space will be able to see the information, even if &lt;a class="" href="http://www.jivesoftware.com/jivespace/blogs/the-science-behind-public-cases"&gt;your case is made public&lt;/a&gt;.&amp;#160; And we're not evil, so we'll never share your data with third parties.&amp;#160; Your data is safe with us!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now, after all this, if you still have concerns about creating an environment to associate with your next case, please let us know why! We're hope you're happy with our constant improvements to our Support tool and invite all feedback, either on this blog post or in our &lt;a class="jive-link-community-small" href="http://www.jivesoftware.com/jivespace/community/support/supportal"&gt;Support Feedback&lt;/a&gt; space.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Thanks and enjoy!&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;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Additional Reading&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you're still reading, you must be a developer saying "&lt;em&gt;I'm excited about creating my own custom content type!&amp;#160; Where do I start?"&amp;#160; &lt;/em&gt;For a deeper look at custom content types, &lt;a class="jive-link-wiki-small" href="http://www.jivesoftware.com/jivespace/docs/DOC-4958"&gt;start here&lt;/a&gt;.&amp;#160; After you have browsed through the documentation, download the example memo content type plugin from our public plugins SVN repository:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="https://svn.jivesoftware.com/svn/dev/repos/jive/plugins/memo-type-example/trunk/"&gt;https://svn.jivesoftware.com/svn/dev/repos/jive/plugins/memo-type-example/trunk/&lt;/a&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The memo custom content type is a simple example that demonstrates the power of the Content Type Framework.&amp;#160; Check it out and start playing!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:67be296a-59e4-41df-b9a4-332c357beaff] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">support</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">supportal</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">environment</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sbs</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">custom_content_type</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customer_environment</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">environment_tracking</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">ctf</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">content_type_framework</category>
      <pubDate>Thu, 14 May 2009 17:46:35 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/05/14/enhancing-the-customer-support-experience-with-the-jive-sbs-content-type-framework-ctf</guid>
      <dc:date>2009-05-14T17:46:35Z</dc:date>
      <clearspace:dateToText>6 months, 1 week ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/enhancing-the-customer-support-experience-with-the-jive-sbs-content-type-framework-ctf</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1713</wfw:commentRss>
    </item>
    <item>
      <title>Jivespace &amp; Supportal get an upgrade!</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/04/17/jivespace-supportal-get-an-upgrade</link>
      <description>&lt;!-- [DocumentBodyStart:3d77a7d2-d576-4108-811d-bc93ab79391c] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Welcome to &lt;a class="jive-link-blog-small" href="http://www.jivesoftware.com/jivespace/community/jivetalks/blog/2009/03/10/welcome-to-the-social-business-revolution--introducing-jive-sbs-30"&gt;Jive SBS&lt;/a&gt;! We just upgraded our Jivespace community to SBS 3.0.1, and along with it upgraded the Supportal customization, adding a few new features and improvements.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you see any issues, please post a discussion in our &lt;a class="jive-link-community-small" href="http://www.jivesoftware.com/jivespace/community/support/supportal"&gt;Supportal Feedback&lt;/a&gt; space or create a public case there, and we'll get it addressed quickly.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now, on to the new features:&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;An updated Open Cases widget allows prioritizing by the customer&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We previously allowed you to view your open cases, but sometimes when you have a few open cases it can be helpful to rank them in importance--both for you and your company, but for us as well. Have a look at it here, and it will automatically be in your account's secure space next time you log in!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="http://content.screencast.com/users/klassikstile/folders/Jing/media/021663a7-277a-4f3f-a755-08d636bfc98c/2009-04-06_1501.png"&gt;&lt;img alt="http://content.screencast.com/users/klassikstile/folders/Jing/media/021663a7-277a-4f3f-a755-08d636bfc98c/2009-04-06_1501.png" class="jive-image" height="250" src="http://content.screencast.com/users/klassikstile/folders/Jing/media/021663a7-277a-4f3f-a755-08d636bfc98c/2009-04-06_1501.png" width="518"/&gt;&lt;/a&gt;&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;Account Member Management falls into the hands of the Customer&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Prior to this Supportal upgrade, if you wanted to add or remove someone from your secure space, you needed to ask Support to do so. Well, with the upgraded Supportal, you can now put this power into the hands of someone that is currently a part of your account. There is still one manual step, asking Support to appoint one of your users as 'user admin' for your account. Once designated, the user admin can add and remove users, as well as add/remove the admin privilege should that assignment need to change. You can see the link to manage account members on the Group Membership Widget on your secure space overview. Don't see it? Ask Support to add it to your account space today!&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;p&gt;&lt;strong&gt;First integrated Environment tracking on cases&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Are you tired of Support continually asking what version you're running, or similar questions? Well, we're tired of asking it too &lt;img height="16px" src="http://www.jivesoftware.com/community/images/emoticons/happy.gif" width="16px"/&gt;! We've now taken the first step to associating Environments to each and every one of your cases. That way, if the version does matter, we can simply take a look at the environment you have associated with the case and dive right into troubleshooting. What's the catch? We are going to need you to keep these as current as possible in order to make this all work smoothly. We are hoping to evolve this to be able to eliminate the Product drop down and solely use Environments in the future. We welcome your feedback and help in shaping this new feature in the Supportal. Please visit our &lt;a class="jive-link-community-small" href="http://www.jivesoftware.com/jivespace/community/support/supportal"&gt;Supportal Feedback&lt;/a&gt; space to do this.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="https://brewspace.jiveland.com/servlet/JiveServlet/downloadImage/102-18248-4-16062/environments.png"&gt;&lt;img alt="environments.png" class="jive-image-thumbnail jive-image" src="https://brewspace.jiveland.com/servlet/JiveServlet/downloadImage/102-18248-4-16062/environments.png" width="620"/&gt;&lt;/a&gt;&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;Lastly, some new UI when creating a case&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As you can see from the screenshot above, we've added some indication of what fields are required when creating a new case, and something you may also &lt;em&gt;not &lt;/em&gt;notice is that we have taken away the 'Stage' detail as it was not useful to us.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 style="text-align: center;"&gt;Again, please let us know if you see any issues, and we hope you enjoy the new Supportal and the overall upgrade to SBS!&lt;/h3&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:3d77a7d2-d576-4108-811d-bc93ab79391c] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">upgrade</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">supportal</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sbs</category>
      <pubDate>Fri, 17 Apr 2009 17:24:20 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/04/17/jivespace-supportal-get-an-upgrade</guid>
      <dc:date>2009-04-17T17:24:20Z</dc:date>
      <clearspace:dateToText>7 months, 1 week ago</clearspace:dateToText>
      <clearspace:replyCount>5</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/jivespace-supportal-get-an-upgrade</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1700</wfw:commentRss>
    </item>
    <item>
      <title>More Details on the Jive 3.0 Platform</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/04/04/more-details-on-the-jive-30-platform</link>
      <description>&lt;!-- [DocumentBodyStart:9fa6304c-38be-485d-945d-4260b992353f] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;We got a lot of good &lt;a class="" href="http://www.jivesoftware.com/jivespace/blogs/jive-sbs-300-builds-now-available-updated"&gt;feedback&lt;/a&gt; from customers when we announced the 3.0 builds and platform changes. As a result, we've added back support for the MySQL and SQLServer databases. I'd like to take a minute to address some of the feedback and explain some of the background for this move.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;As background, we've changed the way we package and ship our software. I just published an &lt;a class="jive-link-wiki-small" href="http://www.jivesoftware.com/jivespace/docs/DOC-5100"&gt;in-depth look at the benefits&lt;/a&gt; of this move - a good read if you're looking to understand more.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The package we've built is available on Linux and Solaris and runs on the following databases: MySQL, Postgres, Oracle, and MS SQLServer. The application itself is available as an installable package and bundles an application server, Java runtime, the app itself, and a set of optimized preconfigurations (example: tuned JVM settings).&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Why make this move? A number of reasons. We talk to customers often and the consistent number one priorities are performance, scalability, stability, and the support experience. We get a lot of great feature and improvement ideas but those top priorities are the air customers breathe. Based on that, we try to move the needle in these areas significantly for each release. For example, for the 2.5 release we managed a 40% performance improvement overall. In 3.0 the numbers aren't quite as dramatic but we've added new features and performance has not suffered. As we looked up and down our architecture it became clear that some new thinking was needed.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The application has evolved past the point where it can be distributed as a standalone WAR file (however, to be clear - a WAR does still exist in the bundle). The context in which it runs is vitally important, especially for things like performance but also for features. We need the ability to depend on the environment we run in and there is a lot of variance in server-side Java deployments.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;On the support side, we've seen too many misconfigurations in the environment. For example, sometimes we see issues where a customer is unable to change the parameters of the VM either to allocate more heap memory or to change the GC settings - these kinds of things are vitally important to the Jive app. Another big challenge is just access to the right log/debug files - none of this is consistent among appservers. Also, oftentimes the best information is a Java heap dump and we've seen the ability to get that information be a real challenge. In the new package, we've distributed a script that grabs every relevant log file and heap dump and zips it up in a way that can easily be sent to our support team. We feel this will dramatically improve the time-to-resolve issues.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;What doesn't change? It's important to note that development, customizations, plugins, themes, etc don't change in at all. For example, how you deploy a plugin is exactly the same. Clustering also works in the same way. This is not an appliance, nor is it a black box. (Note, an appliance is something we'd consider as an option for future deployments - let us know if you have feedback on this approach).&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;We believe there are a lot of benefits to this approach. Ultimately, this foundation will allow us to develop some very unique features while delivering continued huge performance and scalability gains. We definitely recognize some customers will have problems migrating to this platform and we're more than willing to make it work for you - just let us know.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(One final note: within a week we will announce when the extra database support will be available.)&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;If you have questions, comment on this post or feel free to drop me a line at &lt;/span&gt;&lt;a class="jive-link-email-small" href="mailto:bill@jivesoftware.com" target="_blank"&gt;bill@jivesoftware.com&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:9fa6304c-38be-485d-945d-4260b992353f] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">platform</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">3.0</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sbs</category>
      <pubDate>Sat, 04 Apr 2009 01:00:49 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/04/04/more-details-on-the-jive-30-platform</guid>
      <dc:date>2009-04-04T01:00:49Z</dc:date>
      <clearspace:dateToText>7 months, 3 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>14</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/more-details-on-the-jive-30-platform</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1694</wfw:commentRss>
    </item>
  </channel>
</rss>

