<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
  <title>Liferay.com</title>
  <link rel="alternate" href="" />
  <subtitle>Liferay.com</subtitle>
  <entry>
    <title>Freemarker theme templates instead of velocity</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5725670" />
    <author>
      <name>Igor Spasić</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5725670</id>
    <updated>2010-09-01T20:08:39Z</updated>
    <published>2010-09-01T20:00:29Z</published>
    <summary type="html">&lt;p&gt;By default, liferay themes uses velocity templates. For example, classic theme (.../tomcat-6.0.x/webapps/ROOT/html/themes/classic/templates) uses several (&lt;strong&gt;*.vm&lt;/strong&gt;) velocity templates. But Liferay portal may use freemarker templates (&lt;strong&gt;*.ftl&lt;/strong&gt;) instead.&lt;/p&gt;&lt;p&gt;To usee freemarker instead of velocity open &lt;strong&gt;liferay-look-and-feel.xml&lt;/strong&gt;&lt;span style="font-size: medium;"&gt;&lt;code&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;theme id=&amp;quot;...&amp;quot; name=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="font-size: medium;"&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;template-extension&amp;gt;vm&amp;lt;/template-extension&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .....&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;and change &lt;em&gt;template-extension&lt;/em&gt;&amp;nbsp; value from '&lt;strong&gt;vm&lt;/strong&gt;' to '&lt;strong&gt;ftl&lt;/strong&gt;'.&lt;/p&gt;</summary>
    <dc:creator>Igor Spasić</dc:creator>
    <dc:date>2010-09-01T20:00:29Z</dc:date>
  </entry>
  <entry>
    <title>Global ignore files on SVN -or- how to ignore InteliiJ files at once</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5722418" />
    <author>
      <name>Igor Spasić</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5722418</id>
    <updated>2010-09-01T14:56:38Z</updated>
    <published>2010-09-01T14:43:44Z</published>
    <summary type="html">&lt;p&gt;I use IntelliJ IDEA for portal and plugins development. Also, I currently experiment with different project configuration and, therefore, have IntelliJ module files (*.iml)&amp;nbsp;everywhere. For now, I do not want to commit ignore patterns on SVN, but still want to ignore them in my changelist, to have them out of my sight.&lt;/p&gt;
&lt;p&gt;For this purpose I&amp;nbsp;use &lt;strong&gt;global-ignores&lt;/strong&gt; feature of svn. This is a client feature and can be set in local configuration file located here:&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-size: medium;"&gt;&lt;code&gt;windows: %APPDATA%\subversion\config  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-size: medium;"&gt;&lt;code&gt;linux: ~/.subversion/config &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;global-ignores setting may look like this:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;code&gt;global-ignores = *.iml desktop.ini&lt;br /&gt;
&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Igor Spasić</dc:creator>
    <dc:date>2010-09-01T14:43:44Z</dc:date>
  </entry>
  <entry>
    <title>How do I cluster Liferay with Terracotta?</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5715935" />
    <author>
      <name>Mika Koivisto</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5715935</id>
    <updated>2010-09-01T22:03:25Z</updated>
    <published>2010-09-01T03:32:59Z</published>
    <summary type="html">&lt;p&gt;That's a question I've head many times and in this post I will show you &amp;nbsp;just how to do that. These instructions are for Liferay 6 CE GA3 Tomcat 6.0 bundle however you can use any app server supported by Terracotta but the location and some configuration might be slightly different. So to get started you need to download:&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;&lt;a href="http://www.liferay.com/downloads/liferay-portal/overview"&gt;Liferay Portal 6 GA3 bundled with Tomcat&lt;/a&gt;&lt;/li&gt;     &lt;li&gt;&lt;a href="http://www.terracotta.org/dl"&gt;Terracotta 3.3.0 open source edition&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Next step is to install Liferay and Terracotta. For the purposes of this post I won't go into great detail with the installation as both Terracotta and Liferay has good documentation. Basically the installation consist of unpacking the packages to a directory. From now on I will refer to those locations as LIFERAY_HOME and TERRACOTTA_HOME and inside LIFERAY_HOME we will have tomcat directory which I will refer as TOMCAT_HOME. Normally you would also install Liferay and Terracotta in separate servers but I will post a separate post addressing the recommended architecture. For now we can install everything on the same machine and run Terracotta with default configuration for development purposes.&lt;/p&gt; &lt;p&gt;Normally when clustering Liferay you need to address following components: EhCache and Hibernate, Quartz Scheduler, Document Library, Search Engine and optionally Session Replication. For Document Library and Search Engine Terracotta doesn't offer anything new so you make those centrally available the same way as before. For example SAN for DL and SORL for Search and Indexing. So we are left with EhCache and Hibernate, Quartz and Session Replication that we can address with Terracotta.&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;EhCache and Hibernate Second Level Cache&lt;/strong&gt;&lt;/h4&gt; &lt;ol&gt;     &lt;li&gt;&amp;nbsp;Remove ehcache.jar&amp;nbsp;that is bundled with Liferay (located in TOMCAT_HOME/webapps/ROOT/WEB-INF/lib)&lt;/li&gt;     &lt;li&gt;Copy all jars in TERRACOTTA_HOME/ehcache/lib to TOMCAT_HOME/webapps/ROOT/WEB-INF/lib&lt;/li&gt;     &lt;li&gt;Copy TERRACOTTA_HOME/common/terracotta-toolkit-1.0-runtime-&amp;lt;version&amp;gt;.jar to TOMCAT_HOME/webapps/ROOT/WEB-INF/lib&lt;/li&gt;     &lt;li&gt;Create my-ehcache folder to TOMCAT_HOME/webapps/ROOT/WEB-INF/classes&lt;/li&gt;     &lt;li&gt;Create a hibernate-terracotta.xml and a liferay-multi-vm-terracotta.xml.&lt;/li&gt;     &lt;li&gt;Adjust terracottaConfig in &lt;a href="http://www.liferay.com/c/document_library/get_file?uuid=cacbc0f0-acd8-429d-b245-08364daa2366&amp;amp;groupId=25248"&gt;hibernate-terracotta.xml&lt;/a&gt; and &lt;a href="http://www.liferay.com/c/document_library/get_file?uuid=07bacc10-7331-4275-8a22-e307cab263c6&amp;amp;groupId=25248"&gt;liferay-multi-vm-terracotta.xml&lt;/a&gt; to point to your Terracotta servers. Like this: &amp;lt;terracottaConfig url=&amp;quot;localhost:9510&amp;quot;/&amp;gt;&lt;/li&gt;     &lt;li&gt;Add following properties to your portal-ext.properties file:&lt;br /&gt;     &lt;pre&gt;
ehcache.multi.vm.config.location=/my-ehcache/liferay-multi-vm-terracotta.xml
 net.sf.ehcache.configurationResourceName=/my-ehcache/hibernate-terracotta.xml
 hibernate.cache.region.factory_class=net.sf.ehcache.hibernate.EhCacheRegionFactory&lt;/pre&gt;&lt;/li&gt; &lt;/ol&gt; &lt;h4&gt;&lt;strong&gt;Quartz&lt;/strong&gt;&lt;/h4&gt; &lt;ol&gt;     &lt;li&gt;Remove quartz.jar that is bundled with Liferay (located in TOMCAT_HOME/webapps/ROOT/WEB-INF/lib)&lt;/li&gt;     &lt;li&gt;Copy TERRACOTTA_HOME/quartz/quartz-terracotta-&amp;lt;version&amp;gt;.jar and quartz-all-&amp;lt;version&amp;gt;.jar to TOMCAT_HOME/webapps/ROOT/WEB-INF/lib&lt;/li&gt;     &lt;li&gt;Add following properties to your portal-ext.properties:&lt;br /&gt;     &lt;pre&gt;
org.quartz.jobStore.class = org.terracotta.quartz.TerracottaJobStore
 org.quartz.jobStore.tcConfigUrl = localhost:9510&lt;/pre&gt;&lt;/li&gt;     &lt;li&gt;Extract portal.properties from portal-impl.jar and place it in TOMCAT_HOME/webapps/ROOT/WEB-INF/classes&lt;/li&gt;     &lt;li&gt;Comment out following properties in portal.properties&lt;br /&gt;     &lt;pre&gt;
#org.quartz.jobStore.dataSource=ds 
#org.quartz.jobStore.isClustered=false
 #org.quartz.jobStore.misfireThreshold=60000
 #org.quartz.jobStore.tablePrefix=QUARTZ_
 #org.quartz.jobStore.useProperties=false&lt;/pre&gt;&lt;/li&gt; &lt;/ol&gt; &lt;h4&gt;&lt;strong&gt;Session Replication&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;This is highly container specific so refer to Terracotta documentation for specific instructions. Following steps are for Tomcat 6.0.&lt;/p&gt; &lt;ol&gt;     &lt;li&gt;Copy TERRACOTTA_HOME/sessions/terracotta-session-&amp;lt;version&amp;gt;.jar to TOMCAT_HOME/lib&lt;/li&gt;     &lt;li&gt;Copy TERRACOTTA_HOME/common/terracotta-toolkit-1.0-runtime-&amp;lt;version&amp;gt;.jar to TOMCAT_HOME/lib&lt;/li&gt;     &lt;li&gt;Edit TOMCAT_HOME/conf/Catalina/localhost/ROOT.xml and add following line right after &amp;lt;Context&amp;gt;&lt;br /&gt;     &lt;pre&gt;
 &amp;lt;Valve className=&amp;quot;org.terracotta.session.TerracottaTomcat60xSessionValve&amp;quot; tcConfigUrl=&amp;quot;localhost:9510&amp;quot;/&amp;gt;&lt;/pre&gt;&lt;/li&gt; &lt;/ol&gt; &lt;h4&gt;&lt;strong&gt;Testing The Configuration&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Testing your configuration is simple:&lt;/p&gt; &lt;ol&gt;     &lt;li&gt;Startup your Terracotta Server&lt;br /&gt;     &lt;pre&gt;
TERRACOTTA_HOME/bin/start-tc-server.sh&lt;/pre&gt;&lt;/li&gt;     &lt;li&gt;Startup your Tomcat&lt;br /&gt;     &lt;pre&gt;
TOMCAT_HOME/bin/startup.sh&lt;/pre&gt;&lt;/li&gt;     &lt;li&gt;Before Tomcat has fully started you should see following lines in your Tomcat console log:&lt;br /&gt;     &lt;pre&gt;
2010-09-01 21:35:40,059 INFO - Terracotta 3.3.0, as of 20100716-140706 (Revision 15922 by cruise@rh5mo0 from 3.3)
2010-09-01 21:35:40,566 INFO - Successfully loaded base configuration from server at 'localhost:9510'.&lt;/pre&gt;&lt;/li&gt;     &lt;li&gt;Now browse http://localhost:8080 to verify that your portal is running.&amp;nbsp;&lt;/li&gt;     &lt;li&gt;Now launch Terracotta Developer Console to verify that EhCache, Hibernate, Quartz and Sessions are seen by Terracotta. You can launch dev console with following command:&lt;br /&gt;     &lt;pre&gt;
TERRACOTTA_HOME/bin/dev-console.sh&lt;/pre&gt;&lt;/li&gt;     &lt;li&gt;Once you are connected to your Terracotta you should see Ehcache, Hibernate, Quartz and Sessions under My application which indicates that all of them are connected and recognized by Terracotta. Now you can use Dev Console to see what's inside your cache or session.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;     &lt;img width="569" height="364" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=e3bdf956-4704-4138-98a9-9ad4232ddb86&amp;amp;groupId=25248&amp;amp;t=1283377963884" /&gt;&lt;/li&gt; &lt;/ol&gt; &lt;h4&gt;&lt;strong&gt;Closing Remarks&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Now as you can see it is quite easy the cluster Liferay with Terracotta express installation. Now if you want to use the DSO approach it is whole another beast as it involves tedious instrumentation. If you are a Liferay EE customer and want to get supported version of both Liferay and Terracotta contact your Liferay sales rep and ask about Liferay Terracotta Edition.&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Mika Koivisto</dc:creator>
    <dc:date>2010-09-01T03:32:59Z</dc:date>
  </entry>
  <entry>
    <title>Countdown to Liferay 6 EE</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5715611" />
    <author>
      <name>Paul Hinz</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5715611</id>
    <updated>2010-09-01T02:09:53Z</updated>
    <published>2010-09-01T02:09:18Z</published>
    <summary type="html">&lt;p&gt;&lt;a href="http://www.liferay.com/6ee"&gt;&lt;img width="620" height="620" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=c1f26179-6823-457f-9b7d-329e4abbb120&amp;amp;groupId=4108063&amp;amp;t=1283306907007" /&gt;&lt;/a&gt;&lt;/p&gt;</summary>
    <dc:creator>Paul Hinz</dc:creator>
    <dc:date>2010-09-01T02:09:18Z</dc:date>
  </entry>
  <entry>
    <title>PRESS RELEASE: Liferay Begins Launch Countdown For Liferay Portal 6EE</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5702789" />
    <author>
      <name>Alice Cheng</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5702789</id>
    <updated>2010-08-31T15:35:46Z</updated>
    <published>2010-08-31T06:05:51Z</published>
    <summary type="html">&lt;p style="text-align: center;"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Liferay Begins Launch Countdown For Liferay Portal 6 Enterprise Edition&lt;br /&gt; &lt;/span&gt;&lt;/strong&gt;&lt;em&gt;&lt;span style="font-size: large;"&gt;Liferay Portal 6EE&amp;nbsp;Will Be Launched at the West Coast Symposium on September 8th&lt;/span&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;LOS ANGELES, C&lt;/strong&gt;&lt;strong&gt;ALIF. &amp;ndash; August 31, 2010 &lt;/strong&gt;&amp;ndash; Liferay, Inc., provider of the world&amp;rsquo;s fastest growing enterprise-class open source portal framework, with hundreds of thousands of deployments, today announced a special countdown leading to the launch of Liferay Portal 6 Enterprise Edition (Liferay 6EE) on September 8th.&lt;/p&gt; &lt;p&gt;The highly anticipated Liferay 6EE will bring new enhancements to enterprise productivity with multiple new features and innovations in the areas of web content management, social collaboration, design and usability, extensibility and integration, and analytics and management.&lt;/p&gt; &lt;p&gt;Starting today, August 31st, there will be six days of video sneak peaks from Liferay engineers of the new functionality available in Liferay 6EE. To see these videos each day, please visit http://www.liferay.com/products.&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;Tuesday, August 31 - Enhanced Workflow with Stephen Kostas, Documentation Engineer&lt;/li&gt;     &lt;li&gt;Wednesday, September 1 &amp;ndash; Contextual Personalization with Stephen Kostas, Documentation Engineer&lt;/li&gt;     &lt;li&gt;Thursday, September 2 &amp;ndash; User Friendly Structures with Aaron Delani, UI Software Engineer&lt;/li&gt;     &lt;li&gt;Friday, September 3 &amp;ndash; Alloy UI with Nate Cavanaugh, Director of UI Engineering&lt;/li&gt;     &lt;li&gt;Monday, September 6 &amp;ndash; Custom Fields and Attributes with Julio Camerero, Software Engineer&lt;/li&gt;     &lt;li&gt;Tuesday, September 7 &amp;ndash; Liferay IDE with Greg Amerson, Senior Software Engineer&lt;/li&gt;     &lt;li&gt;Wednesday, September 8 &amp;ndash; Live broadcast of 6EE Debut at the Liferay West Coast Symposium&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The launch of Liferay 6EE will happen at the Liferay West Coast Symposium on Wednesday, September 8th at 9 a.m. PT. The product will be demoed by Liferay founder and Chief Software Architect, Brian Chan, and will also be broadcasted live from Liferay&amp;rsquo;s website. People can register for this live broadcast by going to &lt;a href="http://www.liferay.com/web-events"&gt;http://www.liferay.com/web-events&lt;/a&gt;. Those interested in attending the West Coast Symposium can register for the event at &lt;a href="http://www.liferay.com/wcs"&gt;http://www.liferay.com/wcs&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;About Liferay, Inc. &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Liferay, Inc. is the provider of leading enterprise open source portal and collaboration software products, recognized by Gartner in the Magic Quadrant and used by Fortune 500 companies worldwide, including Allianz, AutoZone, Benetton Group, Cisco Systems, Lufthansa Flight Training, The French Ministry of Defense, and the United Nations. Liferay, Inc. offers professional services, technical support, custom development and professional training to ensure successful deployment in the most demanding IT environments. For more information, please visit &lt;/em&gt;&lt;a href="http://www.liferay.com"&gt;&lt;em&gt;www.liferay.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Liferay, Liferay Portal, and the Liferay logo are trademarks or registered trademarks of Liferay, Inc., in the United States and other countries.&lt;/em&gt;&lt;/p&gt; &lt;p style="text-align: center; "&gt;####&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Contact:&lt;br /&gt; &lt;/strong&gt; Alice Cheng&lt;br /&gt; 1-877-LIFERAY&lt;br /&gt; pr@liferay.com&lt;br /&gt; Twitter: liferay&lt;/p&gt;</summary>
    <dc:creator>Alice Cheng</dc:creator>
    <dc:date>2010-08-31T06:05:51Z</dc:date>
  </entry>
  <entry>
    <title>Turn off minifiers and html stripping</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5704124" />
    <author>
      <name>Igor Spasić</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5704124</id>
    <updated>2010-08-31T09:36:14Z</updated>
    <published>2010-08-31T09:18:04Z</published>
    <summary type="html">&lt;p&gt;Portal minifies JS and CSS; and optimizes HTML (by stripping unnecessary characters, etc). Such files are optimized for production, but not for humans :) that dig into the code during development or debugging.&lt;/p&gt; &lt;p&gt;To disable minifiers and html stripping, append the following parameters to the URL line:&lt;br /&gt; &lt;br /&gt; &lt;span style="font-size: medium;"&gt;&lt;code&gt;&amp;amp;js_fast_load=0&amp;amp;strip=0&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Igor Spasić</dc:creator>
    <dc:date>2010-08-31T09:18:04Z</dc:date>
  </entry>
  <entry>
    <title>Hello...</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5704058" />
    <author>
      <name>Igor Spasić</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5704058</id>
    <updated>2010-08-31T09:16:50Z</updated>
    <published>2010-08-31T09:04:43Z</published>
    <summary type="html">&lt;p style="text-align: center;"&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;code&gt;public class&amp;nbsp;&amp;nbsp; Liferay&amp;nbsp;&amp;nbsp; {&lt;br /&gt;String $ = &amp;quot;YIYEEILLI:L&amp;quot; +&lt;br /&gt;&amp;quot;FIYRELYR)IoLERoLtIaAFF&amp;quot; +&lt;br /&gt;&amp;quot;lILRpLYIlLaIARoLRLoIlL&amp;quot; +&lt;br /&gt;&amp;quot;YAoIRRrYFY.&amp;quot; ; String $$=&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;quot;&lt;span style="color: rgb(0, 0, 128);"&gt;LIFERAY.portal:)&lt;/span&gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;String $$$ =&amp;quot;liferay.com&amp;quot;;&lt;br /&gt;byte[] o;int mm,www;public&lt;br /&gt;void portal(){if(o == null&lt;br /&gt;){o= $ .getBytes (); } if(&lt;br /&gt;mm&amp;gt;=$.length()) { return;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;http://www.liferay.com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;while(o[mm]==0x20)mm++;int&lt;br /&gt;c= $$.indexOf(o[mm++])*16;&lt;br /&gt;while(o[mm] == 32)mm++;c+=&lt;br /&gt;$$.indexOf(o[mm++]);c^=$$$&lt;br /&gt;.charAt(www);if($$$.length&lt;br /&gt;()==++www){www =0;}System.&lt;br /&gt;out.print((char)c); portal&lt;br /&gt;(); }&amp;nbsp; public&amp;nbsp; static void&lt;br /&gt;main ( String[] args) {new&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(255, 0, 0);"&gt;Liferay().portal()&lt;/span&gt;&amp;nbsp; ;}}&lt;/code&gt;&lt;/strong&gt;&lt;/span&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;strong&gt;&lt;code&gt;javac Liferay.java&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;strong&gt;&lt;code&gt;java Liferay&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
    <dc:creator>Igor Spasić</dc:creator>
    <dc:date>2010-08-31T09:04:43Z</dc:date>
  </entry>
  <entry>
    <title>Using Freemarker in your theme templates</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5653152" />
    <author>
      <name>Mika Koivisto</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5653152</id>
    <updated>2010-08-24T20:16:41Z</updated>
    <published>2010-08-24T18:21:23Z</published>
    <summary type="html">&lt;p&gt;Freemarker is a template language very similar to Velocity. Starting from Liferay 6.0 Liferay supports also Freemarker templates in themes and Web Content templates. In this post I will show how you can use Freemarker in your themes.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Getting started&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;To get started you'll need Liferay Portal 6.0 GA3 as well as corresponding Plugins SDK. Once you have setup your Portal and Plugins SDK we can start by creating a new theme plugin in PLUGINS_SDK_ROOT/themes folder.&lt;/p&gt; &lt;p&gt;To create the theme issue following command:&lt;/p&gt; &lt;pre&gt;
./create.[sh|bat] my-freemarker &amp;quot;My Freemarker&amp;quot;&lt;/pre&gt; &lt;p&gt;Then go to my-freemarker-theme directory and open build.xml in your favorite editor.&lt;/p&gt; &lt;p&gt;In build.xml add theme.type property with value ftl above theme.parent property like this:&lt;/p&gt; &lt;pre&gt;
&amp;lt;property name=&amp;quot;theme.type&amp;quot; value=&amp;quot;ftl&amp;quot;&amp;gt;&amp;lt;/property&amp;gt;
&amp;lt;property name=&amp;quot;theme.parent&amp;quot; value=&amp;quot;_styled&amp;quot;&amp;gt;&amp;lt;/property&amp;gt;&lt;/pre&gt; &lt;p&gt;Then you need to create docroot/WEB-INF/liferay-look-and-feel.xml with following contents:&lt;/p&gt; &lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE look-and-feel PUBLIC &amp;quot;-//Liferay//DTD Look and Feel 6.0.0//EN&amp;quot; &amp;quot;http://www.liferay.com/dtd/liferay-look-and-feel_6_0_0.dtd&amp;quot;&amp;gt;

&amp;lt;look-and-feel&amp;gt;
	&amp;lt;compatibility&amp;gt;
		&amp;lt;version&amp;gt;6.0.0+&amp;lt;/version&amp;gt;
	&amp;lt;/compatibility&amp;gt;
	&amp;lt;theme id=&amp;quot;my-freemarker-theme&amp;quot; name=&amp;quot;My Freemarker&amp;quot;&amp;gt;
		&amp;lt;template-extension&amp;gt;ftl&amp;lt;/template-extension&amp;gt;
	&amp;lt;/theme&amp;gt;
&amp;lt;/look-and-feel&amp;gt;&lt;/pre&gt; &lt;p&gt;Now you run:&lt;/p&gt; &lt;pre&gt;
ant deploy&lt;/pre&gt; &lt;p&gt;Congratulations you&amp;rsquo;ve just made your first Freemarker based theme. Now you can override base theme files in docroot/_diffs folder just as you would normally except template files now have extension .ftl instead of .vm.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Freemarker syntax&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Freemarker syntax is slightly different from Velocity and it is much more strict. With Freemarker you won't be able to get a way with trying to use undefined variables and you should also note that null value means it's undefined. To test if value exists you can use double question mark after the variable name like this:&lt;/p&gt; &lt;pre&gt;
&amp;lt;#if someVariableName??&amp;gt;
Variable exists
&amp;lt;/#if&amp;gt;&lt;/pre&gt; &lt;p&gt;For full syntax reference check out &lt;a href="http://www.freemarker.org"&gt;Freemarker website&lt;/a&gt;.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Pre-defined theme variables&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Most of the variables present for Velocity templates are also available for Freemarker templates. Only Velocity specific tools were removed you can accomplish everything and more with Freemarker build-ins. Here's some examples how to format a java.util.Date type variable with Freemarker build-ins:&lt;/p&gt; &lt;pre&gt;
${lastUpdated?string(&amp;quot;yyyy-MM-dd HH:mm:ss zzzz&amp;quot;)}
${lastUpdated?string(&amp;quot;EEE, MMM d, ''yy&amp;quot;)}
${lastUpdated?string(&amp;quot;EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'&amp;quot;)}&lt;/pre&gt; &lt;p&gt;You can find all the variables available for Freemarker templates from com.liferay.portal.freemarker.FreeMarkerVariables class and docroot/html/themes/_unstyled/init.ftl&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;Macro libraries&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Most of the macros available to Velocity templates are also available for Freemarker templates. The only difference is the syntax how they are used. We provide a macro library with namespace liferay so that it won't get mixed with your own macros. You can take a look at portal-impl/src/FTL_liferay.ftl to see full list of macros and use it as an example to build your own macros. Here are some commonly used macros:&lt;/p&gt; &lt;pre&gt;
&amp;lt;@liferay.css file_name=&amp;ldquo;some.css&amp;rdquo; /&amp;gt;

&amp;lt;@liferay.js file_name=&amp;ldquo;some.js&amp;rdquo; /&amp;gt;

&amp;lt;@liferay.language key=&amp;ldquo;my-key&amp;rdquo; /&amp;gt;

&amp;lt;@liferay.breadcrumb /&amp;gt;

&amp;lt;@liferay.docbar /&amp;gt; &lt;/pre&gt; &lt;h4&gt;&lt;strong&gt;Tag libraries&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Yes, you read it correctly. You can use taglibs in your Freemarker templates. This is something unique to Freemarker and it is limited to only templates in themes. To import a portal taglib to your template just add following line to your template:&lt;/p&gt; &lt;pre&gt;
&amp;lt;#assign aui=PortalJspTagLibs[&amp;quot;/WEB-INF/tld/liferay-aui.tld&amp;quot;]&amp;gt;&lt;/pre&gt; &lt;p&gt;Now you can use any tag within that taglib just if it was a macro library. Here's an example how to add a Alloy UI input field:&lt;/p&gt; &lt;pre&gt;
&amp;lt;@aui.input name=&amp;ldquo;aStringLiteral&amp;rdquo; label=&amp;ldquo;Test&amp;rdquo; /&amp;gt;&lt;/pre&gt; &lt;p&gt;Have fun trying this out and if you find any glitches do report them to our &lt;a href="http://issues.liferay.com/browse/LPS"&gt;issue tracker&lt;/a&gt;.&lt;/p&gt;</summary>
    <dc:creator>Mika Koivisto</dc:creator>
    <dc:date>2010-08-24T18:21:23Z</dc:date>
  </entry>
  <entry>
    <title>WebDAV, Digest Authentication and Windows Vista/7</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5648206" />
    <author>
      <name>Alexander Chow</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5648206</id>
    <updated>2010-08-24T11:44:16Z</updated>
    <published>2010-08-24T10:59:21Z</published>
    <summary type="html">&lt;p&gt;For a while now, Liferay has offered &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Basic_authentication"&gt;Basic authentication&lt;/a&gt; for various servlets (e.g., WebDAV, JSON, etc.). &amp;nbsp;For the most part, this has suited most of our needs. &amp;nbsp;However, recently, there have been some client applications that now require the more stringent &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Digest_authentication"&gt;Digest authentication&lt;/a&gt; system. &amp;nbsp;To support these requirements, digest authentication has been &lt;a target="_blank" href="http://issues.liferay.com/browse/LPS-10606"&gt;added to Liferay&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In particular, two&amp;nbsp;WebDAV&amp;nbsp;clients have added this requirement: Windows Vista and Windows 7. &amp;nbsp;Since most WebDAV clients support both basic and digest auth, this has been enabled by default. &amp;nbsp;You can only have one enabled at a time. &amp;nbsp;But you can switch WebDAV&amp;nbsp;back to basic auth (or any other servlet to digest auth) in your tunnel-web/web.xml:&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;filter&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2c9393"&gt;filter-name&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;Secure WebDAV Servlet Filter&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #2c9393"&gt;filter-name&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2c9393"&gt;filter-class&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;com.liferay.portal.kernel.servlet.PortalClassLoaderFilter&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #2c9393"&gt;filter-class&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;init-param&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;param-name&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;filter-class&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;param-name&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2c9393"&gt;param-value&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;com.liferay.portal.servlet.filters.secure.SecureFilter&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #2c9393"&gt;param-value&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;init-param&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;init-param&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4270ce"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;!-- &amp;lt;param-name&amp;gt;basic_auth&amp;lt;/param-name&amp;gt; --&amp;gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4270ce"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #009594"&gt;&lt;span class="Apple-style-span" style="color: rgb(44, 147, 147); "&gt;param-value&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); "&gt;digest_auth&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(44, 147, 147); "&gt;&lt;span style="color: rgb(0, 149, 148); "&gt;&amp;lt;/&lt;/span&gt;param-value&lt;span style="color: rgb(0, 149, 148); "&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;param-value&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;true&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;param-value&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;init-param&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;init-param&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2c9393"&gt;param-name&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;portal_property_prefix&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #2c9393"&gt;param-name&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;&lt;/span&gt;param-value&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;webdav.servlet.&lt;/span&gt;&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;param-value&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;init-param&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #2c9393"&gt;&lt;span style="color: #009594"&gt;&amp;lt;/&lt;/span&gt;filter&lt;span style="color: #009594"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;div&gt;&lt;span style="color: #009594"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;How does this change how we use WebDAV (or anything else with digest authentication). &amp;nbsp;For the average user, it does not change much.&lt;/p&gt; &lt;p&gt;&lt;i&gt;What you need to know&lt;/i&gt;, however, is that if you are using a new installation of Liferay or just upgraded or something like that, you won't be able to log into WebDAV initially. &amp;nbsp;Rather, you must first login through the portal. &amp;nbsp;Why? &amp;nbsp;Because, the algorithm dictated by the &lt;a target="_blank" href="http://tools.ietf.org/html/rfc2617"&gt;RFC&lt;/a&gt; requires the server to have a hash based on your login credentials. &amp;nbsp;Since Liferay never stores a raw password, it can only create the hash based on credentials passed in when a user logs into the portal. &amp;nbsp;This also means any changes to a user's email address or screenname would require the user to relogin before they can login via WebDAV again (since we allow WebDAV credentials of all three types).&lt;/p&gt; &lt;p&gt;&lt;i&gt;For Windows Vista and Windows 7 users&lt;/i&gt;... you still may not be able to use WebDAV to its full potential (at least on 6.0 CE&amp;nbsp;GA3 and below). &amp;nbsp;Reason being, literally the day after we released GA3, I fixed a &lt;a target="_blank" href="http://issues.liferay.com/browse/LPS-12080"&gt;bug&lt;/a&gt; that only shows up in Windows Vista and Windows 7. &amp;nbsp;Basically, Microsoft changed their WebDAV client implementation to check certain things that it did not do in the past. &amp;nbsp;Therefore, while you are able to mount and use Liferay's WebDAV, you cannot do certain basic file system operations that are traditionally supported on WebDAV... unless you have the patch (which will definitely be in the next releases of CE and EE).&lt;/p&gt; &lt;p&gt;The basics of this information can be found in our &lt;a target="_blank" href="http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/WebDAV"&gt;wiki&lt;/a&gt;.&lt;/p&gt;</summary>
    <dc:creator>Alexander Chow</dc:creator>
    <dc:date>2010-08-24T10:59:21Z</dc:date>
  </entry>
  <entry>
    <title>Applying workflow on custom assets in Liferay 6 through plugins</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5624351" />
    <author>
      <name>Jonas X. Yuan</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5624351</id>
    <updated>2010-08-29T14:38:33Z</updated>
    <published>2010-08-21T07:12:22Z</published>
    <summary type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;As you know, Liferay 6 integrates workflow system like &lt;strong&gt;jBPM&lt;/strong&gt; or &lt;strong&gt;Kaleo&lt;/strong&gt; on any assets finally. By this feature, users are able to manage the content creation process with a workflow. Out-of-the-box, liferay 6 provides the ability to enable workflow for core assets:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Blogs Entry&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Comments&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Document Library Document&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Message Boards Message &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Web Content&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Wiki Page&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Logically, worklow is available for any assets (Out of box entities).For more details, you can refer to blogs &lt;a href="http://www.liferay.com/web/juan.fernandez/blog/-/blogs/liferay-workflow-in-action"&gt;Liferay Workflow In Action&lt;/a&gt; and &lt;a href="http://www.liferay.com/web/jonas.yuan/blog/-/blogs/applying-workflow-on-any-assets-in-liferay-6"&gt;Applying workflow on any assets in Liferay 6&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Asset here refers to Liferay core content entities (generated by Service-Builder in portal core) and custom entities (generated by Service-Builder in plugins): like Document Library document, Image Gallery image, Message Boards message, Web Content, Wiki page, comments, Blogs entry. Logically, workflow should be available for any assets like Image Gallery image, Calendar event, layout page, Bookmarks entry, user, organization, etc. (Abstracted from the book: &lt;a href="http://www.amazon.com/Liferay-Portal-6-Enterprise-Intranets/dp/1849510385"&gt;Liferay Portal 6 Enterprise Intranets&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Most importantly, you can apply workflow systems on custom assets in Liferay 6 through plugins. This article will show you how to apply workflow on custom assets (generated by Service-Builder) in Liferay 6 through plugins. Here I use custom assets &lt;strong&gt;knowledge base articles&lt;/strong&gt; as examples in Liferay Portal 6.0.5 GA3.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;How does it work?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;You can simply download WAR from &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://liferay.cignex.com/palm_tree/book/0387/chapter11/knowledge-base-portlet-6.0.6.1.war"&gt;http://liferay.cignex.com/palm_tree/book/0387/chapter11/knowledge-base-portlet-6.0.6.1.war&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;and deploy it&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;Configure workflow on any custom assets&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Now you can configure workflow now. I use custom asset Knowledge base Article as an example.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Create two users: David Berger &amp;ndash; a content creator; Lotti Stein &amp;ndash; a content reviewer. And assign them as members of community Guest.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Login as admin and go to Control panel | Liferay.com| Workflow Configuration&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Locate Knowledge Base Artcile and select &amp;ldquo;Single Approver&amp;rdquo; workflow and save it&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;img height="296" width="660" alt="" src="http://liferay.cignex.com/palm_tree/book/0387/chapter09/workflow/custom-asset-workflow-01.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Go to Control panel | Portal| Communities and assign user roles of community guest; note that you can apply workflow on any assets of any groups (communities and organizations). Here I use the group Guest as an example.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Assign roles (community or organization content reviewer &amp;ndash; Auto-generated role from workflow definition) to users (David Berger and Lotti Stein). &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;Go through workflow&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Assign proper permissions to users David Berger and Lotti Stein that they can manage pages and create Knowledge Base articles in community Guest;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Login as David Berger and create Knowledge Base article called &amp;ldquo;Liferay Portal 6 Enterprise Intranets&amp;rdquo;; you would see that the asset Knowledge Base article goes workflow and it states as &amp;ldquo;Pending&amp;rdquo;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img width="660" alt="" src="http://liferay.cignex.com/palm_tree/book/0387/chapter09/workflow/custom-asset-workflow-02.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;Login as Lotti Stein and go to Control Panel | Lotti Stein | My Workflow Tasks; you would see tabs: Assigned to Me, Assigned to My Roles, My Completed Tasks. Under the tab Assigned to My Roles, you would see the workflow task &amp;ldquo;Liferay Portal 6 Enterprise Intranets&amp;rdquo; with Asset Title &amp;ldquo;Liferay Portal 6 Enterprise Intranets&amp;rdquo; and Asset Type &amp;ldquo;Knowledge Base Article&amp;rdquo;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="157" width="660" alt="" src="http://liferay.cignex.com/palm_tree/book/0387/chapter09/workflow/custom-asset-workflow-03.png" /&gt;&lt;/p&gt;&lt;p&gt;Now you can review task or assign task to somebody. Click on the workflow task and assign this to yourself &amp;ldquo;Lotti Stein&amp;rdquo;; and add comment &amp;ldquo;Please review&amp;rdquo;; as you can see, the workflow task is moved to the tab &amp;ldquo;Assigned to Me&amp;rdquo;;&lt;/p&gt;&lt;p&gt;&lt;img height="319" width="660" alt="" src="http://liferay.cignex.com/palm_tree/book/0387/chapter09/workflow/custom-asset-workflow-04.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;Click on the workflow task under the tab &amp;ldquo;Assigned to Me&amp;rdquo;; and you can either reject it or approve it; you can click on &amp;ldquo;Approve Asset&amp;rdquo; and add comment &amp;ldquo;looks good&amp;rdquo; as well; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="439" width="660" alt="" src="http://liferay.cignex.com/palm_tree/book/0387/chapter09/workflow/custom-asset-workflow-05.png" /&gt;&lt;/p&gt;&lt;p&gt;As you can see, the workflow task is move to the tab &amp;ldquo;My Completed Tasks&amp;rdquo;. In the detail view of the task, you can view and edit the content, read the recent activity of the task, view the status and change its status, add comments, etc.&lt;/p&gt;&lt;p&gt;&lt;img height="226" width="660" alt="" src="http://liferay.cignex.com/palm_tree/book/0387/chapter09/workflow/custom-asset-workflow-06.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;After approved, Knowledge Base&amp;nbsp; article&amp;ldquo;Liferay Portal 6 Enterprise Intranets&amp;rdquo; would be visible for end users.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;S&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;ummary&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;As you can see, you could be able to apply workflow on any custom assets generated by Service-Builder in Liferay 6. teh asset Knowledge Base article is one of custom assets. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Your comments or suggestions?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;How to make it?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You should be able to apply workflow on any custom assets in Liferay 6 or above version. How to make it through plugins? I will address programatic details in next  blogs post.&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Jonas X. Yuan</dc:creator>
    <dc:date>2010-08-21T07:12:22Z</dc:date>
  </entry>
  <entry>
    <title>Liferay 6.0, OpenSocial and Gadgets - Part 2</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5630007" />
    <author>
      <name>Barrie Selack</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5630007</id>
    <updated>2010-08-23T11:28:29Z</updated>
    <published>2010-08-23T02:34:45Z</published>
    <summary type="html">&lt;p&gt;This is the second part of a series of blogs and wiki articles on using gadgets in Liferay. In the blog we'll look at a gadget in action and in the&amp;nbsp;&lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+6.0%2C+OpenSocial+and+Gadgets+%28Part+2%29"&gt;associated wiki&lt;/a&gt; post we'll breakdown the gadget, as well as have downloadable source code for you to try out&lt;/p&gt;&lt;p&gt;In the first post in the series, we talked about how to deploy a gadget. This time we'll build a gadget that will call a web service.&lt;/p&gt;&lt;p&gt;The web service we are using is one at GeoNames (&lt;a href="http://www.geonames.org/export/ajax-postalcode-autocomplete.html"&gt;www.geonames.org/export/ajax-postalcode-autocomplete.html&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;It is called with a postal code and country and returns a list of matching locations. It uses a simple HTTP GET to call the web service and gets JSON (Javascript Object Notation) as the result. You'll find that a web service that returns JSON is much easier to work with to parse the returned data and display to the user. Unfortunately, not all web services have JSON output as an option. In a future entry we'll look at a SOAP web service and parsing the XML returned from it. But for now, we'll keep it simpler.&lt;/p&gt;&lt;p&gt;The gadget looks like this on the page. It uses some external javascript from GeoNames to determine your country based on the your IP address. I'm using this to tell the user where we think they are.&lt;/p&gt;&lt;p&gt;&lt;img alt="gadget" width="309" height="170" src="http://cdn.www.liferay.com/image/image_gallery?uuid=2384e114-6cbc-46bd-a363-ba865b91a1f2&amp;amp;groupId=5075192&amp;amp;t=1282531140601" /&gt;&lt;/p&gt;&lt;p&gt;If we fill in the data with a zip code of 91789 and press the &lt;strong&gt;Get Location&lt;/strong&gt; we'll see the following. Normally for the US we''ll only get one result as that's how postal codes are set up. But for other countries we may get multiple results.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img width="303" height="251" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=e3f71a25-7ebd-4cf6-8dd2-64139171c978&amp;amp;groupId=5075192&amp;amp;t=1282531056287" /&gt;&lt;/p&gt;&lt;p&gt;Note that by default it will return up to 10 results. But we may need more. So the gadget has a configuration to set the max rows to return. We can set this higher if we need to get more results. The maxrows setting is part of your gadget definition and automatically becomes a configuration option in Liferay through the OpenSocial portlet. No programming necessary!&lt;/p&gt;&lt;p&gt;&lt;img width="636" height="478" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=2a50f806-0efd-4054-86a3-bb1d84941218&amp;amp;groupId=5075192&amp;amp;t=1282531042954" /&gt;&lt;/p&gt;&lt;p&gt;So after configuring it to return up to 25 rows, we see that there are more than 10 results.&lt;/p&gt;&lt;p&gt;&lt;img width="308" height="482" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=c676113b-75d0-4d4f-b478-27910c23c329&amp;amp;groupId=5075192&amp;amp;t=1282531050280" /&gt;&lt;/p&gt;&lt;p&gt;The web service returns more items than we are using, so if you download the gadget and read about the GeoNames web service, you can add more items to display to the user (such as latitude and longitude).&lt;/p&gt;&lt;p&gt;I hope the blog and wiki article and source are helpful for you. Thanks for reading!&lt;/p&gt;</summary>
    <dc:creator>Barrie Selack</dc:creator>
    <dc:date>2010-08-23T02:34:45Z</dc:date>
  </entry>
  <entry>
    <title>Liferay 6: JFreeChart portlet</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5604338" />
    <author>
      <name>Shepherd Ching</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5604338</id>
    <updated>2010-08-29T14:32:38Z</updated>
    <published>2010-08-19T02:00:18Z</published>
    <summary type="html">&lt;p&gt;Draft version 1&lt;br /&gt;With synergy of JFreechart and Liferay, I create a jfreechart-portlet in Liferay for enterprise usage. It combines features JFreeChart's professional presentation and Liferay portal's professional framework.&lt;/p&gt;&lt;p&gt;&lt;img width="618" height="521" src="http://cdn.www.liferay.com/image/image_gallery?img_id=5605167&amp;amp;t=1282195426088" alt="Demo1" /&gt;&lt;/p&gt;&lt;p&gt;A chart is worth a thousand words, Behind a chart, you will feel collaborations with DDDD...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Decision makers&lt;/li&gt;&lt;li&gt;Designers&lt;/li&gt;&lt;li&gt;Developers&lt;/li&gt;&lt;li&gt;Data miners&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a target="_self" href="http://cdn.www.liferay.com/image/image_gallery?uuid=961a21fd-feaa-4874-87e2-ebff4d1134b5&amp;amp;groupId=11072&amp;amp;t=1282192078867"&gt;&lt;img alt="Collaboration 1" src="http://cdn.www.liferay.com/image/image_gallery?uuid=961a21fd-feaa-4874-87e2-ebff4d1134b5&amp;amp;groupId=11072&amp;amp;t=1282192078867" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;For managers:&lt;/strong&gt;&lt;br /&gt;You have just remembered your password to login Liferay. And using your profession to tell your developrs what's your ideas.&lt;/p&gt;&lt;p&gt;Here is some sample charts of collaboration at office space:&lt;br /&gt;&lt;img src="http://cdn.www.liferay.com/image/image_gallery?uuid=319a289a-695f-466a-b7d1-b7feca50c7ed&amp;amp;groupId=11072&amp;amp;t=1282193975872" alt="Collaboration 2" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;img src="http://cdn.www.liferay.com/image/image_gallery?uuid=9e6f8831-6a51-4fd0-a29e-06d80b33f6d8&amp;amp;groupId=11072&amp;amp;t=1282201698220" alt="Demo6" /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;img src="http://cdn.www.liferay.com/image/image_gallery?uuid=65cfb53f-aeb4-4d7d-95ee-d041a0284b07&amp;amp;groupId=11072&amp;amp;t=1282201726571" alt="Demo7" /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;img src="http://cdn.www.liferay.com/image/image_gallery?uuid=547d39a0-6266-4968-9101-0b98466f3ef0&amp;amp;groupId=11072&amp;amp;t=1282201747680" alt="Demo8" /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;img width="618" height="594" src="http://cdn.www.liferay.com/image/image_gallery?uuid=a17e075e-1650-4712-b645-d6fbf6c27b6b&amp;amp;groupId=11072&amp;amp;t=1282201772841" alt="Demo9" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;For developers:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Development, debug and display will be done within the same box.&lt;br /&gt;The inline compilation will help you to develop your professional charts.&lt;/p&gt;&lt;p&gt;&lt;img width="618" height="326" alt="Demo2" src="http://cdn.www.liferay.com/image/image_gallery?uuid=fbd5c852-cf64-425b-bb20-f500942b9e59&amp;amp;groupId=11072&amp;amp;t=1282197607508" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Don't be panic if you have error messages in the same box under development, trial and errors are the path of a developer. More knowledges of &lt;a href="http://www.liferay.com/documentation/liferay-portal/"&gt;Liferay&lt;/a&gt; and &lt;a href="http://www.jfree.org/jfreechart/devguide.html"&gt;JFreeChart&lt;/a&gt; will give your more power.&lt;/p&gt;&lt;p&gt;&lt;img width="619" height="391" src="http://cdn.www.liferay.com/image/image_gallery?uuid=8f49e6e6-3a0d-41af-8dce-2ac10ae9001d&amp;amp;groupId=11072&amp;amp;t=1282197649017" alt="Demo3" /&gt;&lt;/p&gt;&lt;p&gt;Having debugged, here is one of examples:&lt;/p&gt;&lt;p&gt;&lt;img src="http://cdn.www.liferay.com/image/image_gallery?uuid=bddc2cdb-efd6-4de1-880d-e236dc47674b&amp;amp;groupId=11072&amp;amp;t=1282198636762" alt="Demo5" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;For administrators:&lt;/strong&gt;&lt;br /&gt;You should have knowledge of Liferay administration, at least you know to control user permissions.&lt;/p&gt;&lt;p&gt;&lt;img width="618" height="298" src="http://cdn.www.liferay.com/image/image_gallery?uuid=222a6e39-5c4b-4756-808d-6f07e82d79df&amp;amp;groupId=11072&amp;amp;t=1282197685243" alt="Demo4" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Integration with Liferay IDE&lt;/strong&gt;&lt;br /&gt;Under construction . . . .&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Why not using Google Chart API?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Although Google Chart is another choice, however Google charts4j has stated these its limitations:&amp;nbsp;&lt;/p&gt;&lt;p&gt;According to &lt;a href="http://code.google.com/p/charts4j/wiki/FAQ"&gt;code.google.com/p/charts4j/wiki/FAQ&lt;/a&gt;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;No  Internet connection, no charts. Your application must be connected to  the Internet because the charts are ultimately rendered by the Google  Chart API.&lt;/li&gt;&lt;li&gt;There is no security with these charts. Your data  will be sent as clear text over the Internet, and it would be trivial  for someone to intercept this information.&lt;/li&gt;&lt;li&gt;If you have lots of  data, roughly speaking, more than 2000 data points, your application  should try to sample data less frequently, and use the simple encoding  scheme. Otherwise, this technology may not be right for you.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;With consideration of running enterprise business, I&amp;nbsp;would rather choose independent JFreeChart API. Food for thought about the ending of Bruce Willis' movie &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Surrogates_%28film%29"&gt;Surrogate&lt;/a&gt;&amp;quot;, people should not depend on internet, but depend on their own life way!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Thanks For Your Support&lt;/strong&gt;&lt;br /&gt;Special thanks to &lt;a href="http://www.jfree.org/jfreechart/"&gt;David Gilbert&lt;/a&gt; and all &lt;a href="http://www.jfree.org/phpBB2/viewforum.php?f=3"&gt;JFreeChart supporters&lt;/a&gt;.&lt;br /&gt;By purchasing the JFreeChart Developer Guide, you are contributing to the ongoing improvement and development of JFreeChart. Thanks!&lt;br /&gt;&lt;a href="http://www.object-refinery.com/jfreechart/guide.html"&gt;http://www.object-refinery.com/jfreechart/guide.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Similarly, by purchasing Liferay services, you are contributing to the ongoing improvement and development of Liferay, too. Thanks again!&lt;br /&gt;&lt;a href="http://www.liferay.com/products/liferay-portal/ee/overview"&gt;http://www.liferay.com/products/liferay-portal/ee/overview&lt;/a&gt;&lt;/p&gt;</summary>
    <dc:creator>Shepherd Ching</dc:creator>
    <dc:date>2010-08-19T02:00:18Z</dc:date>
  </entry>
  <entry>
    <title>SSO via Facebook</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5594111" />
    <author>
      <name>Wilson Man</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5594111</id>
    <updated>2010-08-18T15:15:29Z</updated>
    <published>2010-08-18T04:23:29Z</published>
    <summary type="html">&lt;p&gt;Liferay 6.0 now comes with an additional Single Sign-On option - Facebook SSO using &lt;a href="http://developers.facebook.com/docs/authentication/"&gt;OAuth 2.0&lt;/a&gt;. &amp;nbsp;Setup is quite easy. &amp;nbsp;Let me walk you through the steps below.&lt;/p&gt;  &lt;p&gt;1. In order for Facebook SSO to work, you first have to have a Facebook application account. &amp;nbsp;If you don't already have one, you can get more information here: &lt;a target="_blank" href="http://developers.facebook.com/docs/guides/web"&gt;developers.facebook.com/docs/guides/web&lt;/a&gt;&lt;/p&gt; &lt;p&gt;2. Once you have a Facebook application account (and ID), you'll need to edit settings under the &lt;strong&gt;Connect&lt;/strong&gt; tab. &amp;nbsp;Fill in the &lt;strong&gt;Connect URL&lt;/strong&gt; text field and the &lt;strong&gt;Base Domain&lt;/strong&gt; text field. &amp;nbsp;If you're testing locally, you can set the &lt;strong&gt;Connect URL&lt;/strong&gt; as &lt;u&gt;&lt;em&gt;http://localhost:8080&lt;/em&gt;&lt;/u&gt; and the &lt;strong&gt;Base Domain&lt;/strong&gt; to be &lt;em&gt;&lt;u&gt;localhost&lt;/u&gt;&lt;/em&gt;. &amp;nbsp;I've added an entry in my hosts file, so lportal.com would hit my local tomcat at port &lt;em&gt;8080&lt;/em&gt;. &amp;nbsp;Below is an example of what I've entered. &amp;nbsp;Click &lt;em&gt;Save&lt;/em&gt; when you're done with your settings.&lt;/p&gt; &lt;p&gt;&lt;img alt="Facebook Connect Settings" src="http://farm5.static.flickr.com/4094/4903101115_b01089a811_z.jpg" /&gt;&lt;/p&gt; &lt;p&gt;3. After entering these settings on the Facebook side, you now need to configure your Liferay portal. &amp;nbsp;First, log in with your administrator account. &amp;nbsp;Go to the &lt;strong&gt;Control Panel&lt;/strong&gt;. &amp;nbsp;On the left menu under the instance you want to enable Facebook SSO, click on &lt;strong&gt;Settings&lt;/strong&gt;. &amp;nbsp;Then click &lt;strong&gt;Authentication&lt;/strong&gt; on the right menu, and lastly click on &lt;strong&gt;Facebook&lt;/strong&gt;. &amp;nbsp;In this section, you want to first check the checkbox to enable Facebook SSO. &amp;nbsp;Next, fill in the &lt;strong&gt;Application ID&lt;/strong&gt; (not to be confused with the application key), the &lt;strong&gt;Application Secret&lt;/strong&gt; (don't tell/show anyone this), and lastly, update the &lt;em&gt;domain part&lt;/em&gt; of the &lt;strong&gt;Redirect URL&lt;/strong&gt; if not using localhost&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;(I changed mine from localhost to lportal.com). &amp;nbsp;Below is what I've entered. &amp;nbsp;Click &lt;em&gt;Save&lt;/em&gt; when you're finished.&lt;/p&gt; &lt;p&gt;&lt;img alt="Liferay Portal Authentication Facebook Settings" src="http://farm5.static.flickr.com/4095/4903101163_5b5337fd0c_z.jpg" /&gt;&lt;/p&gt; &lt;p&gt;4. Now you're ready to test it. &amp;nbsp;Log out of your administrator account in Liferay portal. &amp;nbsp;When you're on the login page, you should now see the Facebook link under the password field.&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://farm5.static.flickr.com/4094/4903687490_1f8c90cb7a.jpg" /&gt;&lt;/p&gt; &lt;p&gt;5. Clicking on the Facebook link should do one of two things. &amp;nbsp;If your browser already has a Facebook session, it will try to log you in with that Facebook account. &amp;nbsp;If no Facebook session exists on your browser, it will prompt you to login with your Facebook credentials. &amp;nbsp;Once you've granted access, Liferay portal will ask Facebook for the primary email address of that account you logged in with. &amp;nbsp;Liferay portal will search its database for that email address. &amp;nbsp;If found, it'll log you in automatically, if not, you will see the prompt below.&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://farm5.static.flickr.com/4075/4903101215_d940ddba1e.jpg" /&gt;&lt;/p&gt; &lt;p&gt;6. User can choose to create an account on your Liferay portal simply by clicking the &lt;strong&gt;Add Account&lt;/strong&gt; button. &amp;nbsp;Liferay will then ask Facebook for the first name, last name, gender, and email address of the account. &amp;nbsp;It will also ask whether the account is validated by Facebook for security reasons.&lt;/p&gt; &lt;p&gt;NOTE: if your Facebook application you setup earlier is in &lt;strong&gt;&lt;em&gt;Sandbox&lt;/em&gt;&lt;/strong&gt; mode, only the developers of your Facebook application listed will be able to login successfully.&lt;/p&gt; &lt;p&gt;7. That's all there is to it! &amp;nbsp;Your users can now login with their Facebook credentials to your site! &amp;nbsp;If they don't already have an account on your site, sign up is that much easier.&lt;/p&gt;   &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;We plan to add additional features in the near future. &amp;nbsp;Here's a list of them so far:&lt;/p&gt;   &lt;ul&gt;&lt;li&gt;Allow Liferay accounts to link to Facebook accounts by facebook user ID (so email addresses don't need to be the same).&lt;/li&gt;&lt;li&gt;Make it configurable whether the Add Account option should be presented to user if no accounts were found on Liferay portal.&lt;/li&gt;&lt;li&gt;For the add account feature, also ask Facebook for user's birthday. &amp;nbsp;This will be configurable whether birthday is required.&lt;/li&gt;&lt;/ul&gt;</summary>
    <dc:creator>Wilson Man</dc:creator>
    <dc:date>2010-08-18T04:23:29Z</dc:date>
  </entry>
  <entry>
    <title>Liferay Portal 6 GA 3 Released</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5582453" />
    <author>
      <name>Brian Chan</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5582453</id>
    <updated>2010-08-16T23:22:11Z</updated>
    <published>2010-08-16T23:20:31Z</published>
    <summary type="html">&lt;p&gt;GA&amp;nbsp;3 is a bug fix release for GA&amp;nbsp;2.&lt;/p&gt;&lt;p&gt;Changes are available on our &lt;a href="http://issues.liferay.com/secure/ReleaseNote.jspa?version=10642&amp;amp;styleName=Html&amp;amp;projectId=10952"&gt;Issue Tracker&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;meta content="text/html; charset=utf-8" http-equiv="content-type" /&gt;&lt;/p&gt;&lt;p&gt;Downloads are available on&amp;nbsp;&lt;a href="http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.0.5/"&gt;SF.net&lt;/a&gt;.&lt;/p&gt;</summary>
    <dc:creator>Brian Chan</dc:creator>
    <dc:date>2010-08-16T23:20:31Z</dc:date>
  </entry>
  <entry>
    <title>Liferay 6 Launch Event</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5567764" />
    <author>
      <name>Paul Hinz</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5567764</id>
    <updated>2010-08-25T15:15:32Z</updated>
    <published>2010-08-13T23:21:28Z</published>
    <summary type="html">&lt;p&gt;&lt;a href="http://www.liferay.com/about-us/events/liferay-symposiums/west-coast-2010/general"&gt;&lt;img width="650" height="120" align="middle" src="http://cdn.www.liferay.com/image/image_gallery?uuid=a33cc2a0-1897-4dcb-9d5a-59004588d32d&amp;amp;groupId=4108063&amp;amp;t=1281742187655" alt="" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;meta http-equiv="content-type" content="text/html; charset=utf-8"&gt;Liferay 6 EE is almost done -&amp;nbsp; it's great - and we're having a party.&amp;nbsp; Over the last year and a half, most of Liferay spent heads down digging through reports, reviews, strategies, ideas, code, bugs, and processes.&amp;nbsp; All with one aim, to build the culmination of Portal, Web Content Management and Social Collaboration into one innovative, robust, scalable and easy to use application with a powerful eco-system behind it for mission critical enterprise support.&amp;nbsp; You are going to love it.&lt;br /&gt; &lt;meta http-equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;br /&gt; The launch will take place at Liferay's West Coast Symposium.&amp;nbsp; A short list of&amp;nbsp; activities:&lt;br /&gt;  &lt;/meta&gt;&lt;/meta&gt;&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;Countdown to Liferay 6 EE starts Aug 31 (watch www.liferay.com)&lt;/li&gt;     &lt;li&gt;Liferay 6 EE Launch Event is Sept 8 at our West Coast Symposium&lt;/li&gt;     &lt;li&gt;Special Launch Announcement at 9am PDT &amp;nbsp;&lt;/li&gt;     &lt;li&gt;Liferay Launch Party at 6:15 pm PDT - Should be great fun.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;WCS&amp;nbsp;will additionally have several technical and business session designed to increase your knowledge of Liferay 6 EE and it's use in enterprise deployments&amp;nbsp; (click graphic above for agenda).&amp;nbsp; If you are looking to build any new web properties, are building a social collaboration site, or are faced with End of Feature Life for your existing portal, you should attend this Symposium.&amp;nbsp; There will also be a special announcment on day 2 of the Symposium.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Paul Hinz</dc:creator>
    <dc:date>2010-08-13T23:21:28Z</dc:date>
  </entry>
  <entry>
    <title>Liferay 6.0, OpenSocial and Gadgets - Part 1</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5556923" />
    <author>
      <name>Barrie Selack</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5556923</id>
    <updated>2010-08-25T11:55:10Z</updated>
    <published>2010-08-12T15:53:53Z</published>
    <summary type="html">&lt;p&gt;This is the first part of a series of blogs and wiki articles on using gadgets in Liferay. In this first part we'll discuss gadgets use and how to deploy a gadget. So, will gadgets replace portlets? Well, in some cases, they will be a quicker way to get information on your web site if you already have a web service available to pull the data from. There are some caveats thought, as a gadget is a client side application, any web service that needs to be secured would not be a good candidate for a gadget.&lt;/p&gt;&lt;p&gt;The contents of the gadget are sent to the browser as a whole, so that means any user/password information needed to call the web service would be viewable in the &amp;quot;view source&amp;quot; mode of the browser. If you are using the gadget in a secured Intranet (inside the firewall) then you could consider a gadget for your own internal use.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;So what could be a good candidate for a gadget in a publicly available web site?&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Any information that you want available to customers.&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Company News&lt;/li&gt;&lt;li&gt;Press Releases&lt;/li&gt;&lt;li&gt;Upcoming Events&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;As a gadget can be put on other web site via a gadget container, your gadget xml could be used to be put on other sites. It would still be calling back to your site for information. This means you've exposed the web service making the data available to the public. This may or may not be a problem and is something you need to consider in building your application as a gadget.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;So what could be a good candidate for a gadget in an Intranet web site? (behind the firewall)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 9px; margin-left: 0px; "&gt;This may actually where you can get the biggest bang for your gadget development. Since you are not allowing access outside the firewall, you can expose any information you would normally put on any web page on your Intranet. This could include the same information from the public list above, but could also include any company sensitive information. It could include calendar items, policies and procedures or employee &amp;nbsp;dashboard items. Just keep in mind that this information will need to be available as a web service for the gadget to retrieve it.&lt;/p&gt;&lt;div&gt;&lt;em&gt;&lt;strong&gt;With all that in mind, let's see just how to get a gadget deployed in Liferay.&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;I've created &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+6.0%2C+OpenSocial+and+Gadgets"&gt;a wiki post&lt;/a&gt; to walk through the deployment step by step.It shows everything from where you can put your gadget, deployment and how to configure user properties for your gadget.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;In &lt;strong&gt;Part 2&lt;/strong&gt;, we'll start building a gadget to deploy. Fell free to ask any questions!&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Barrie Selack</dc:creator>
    <dc:date>2010-08-12T15:53:53Z</dc:date>
  </entry>
  <entry>
    <title>Easily Improve Your Captcha</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5528739" />
    <author>
      <name>Jack Li</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5528739</id>
    <updated>2010-08-12T23:57:29Z</updated>
    <published>2010-08-09T21:42:54Z</published>
    <summary type="html">&lt;p&gt;You can now easily implement a different captcha than the default captcha in Liferay. Before, the default captcha looked like this and in order to change it, you had to set some additional properties in properties-ext.properties.&lt;/p&gt;&lt;p&gt;&lt;img width="419" height="414" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=1f02c600-3f64-404b-927c-001c45b16bc4&amp;amp;groupId=4981629&amp;amp;t=1281390369718" /&gt;&lt;/p&gt;&lt;p&gt;Now, you can quickly enable ReCaptcha via Control Panel--&amp;gt;Server Administration--&amp;gt;Captcha (to get a ReCaptcha key go &lt;a href="https://www.google.com/recaptcha/admin/create"&gt;here&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;&lt;img width="662" height="262" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=873296a6-df5b-4cff-979b-8db424ab472b&amp;amp;groupId=4981629&amp;amp;t=1281391222583" /&gt;&lt;/p&gt;&lt;p&gt;You are now using ReCaptcha!&lt;/p&gt;&lt;p&gt;&lt;img width="520" height="357" alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=c7803c26-856c-46ef-b61b-d7da74c57823&amp;amp;groupId=4981629&amp;amp;t=1281390369718" /&gt;&lt;/p&gt;</summary>
    <dc:creator>Jack Li</dc:creator>
    <dc:date>2010-08-09T21:42:54Z</dc:date>
  </entry>
  <entry>
    <title>People Who Use Liferay: Ritchie Bros. Auctioneers</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5515319" />
    <author>
      <name>Ronald Sarayudej</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5515319</id>
    <updated>2010-08-07T00:02:59Z</updated>
    <published>2010-08-07T00:02:59Z</published>
    <summary type="html">&lt;div style="float: left; margin-right: 20px; width: 320px;"&gt;&lt;a target="_blank" href="http://www.rbauction.com/"&gt; 		&lt;img alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=5307b7d3-5633-4f2d-9951-ecda65974a4f&amp;amp;groupId=1879763" /&gt; 	&lt;/a&gt;&lt;/div&gt;  &lt;div style="color: #444; float: left; width: 250px;"&gt;&lt;p style="font-weight: bold;"&gt;&lt;a target="_blank" href="http://www.rbauction.com/"&gt;Ritchie Bros. Auctioneers&lt;/a&gt;&lt;/p&gt; 	&lt;p&gt;&lt;b&gt;Region:&lt;/b&gt; Canada&lt;br /&gt; 		&lt;b&gt;Version:&lt;/b&gt; Liferay Portal EE 5.1&lt;/p&gt;  	&lt;p&gt;Since its first $2,000 auction in 1958, Ritchie Bros. has conducted thousands of unreserved public auctions worldwide. Its largest auction to date &amp;ndash; a US$190 million, five-day auction in 2008 &amp;ndash; attracted more than 6,000 bidders from 71 countries. Today Ritchie Bros. is the world's largest industrial auctioneer, selling US$3.5 billion of trucks, equipment and other assets at more than 325 unreserved auctions in 2009 alone.&lt;/p&gt;&lt;/div&gt;  &lt;div style="clear: both;"&gt;&amp;nbsp;&lt;/div&gt;</summary>
    <dc:creator>Ronald Sarayudej</dc:creator>
    <dc:date>2010-08-07T00:02:59Z</dc:date>
  </entry>
  <entry>
    <title>People Who Use Liferay: LOT Polish Airlines</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5485637" />
    <author>
      <name>Ronald Sarayudej</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5485637</id>
    <updated>2010-08-04T00:07:24Z</updated>
    <published>2010-08-04T00:07:24Z</published>
    <summary type="html">&lt;div style="float: left; margin-right: 20px; width: 320px;"&gt;&lt;a target="_blank" href="http://www.lot.com/"&gt; 		&lt;img alt="" src="http://cdn.www.liferay.com/image/image_gallery?uuid=eff7218f-f216-49ce-b927-ecee8116b257&amp;amp;groupId=1879763" /&gt; 	&lt;/a&gt;&lt;/div&gt;  &lt;div style="color: #444; float: left; width: 250px;"&gt;&lt;p style="font-weight: bold;"&gt;&lt;a target="_blank" href="http://www.lot.com/"&gt;LOT Polish Airlines&lt;/a&gt;&lt;/p&gt; 	&lt;p&gt;&lt;b&gt;Region:&lt;/b&gt; Poland&lt;br /&gt; 		&lt;b&gt;Version:&lt;/b&gt; Liferay Portal EE 5.2&lt;/p&gt;  	&lt;p&gt;Since 1928, LOT Polish Airlines has met the transportation needs of individual and corporate customers flying to and from Poland with both excellent service and great value.&lt;/p&gt;&lt;/div&gt;  &lt;div style="clear: both;"&gt;&amp;nbsp;&lt;/div&gt;</summary>
    <dc:creator>Ronald Sarayudej</dc:creator>
    <dc:date>2010-08-04T00:07:24Z</dc:date>
  </entry>
  <entry>
    <title>Development Made Easy: Liferay IDE</title>
    <link rel="alternate" href="http://www.liferay.com/c/blogs/find_entry?entryId=5474682" />
    <author>
      <name>Samuel Liu</name>
    </author>
    <id>http://www.liferay.com/c/blogs/find_entry?entryId=5474682</id>
    <updated>2010-08-04T22:04:59Z</updated>
    <published>2010-08-02T23:03:42Z</published>
    <summary type="html">&lt;p&gt;Today was my first day playing with the Liferay IDE. It is really good!&amp;nbsp;It basically streamlines all the little processes that create friction for Liferay developers and lets you handle everything from Eclipse.&lt;/p&gt;&lt;p&gt;I'm running Ubuntu 10.04 32-bit. Windows x64 was giving me grief with Eclipse, and Java 1.6.21 was also giving me grief with Helios. So here are my recommendations:&lt;/p&gt;&lt;p style="margin-left: 40px;"&gt;&lt;strong&gt;1)&amp;nbsp;Use Java 1.6.20. &lt;/strong&gt;I know that Oracle did come out with an updated 1.6.21 that supposedly works with Eclipse finally, but it's just too much of a hassle. 1.6.20 works like a charm.&lt;/p&gt;&lt;p style="margin-left: 40px;"&gt;&lt;strong&gt;2) Download a fresh eclipse. &lt;/strong&gt;You might have other eclipse installations for your other work or whatever, but get a fresh one just for Liferay dev. That way you don't have to worry about things being screwy because you're sharing eclipse with some other work processes.&lt;/p&gt;&lt;p style="margin-left: 40px;"&gt;&lt;strong&gt;3) Use Helios. &lt;/strong&gt;I did try to use Galileo for some things last week and it wasn't working out. Helios is stable as far as I know, provided you're using Java 1.6.20.&lt;/p&gt;&lt;p&gt;I followed &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+IDE+Getting+Started+Tutorial"&gt;this guide&lt;/a&gt; to get my IDE set up. Deploying my hello world portlet took a simple right click on my build file -&amp;gt; Run As... -&amp;gt; Ant Build&lt;/p&gt;&lt;p&gt;It not only deployed to my Liferay, but I was able to open the tomcat which was in my servers tab, and launch Liferay in debug mode *inside* eclipse. The guy next to me was impressed...I was too.&lt;/p&gt;&lt;p&gt;I still have to explore the other benefits of Liferay IDE, but so far so good. You can easily create a hook, ext plugin, or portlet. There are also two greyed-out buttons for themes and layouts. I am pretty excited for those to get un-greyed....&lt;/p&gt;</summary>
    <dc:creator>Samuel Liu</dc:creator>
    <dc:date>2010-08-02T23:03:42Z</dc:date>
  </entry>
</feed>

