<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>Neil Griffin</title>
  <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/rss" />
  <subtitle>Neil Griffin</subtitle>
  <entry>
    <title>JSFCentral Interview: Neil Griffin on Liferay Projects, Portlets, and JSF</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/jsfcentral-interview-neil-griffin-on-liferay-projects-portlets-and-jsf" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/jsfcentral-interview-neil-griffin-on-liferay-projects-portlets-and-jsf</id>
    <updated>2013-01-16T20:13:24Z</updated>
    <published>2013-01-16T20:08:11Z</published>
    <summary type="html">&lt;p&gt;
	&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt;I really enjoyed the &lt;/span&gt;&lt;a href="http://content.jsfcentral.com/c/journal_articles/view_article_content?groupId=35702&amp;articleId=56875&amp;version=1.6#.UPcIx6FdfL4" style="font-size: 12.0px;line-height: 1.5;"&gt;JSFCentral Interview&lt;/a&gt;&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt; by Kito Mann. The podcast was posted on&amp;nbsp;December 06, 2012.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt;Some of the topics we discussed:&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;
		Liferay Portal
	&lt;li&gt;
		Liferay Faces
	&lt;li&gt;
		JSR 329
	&lt;li&gt;
		CDI
&lt;/ul&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2013-01-16T20:08:11Z</dc:date>
  </entry>
  <entry>
    <title>Contributing to Liferay Faces</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/contributing-to-liferay-faces" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/contributing-to-liferay-faces</id>
    <updated>2013-01-16T17:22:46Z</updated>
    <published>2012-12-21T14:52:33Z</published>
    <summary type="html">&lt;p&gt;
	Note: This blog post has been &lt;strong&gt;moved&lt;/strong&gt; to the &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Contributing+to+Liferay+Faces"&gt;Liferay Faces Wiki&lt;/a&gt;.&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-12-21T14:52:33Z</dc:date>
  </entry>
  <entry>
    <title>Announcement: Liferay Faces 3.1.1-ga2 Released</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-1-ga2-released" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-1-ga2-released</id>
    <updated>2013-01-16T19:47:14Z</updated>
    <published>2012-12-04T20:07:23Z</published>
    <summary type="html">&lt;p&gt;
	On December 11, 2012 Liferay released the 2&lt;sup&gt;nd&lt;/sup&gt; General Availability (GA) release of &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/overview"&gt;Liferay Faces&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.1.1-ga2 &lt;/strong&gt;(JSF 2.0/2.1 + Liferay 6.1.x)
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.0.1-ga2&lt;/strong&gt; (JSF 2.0/2.1 + Liferay 6.0.x)
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 2.1.1-ga2&lt;/strong&gt; (JSF 1.2 + Liferay 6.1.x)
&lt;/ul&gt;
&lt;h3&gt;
	Project Links&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/secure/ReleaseNote.jspa?projectId=12081&amp;version=12534"&gt;Release Notes&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/documentation"&gt;Documentation&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/download"&gt;Downloads&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos"&gt;Demos&lt;/a&gt;
&lt;/ul&gt;
&lt;h3&gt;
	Version Scheme&lt;/h3&gt;
&lt;p&gt;
	For information on the Liferay Faces Version Scheme, refer to the &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+Faces+Version+Scheme"&gt;Liferay Faces Wiki article&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
	Release Highlights&lt;/h3&gt;
&lt;p&gt;
	This is a maintenance release that fixes several bugs including a memory leak (documented in&amp;nbsp;&lt;a href="http://issues.liferay.com/browse/FACES-1445"&gt;FACES-1445&lt;/a&gt;). Liferay recommends that all JSF portlet projects be upgraded to this new version. Please refer to the &lt;a href="http://issues.liferay.com/secure/ReleaseNote.jspa?projectId=12081&amp;version=12534"&gt;Release Notes&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;
	Thanks to everyone in the community that reported issues, contributed patches, and participated in the forums!&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-12-04T20:07:23Z</dc:date>
  </entry>
  <entry>
    <title>Announcement: PrimeFaces Technology Partnership</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-primefaces-technology-partnership" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-primefaces-technology-partnership</id>
    <updated>2013-03-13T14:58:55Z</updated>
    <published>2012-10-31T15:04:00Z</published>
    <summary type="html">&lt;p&gt;
	&lt;a href="http://www.liferay.com" style="font-size: 12.0px;line-height: 1.5;"&gt;Liferay&lt;/a&gt;&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt; has entered into a new technology partnership with &lt;/span&gt;&lt;a href="http://www.primetek.com.tr/" style="font-size: 12.0px;line-height: 1.5;" target="_blank"&gt;PrimeTek Informatics&lt;/a&gt;&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt;, maker of &lt;/span&gt;&lt;a href="http://www.primefaces.org/" style="font-size: 12.0px;line-height: 1.5;" target="_blank"&gt;PrimeFaces&lt;/a&gt;&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
	&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt;Customers who have purchased &lt;/span&gt;&lt;a href="http://www.liferay.com/products/liferay-portal/ee/overview" style="font-size: 12.0px;line-height: 1.5;"&gt;Liferay EE&lt;/a&gt;&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt; and &lt;/span&gt;&lt;a href="http://primefaces.org/support.html" style="font-size: 12.0px;line-height: 1.5;" target="_blank"&gt;PrimeFaces PRO&lt;/a&gt;&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt; now enjoy the benefit of a communication channel between our companies, so that technology issues can be resolved in accordance with corresponding Service Level Agreements (SLAs). In addition, this partnership will ensure that our mutual customers will be able to develop PrimeFaces portlets that can be used in conjunction with the &lt;/span&gt;&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/overview" style="font-size: 12.0px;line-height: 1.5;"&gt;Liferay Faces Alloy&lt;/a&gt;&lt;span style="font-size: 12.0px;line-height: 1.5;"&gt; component suite.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-10-31T15:04:00Z</dc:date>
  </entry>
  <entry>
    <title>Please vote for Liferay to serve on the JCP Executive Committee</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/please-vote-for-liferay-to-serve-on-the-jcp-executive-committee" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/please-vote-for-liferay-to-serve-on-the-jcp-executive-committee</id>
    <updated>2012-10-30T16:34:21Z</updated>
    <published>2012-10-17T16:33:12Z</published>
    <summary type="html">&lt;style type="text/css"&gt;*.quote {
	background: rgb(255,255,255) url(/osb-theme/images/message_boards/quoteleft.png) left top no-repeat;
	border: 1.0px solid rgb(119,119,119);
	padding: 5.0px 0.0px 0.0px 5.0px;
}
*.quote-content {
	background: transparent url(/osb-theme/images/message_boards/quoteright.png) right bottom no-repeat;
	padding: 5.0px 30.0px 10.0px 30.0px;
}
&lt;/style&gt;
&lt;div&gt;
	&lt;strong&gt;UPDATE: 10/30&lt;/strong&gt;: Congratulations to the London Java Community and to CloudBees! And thanks to everyone who voted for Liferay.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;hr&gt;
&lt;div&gt;
	&lt;strong&gt;UPDATE 10/19&lt;/strong&gt;: Liferay Sr. Software Architect&amp;nbsp;&lt;a href="http://www.liferay.com/web/raymond.auge/profile"&gt;Ray Aug&amp;eacute;&lt;/a&gt; spoke on behalf of Liferay on the &amp;quot;Meet the EC Candidates&amp;quot; call. You can &lt;a href="http://www.jcp.org/en/resources/multimedia"&gt;listen to Ray on the MP3 recording from&amp;nbsp;19m 50s - 23m 35s&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
	&lt;div&gt;
		&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div&gt;
	This year Liferay is running for election to serve on the &lt;strong&gt;JCP Executive Committee&lt;/strong&gt;. To my great surprise, Liferay nominated me to be the company's representative. I'm truly honored to be nominated, and if we are elected, we will endeavor to serve the Java community well.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Here is the company description that we submitted for the &lt;a href="http://www.jcp.org/aboutJava/communityprocess/elections/2012-nominees.html"&gt;2012 Executive Committee Nominations page&lt;/a&gt;:&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div class="quote"&gt;
	&lt;div class="quote-content"&gt;
		Liferay is an open source software company that is dedicated to the success of the Java platform. As a privately held company, we are free from investor pressures which in turn makes us free to serve the best interests of our 70,000+ member community. &lt;strong&gt;We have benefitted greatly from the contributions and feedback of our community members and strongly believe in open/transparent processes&lt;/strong&gt;. We will strive to contribute this experience if we are elected to serve on the JCP Executive Committee.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	We also submitted a brief &lt;a href="http://www.jcp.org/aboutJava/communityprocess/elections/2012/Liferay_JCP_Position_Statement.pdf"&gt;Position Statement&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	If you are a member of the JCP, please &lt;a href="https://eballot4.votenet.com/jcp"&gt;cast your vote for Liferay&lt;/a&gt;! The voting period is from &lt;strong&gt;October 16, 2012 - October 29 2012&lt;/strong&gt;.&amp;nbsp;We would treasure your vote and would be honored to serve.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Thank you,&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Neil&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-10-17T16:33:12Z</dc:date>
  </entry>
  <entry>
    <title>Announcement: Liferay Faces in Maven Central</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-in-maven-central" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-in-maven-central</id>
    <updated>2012-08-31T17:58:00Z</updated>
    <published>2012-08-31T13:17:31Z</published>
    <summary type="html">&lt;p&gt;
	The new location for downloading Liferay Faces artifacts (JARs, WARs, etc.) is &lt;a href="http://search.maven.org/#search%7Cga%7C1%7Ccom.liferay.faces"&gt;Maven Central&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
	As part of the &lt;a href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/new-liferay-faces-project-at-liferay-com"&gt;migration of Liferay Faces from portletfaces.org to liferay.com&lt;/a&gt;, the repository.portletfaces.org Nexus repository is being phased-out. Now that the artifacts are in Maven Central, developer should &lt;strong&gt;remove&lt;/strong&gt; the following repository from project pom.xml files:&lt;/p&gt;
&lt;p&gt;
	&lt;strike&gt;&amp;lt;repositories&amp;gt;&lt;/strike&gt;&lt;br&gt;
	&amp;nbsp;&amp;nbsp;&lt;strike&gt;&amp;lt;repository&amp;gt;&lt;/strike&gt;&lt;br&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;strike&gt;&amp;lt;id&amp;gt;maven2-repository-portletfaces.org&amp;lt;/id&amp;gt;&lt;/strike&gt;&lt;br&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;strike&gt;&amp;lt;url&amp;gt;&lt;strong&gt;http://repository.portletfaces.org/content/repositories/liferay-releases&lt;/strong&gt;&amp;lt;/url&amp;gt;&lt;/strike&gt;&lt;br&gt;
	&amp;nbsp;&amp;nbsp;&lt;strike&gt;&amp;lt;/repository&amp;gt;&lt;/strike&gt;&lt;br&gt;
	&lt;strike&gt;&amp;lt;/repositories&amp;gt;&lt;/strike&gt;&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-08-31T13:17:31Z</dc:date>
  </entry>
  <entry>
    <title>Announcement: Liferay Faces 3.1.0-ga1 Released</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-0-ga1-released" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-0-ga1-released</id>
    <updated>2013-01-16T19:45:58Z</updated>
    <published>2012-08-22T11:45:48Z</published>
    <summary type="html">&lt;p&gt;
	&lt;em&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/em&gt;: &lt;a href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-in-maven-central"&gt;Liferay Faces in Maven Central&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	On August 22, 2012 Liferay issued a &lt;a href="http://www.prweb.com/releases/liferay/faces-bridge/prweb9823705.htm"&gt;press release&lt;/a&gt; announcing the first General Availability (GA) release of &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/overview"&gt;Liferay Faces&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.1.0-ga1 &lt;/strong&gt;(JSF 2.0/2.1 + Liferay 6.1.x)
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.0.0-ga1&lt;/strong&gt; (JSF 2.0/2.1 + Liferay 6.0.x)
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 2.1.0-ga1&lt;/strong&gt; (JSF 1.2 + Liferay 6.1.x)
&lt;/ul&gt;
&lt;h3&gt;
	Project Links&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/secure/ReleaseNote.jspa?projectId=12081&amp;version=12321"&gt;Release Notes&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/documentation"&gt;Documentation&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/download"&gt;Downloads&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos"&gt;Demos&lt;/a&gt;
&lt;/ul&gt;
&lt;h3&gt;
	Version Scheme&lt;/h3&gt;
&lt;p&gt;
	For information on the Liferay Faces Version Scheme, refer to the &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+Faces+Version+Scheme"&gt;Liferay Faces Wiki article&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
	Release Highlights&lt;/h3&gt;
&lt;p&gt;
	We recently announced that &lt;a href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-bridge-certified-as-jsr-329-compliant"&gt;Liferay Faces Bridge Certified was certified as JSR 329 Compliant&lt;/a&gt;. As a result of this certification, we released a JSF 1.2 compatible version that that developers can use to migrate legacy portlets to Liferay Faces.&lt;/p&gt;
&lt;p&gt;
	Once again, thanks to everyone in the community that reported issues, contributed patches, and participated in the forums!&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-08-22T11:45:48Z</dc:date>
  </entry>
  <entry>
    <title>Notes no longer available in Mail.app with Mountain Lion</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/notes-no-longer-available-in-mail-app-with-mountain-lion" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/notes-no-longer-available-in-mail-app-with-mountain-lion</id>
    <updated>2012-08-15T22:31:56Z</updated>
    <published>2012-08-15T22:22:03Z</published>
    <summary type="html">&lt;p&gt;
	If you have used the &amp;quot;New Note&amp;quot; feature in Mail.app, then you may have noticed that the feature is gone in Mountain Lion. Although I was generally happy with the new Mountain Lion features, this completely disrupted my daily workflow process.&lt;/p&gt;
&lt;p&gt;
	I used the Notes feature to create pseudo &amp;quot;Tasks&amp;quot; as part of a GTD type of workflow. This allowed me to keep tasks and email messages in different folders. Even though the feature is now gone, I found that I am still able to do the same type of thing with draft email messages. For example:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Create a new email message
	&lt;li&gt;
		Leave the recipient list blank
	&lt;li&gt;
		Give it a subject like &amp;quot;Task: Do this and that&amp;quot;
	&lt;li&gt;
		Type in some instructions in the email body
	&lt;li&gt;
		Save the email message as a Draft
	&lt;li&gt;
		Move the message from the Draft folder to some other folder, like &amp;quot;Today&amp;quot;
&lt;/ul&gt;
&lt;p&gt;
	The only problem was that I wasn't able to edit the messages after I moved them out of drafts. As a workaround, it can still be edited by moving it temporarily back to drafts.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-08-15T22:22:03Z</dc:date>
  </entry>
  <entry>
    <title>Announcement: Liferay Faces Bridge Certified as JSR 329 Compliant</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-bridge-certified-as-jsr-329-compliant" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-bridge-certified-as-jsr-329-compliant</id>
    <updated>2012-08-09T14:41:33Z</updated>
    <published>2012-08-09T13:58:45Z</published>
    <summary type="html">&lt;p&gt;
	On behalf of Liferay, I'm pleased to announce that as of August 8, 2012,&amp;nbsp;&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/bridge"&gt;Liferay Faces Bridge&lt;/a&gt; (a sub-project of &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces"&gt;Liferay Faces&lt;/a&gt;) has been certified by Oracle as compliant with&amp;nbsp;&lt;a href="http://www.jcp.org/en/jsr/detail?id=329"&gt;JSR 329&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
	JSR 329 is the &amp;quot;Portlet 2.0 Bridge for JavaServer&amp;trade; Faces 1.2&amp;quot; specification by the JCP. Liferay Faces Bridge&amp;nbsp;&lt;a href="https://github.com/liferay/liferay-faces/tree/2.1.x"&gt;2.1.x&lt;/a&gt; has received the official certification (since it is designed for Portlet 2.0 and JSF 1.2). Although Liferay Faces Bridge&amp;nbsp;&lt;a href="https://github.com/liferay/liferay-faces"&gt;3.1.x&lt;/a&gt;&amp;nbsp;is designed for Portlet 2.0 and JSF 2.0, it also passes all of the tests in the &lt;a href="http://myfaces.apache.org/portlet-bridge/jsr329tck.html"&gt;JSR 329 Technology Compatibility Kit&lt;/a&gt; (TCK).&lt;/p&gt;
&lt;p&gt;
	I'd like to extend my personal thanks to Michael Freedman of Oracle -- as the Chairman of the JSR 329 Expert Group, he spent countless hours working on the specification and TCK. He is also a wonderful mentor and friend.&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-08-09T13:58:45Z</dc:date>
  </entry>
  <entry>
    <title>Announcement: Liferay Faces 3.1.0-RC2 Released</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-0-rc2-released" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-0-rc2-released</id>
    <updated>2012-07-17T14:55:23Z</updated>
    <published>2012-07-14T14:57:47Z</published>
    <summary type="html">&lt;p&gt;
	On behalf of Liferay, I'm pleased to announce the latest release of &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/overview"&gt;Liferay Faces&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.1.0-RC2 &lt;/strong&gt;(Compatible with Liferay 6.1.x)
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.0.0-RC2&lt;/strong&gt; (Compatible with Liferay 6.0.x)
&lt;/ul&gt;
&lt;h3&gt;
	Project Links&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/secure/ReleaseNote.jspa?projectId=12081&amp;version=11916"&gt;Release Notes&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/documentation"&gt;Documentation&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/download"&gt;Downloads&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos"&gt;Demos&lt;/a&gt;
&lt;/ul&gt;
&lt;h3&gt;
	RC2 Status&lt;/h3&gt;
&lt;p&gt;
	The release has been designated RC2 (instead of GA1) because there have been &lt;strong&gt;significant changes&lt;/strong&gt; since the release of RC1, and we wanted to be able to give the community time to kick the tires and provide feedback:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/browse/FACES-1307"&gt;FACES-1307&lt;/a&gt;: The new &lt;strong&gt;liferay-faces-bridge-api.jar&lt;/strong&gt; artifact has replaced portlet-bridge-api.jar from Apache MyFaces
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/browse/FACES-1349"&gt;FACES-1349&lt;/a&gt;:&amp;nbsp;The new &lt;strong&gt;liferay-faces-util.jar&lt;/strong&gt; artifact contains common classes/interfaces (see issue details for repackaging and renaming of classes)
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/browse/FACES-1286"&gt;FACES-1286&lt;/a&gt;: The &lt;strong&gt;Public Render Parameters IPC feature&lt;/strong&gt; has been modified in order to properly comply with the requirements of the JSR 329 Specification.
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/browse/FACES-1346"&gt;FACES-1346&lt;/a&gt;: The new test/bridge-tck/bridge-tck-runner project provides run the &lt;strong&gt;JSR 329 TCK&lt;/strong&gt;, and 100% of the TCK tests are passing in Liferay 6.1 and Pluto 2.0.3.
&lt;/ol&gt;
&lt;h3&gt;
	Release Highlights&lt;/h3&gt;
&lt;p&gt;
	We've been busy since the release of RC1 (about 45 days ago).&amp;nbsp;The&amp;nbsp;&lt;a href="http://issues.liferay.com/secure/ReleaseNote.jspa?projectId=12081&amp;version=11916"&gt;release notes&lt;/a&gt;&amp;nbsp;provide summary of over 100 resolved issues, and as shown in the chart below, we've really gotten ahead of the curve.&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.liferay.com/documents/11150/14857335/thirty-day-summary.png/c9ca2a9f-a483-44f3-9fd1-54990fe991a2" style="width: 391.0px;height: 369.0px;"&gt;&lt;/p&gt;
&lt;p&gt;
	Thanks to everyone in the community that reported issues, contributed patches, and participated in the forums!&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-07-14T14:57:47Z</dc:date>
  </entry>
  <entry>
    <title>Announcement: Liferay Faces 3.1.0-RC1 Released</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-0-rc1-released" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-3-1-0-rc1-released</id>
    <updated>2012-07-17T14:49:05Z</updated>
    <published>2012-06-01T22:30:10Z</published>
    <summary type="html">&lt;h3&gt;
	Announcement&lt;/h3&gt;
&lt;p&gt;
	On behalf of Liferay, I'm pleased to announce the latest release of &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/overview"&gt;Liferay Faces&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.1.0-RC1 &lt;/strong&gt;(Compatible with Liferay 6.1.x)
	&lt;li&gt;
		&lt;strong&gt;Liferay Faces 3.0.0-RC1&lt;/strong&gt; (Compatible with Liferay 6.0.x)
&lt;/ul&gt;
&lt;h3&gt;
	Project Links&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;a href="http://issues.liferay.com/secure/ReleaseNote.jspa?projectId=12081&amp;version=11913"&gt;Release Notes&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/documentation"&gt;Documentation&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/download"&gt;Downloads&lt;/a&gt;
	&lt;li&gt;
		&lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos"&gt;Demos&lt;/a&gt;
&lt;/ul&gt;
&lt;h3&gt;
	Release Highlights&lt;/h3&gt;
&lt;p&gt;
	This release contains quite a few bug fixes in the bridge, and several improvements in the demo portlets:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		The &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos#jsf2-portlet"&gt;jsf2-portlet&lt;/a&gt; now demonstrates the ability to upload multiple documents with the HTML5 &amp;quot;multiple&amp;quot; attribute and a fileUploadEvent attribute.
	&lt;li&gt;
		The &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos#icefaces3-portlet"&gt;icefaces3-portlet&lt;/a&gt; has been enhanced to use ace:dataTable and ace:notificationPanel
	&lt;li&gt;
		The &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos#icefaces3-compat-portlet"&gt;icefaces3-compat-portlet&lt;/a&gt; has been refactored to use&amp;nbsp;ice:dataTable and ice:panelPopup
	&lt;li&gt;
		The &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos#primefaces3-portlet"&gt;primefaces3-portlet&lt;/a&gt; has benefited from better integration with p:fileUpload
	&lt;li&gt;
		The &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/demos#richfaces4-portlet"&gt;richfaces4-portlet&lt;/a&gt; has been enhanced to use rich:fileUpload, rich:dataTable, and rich:popupPanel
&lt;/ul&gt;
&lt;p&gt;
	Many of the improvements are related to supporting file upload across the various component suites. Specifically, the fix for&amp;nbsp;&lt;a href="http://issues.liferay.com/browse/FACES-1241"&gt;FACES-1241&lt;/a&gt; provides enhancements to the bridge's UploadedFile interface and UploadedFileWrapper class. This in turn provided consistency across the demo portlets (each of them now has very similar code for handling file uploads).&lt;/p&gt;
&lt;h3&gt;
	Thank You&lt;/h3&gt;
&lt;p&gt;
	I wanted to extend my personal thanks to everyone in the community that reported issues and participated in the forums. Your help was invaluable!&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-06-01T22:30:10Z</dc:date>
  </entry>
  <entry>
    <title>JSF PhaseListener instances must be made thread-safe</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/jsf-phaselistener-instances-must-be-made-thread-safe" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/jsf-phaselistener-instances-must-be-made-thread-safe</id>
    <updated>2012-05-30T19:39:37Z</updated>
    <published>2012-05-30T16:33:27Z</published>
    <summary type="html">&lt;p&gt;  I recently performed a Google Search for &amp;quot;&lt;a
    href="https://www.google.com/search?aq=f&amp;amp;ie=UTF-8&amp;amp;q=phaselistener+not+thread+safe"&gt;phaselistener
    not thread safe&lt;/a&gt;&amp;quot; and realized that this issue is not widely
  published, so I'd like to take a moment to discuss it here.&lt;/p&gt;
&lt;p&gt;  Sooner or later, most JSF developers end up developing a &lt;a
  href="http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/javax/faces/event/PhaseListener.html"&gt;PhaseListener&lt;/a&gt;
  implementation like&amp;nbsp;&lt;a
  href="https://github.com/liferay/liferay-faces/blob/master/bridge-impl/src/main/java/com/liferay/faces/bridge/lifecycle/BridgeDebugPhaseListener.java"&gt;BridgeDebugPhaseListener.java&lt;/a&gt;
  found in &lt;a
    href="http://www.liferay.com/community/liferay-projects/liferay-faces/overview"&gt;Liferay
    Faces Bridge&lt;/a&gt;. One thing to remember though, is that
    &lt;strong&gt;PhaseListener instances are
  application-wide&amp;nbsp;Singletons&lt;/strong&gt; that are referenced by the
  JSF &lt;a
  href="http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/javax/faces/lifecycle/Lifecycle.html"&gt;Lifecycle&lt;/a&gt;,
  which itself is an application-wide &lt;a
  href="http://en.wikipedia.org/wiki/Singleton_pattern"&gt;Singleton&lt;/a&gt;.
  Since these instances are not created within the &lt;a
  href="http://portals.apache.org/pluto/portlet-2.0-apidocs/javax/portlet/PortletRequest.html"&gt;PortletRequest&lt;/a&gt;
  thread, they need to be made thread-safe.&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;First&lt;/strong&gt;, I recommend reading an external blog post
  section titled&amp;nbsp;&lt;a
    href="http://renaud.waldura.com/doc/java/final-keyword.shtml#immutable"&gt;Immutable Objects&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Second&lt;/strong&gt;, I think easiest way for me to explain what is
    &lt;span style="color: rgb(0,128,0);"&gt;OK&lt;/span&gt; and what is &lt;span
    style="color: rgb(255,0,0);"&gt;NOT OK&lt;/span&gt; is by showing some
  example code:&lt;/p&gt;
&lt;div style="background-color: rgb(239,239,239);"&gt;

  &lt;pre&gt;
	package foo;

import javax.faces.event.PhaseId;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseListener;

public class MyPhaseListener implements PhaseListener {

&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span
      style="color: rgb(0,128,0);"&gt;// Class-level immutable (final) variables are thread-safe since they are read-only
&amp;nbsp; &amp;nbsp; // and are initialized at about the same time as the constructor. The Java compiler
&amp;nbsp; &amp;nbsp; // will also&lt;/span&gt;&lt;span
      style="color: rgb(0,128,0);"&gt;&amp;nbsp;permit you to initialize final variables within the body of the constructor.
&lt;/span&gt;&amp;nbsp; &amp;nbsp; private final String classLevelImmutableVariable1 = &amp;quot;cannot-change-me-1&amp;quot;;
&amp;nbsp; &amp;nbsp; private final String classLevelImmutableVariable2; // initialized in constructor

&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span
      style="color: rgb(255,0,0);"&gt;// Class-level mutable (non-final) variables are NOT thread-safe. Don't use these
&amp;nbsp; &amp;nbsp; // without &lt;strong&gt;synchronization&lt;/strong&gt;!
&lt;/span&gt;&amp;nbsp; &amp;nbsp; private String classLevelMutableVariable = &amp;quot;can-change-me-but-dont-do-it!&amp;quot;;

&lt;span
      style="color: rgb(0,128,0);"&gt;&amp;nbsp; &amp;nbsp; // Static final constants (like loggers) are typically thread-safe.
&lt;/span&gt;&amp;nbsp; &amp;nbsp; private static final Logger logger = LoggerFactory.getLogger(MyPhaseListener.class);

&amp;nbsp; &amp;nbsp; /**
&amp;nbsp; &amp;nbsp; &amp;nbsp;* PhaseListener constructors execute when Mojarra/MyFaces initializes.
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&amp;nbsp; &amp;nbsp; public&amp;nbsp;MyPhaseListener() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span
      style="color: rgb(0,128,0);"&gt;//&amp;nbsp;It's OK to initialize&amp;nbsp;final class-level variables here.
&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.classLevelImmutableVariable2 = &amp;quot;cannot-change-me-2&amp;quot;;
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; public void afterPhase(PhaseEvent phaseEvent) {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span
      style="color: rgb(0,128,0);"&gt;// Accessing method parameters is thread-safe.
&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PhaseId phaseId = phaseEvent.getPhaseId();

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span
      style="color: rgb(0,128,0);"&gt;// Accessing FacesContext is thread-safe since it is a ThreadLocal singleton.
&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FacesContext facesContext = phaseEvent.getFacesContext();
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; public void beforePhase(PhaseEvent phaseEvent) {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span
      style="color: rgb(0,128,0);"&gt;// Creating local method variables&amp;nbsp;is thread-safe, since the JVM will create an
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // instance (copy) on the stack for each Thread.
&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String mutableLocalMethodVariable = &amp;quot;ok-to-change-me-in-the-scope-of-this-method&amp;quot;;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0,128,0);"&gt;// Writing to a logger is thread-safe, providing the underlying logger
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // implementation is thread-safe!
&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logger.debug(&amp;quot;inside beforePhase method&amp;quot;);
&amp;nbsp; &amp;nbsp; }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;
  &lt;strong&gt;Finally&lt;/strong&gt;, the&amp;nbsp;bottom line is that the
  &lt;strong&gt;afterPhase(PhaseEvent)&lt;/strong&gt; and
  &lt;strong&gt;beforePhase(PhaseEvent)&lt;/strong&gt; methods must not modify
  class-level mutable (non-final) variables, or any type of memory that
  is shared by other threads, unless the &lt;a
    href="http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html"&gt;methods
    are synchronized&lt;/a&gt; or &lt;a
    href="http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html"&gt;access
    to the shared data is synchronized&lt;/a&gt;. Having said that, relying on
  synchronization can sometimes cause bottlenecks in an application
  because it causes other threads to block.&lt;/p&gt;
&lt;p&gt;  &amp;nbsp;&lt;/p&gt;
&lt;p&gt;  &amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-05-30T16:33:27Z</dc:date>
  </entry>
  <entry>
    <title>Internationalizing JSF Portlets</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/internationalizing-jsf-portlets" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/internationalizing-jsf-portlets</id>
    <updated>2013-01-16T19:50:25Z</updated>
    <published>2012-05-10T13:40:57Z</published>
    <summary type="html">&lt;p&gt;
	Note: This blog post has been &lt;strong&gt;moved&lt;/strong&gt; to the &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Internationalizing+JSF+Portlets"&gt;Liferay Faces Wiki&lt;/a&gt;.&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-05-10T13:40:57Z</dc:date>
  </entry>
  <entry>
    <title>Migrating to Liferay Faces</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/migrating-to-liferay-faces" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/migrating-to-liferay-faces</id>
    <updated>2012-04-10T23:08:00Z</updated>
    <published>2012-04-10T23:06:27Z</published>
    <summary type="html">&lt;p&gt;  The &lt;a
    href="http://www.liferay.com/community/liferay-projects/liferay-faces/overview"&gt;Liferay
  Faces&lt;/a&gt; Reference Documentation has a new chapter titled
  &amp;quot;Migration Guide&amp;quot; that discusses migration issues that you
  may encounter when migrating from portletfaces.org projects to Liferay
  Faces. By way of preview, here are a list of topics discussed:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;   BridgeRequestAttributeListener&lt;/li&gt;
  &lt;li&gt;   Configuration Option Names&lt;/li&gt;
  &lt;li&gt;   File Upload&lt;/li&gt;
  &lt;li&gt;   Facelet Tag Library Namespaces&lt;/li&gt;
  &lt;li&gt;   GenericFacesPortlet&lt;/li&gt;
  &lt;li&gt;   LiferayFacesContext&lt;/li&gt;
  &lt;li&gt;   Logging&lt;/li&gt;
  &lt;li&gt;   Portlet Preferences&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;  For more information, you can download the latest version of the
  PDF from the following page:&lt;/p&gt;
&lt;p&gt;
  &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces/documentation"&gt;http://www.liferay.com/community/liferay-projects/liferay-faces/documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;  If anyone encounters additional migration issues, please comment
  below and we'll try to get the documentation updated accordingly.
  Thanks everyone!&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-04-10T23:06:27Z</dc:date>
  </entry>
  <entry>
    <title>New Liferay Faces project at liferay.com</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/new-liferay-faces-project-at-liferay-com" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/new-liferay-faces-project-at-liferay-com</id>
    <updated>2012-04-03T18:13:52Z</updated>
    <published>2012-04-03T10:20:50Z</published>
    <summary type="html">&lt;h2&gt;  Press Release&lt;/h2&gt;
&lt;p&gt;  On April 3, 2012 a &lt;a
    href="http://www.prweb.com/releases/liferay/portletfaces/prweb9361019.htm"&gt;press
  release&lt;/a&gt;&amp;nbsp;was issued announcing that Liferay will be assuming
  leadership for the portletfaces.org community. I'm very excited about
  this development and wanted to take a moment to provide some
  additional details.&lt;/p&gt;
&lt;h2&gt;  Background&lt;/h2&gt;
&lt;p&gt;  The portletfaces.org community was formed by Liferay Platinum
  Partner &lt;a href="http://www.tritonsvc.com"&gt;Triton Services, Inc.&lt;/a&gt;
  and Silver Partner &lt;a href="http://www.mimacom.com/"&gt;Mimacom AG&lt;/a&gt; in
  order to provide support for JSF 2 inside of Liferay Portal.&amp;nbsp;Here
  at Liferay, we have seen strong demand for JSF portlets from
  Liferay&amp;rsquo;s community and customers. Triton and Mimacom recently
  contributed the projects from portletfaces.org to liferay.com and
  Liferay has committed to moving the technology forward.&lt;/p&gt;
&lt;h2&gt;  Liferay Faces&lt;/h2&gt;
&lt;p&gt;
  &lt;img alt="Liferay Faces"
    src="http://www.liferay.com/image/image_gallery?uuid=b83f7c60-5fdd-426e-9ffd-e672debfb7f3&amp;amp;groupId=14&amp;amp;t=1333429869723"
  style="width: 140.0px;height: 144.0px;float: right;" /&gt;The
  portletfaces.org website is being transitioned to its new home at liferay.com:&lt;/p&gt;
&lt;p&gt;
  &lt;a href="http://www.liferay.com/community/liferay-projects/liferay-faces"&gt;http://www.liferay.com/community/liferay-projects/liferay-faces&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;  The projects at portletfaces.org have been repackaged under a new
  umbrella project called &lt;strong&gt;Liferay Faces&lt;/strong&gt; along
  with&amp;nbsp;some name changes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;   AlloyFaces -&amp;gt; &lt;a
      href="http://www.liferay.com/community/liferay-projects/liferay-faces/alloy"&gt;Liferay
      Faces Alloy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   PortletFaces Bridge -&amp;gt; &lt;a
      href="http://www.liferay.com/community/liferay-projects/liferay-faces/bridge"&gt;Liferay
      Faces Bridge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;   LiferayFaces -&amp;gt; &lt;a
      href="http://www.liferay.com/community/liferay-projects/liferay-faces/portal"&gt;Liferay
      Faces Portal&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;  Additionally, the java packaging namespace has been refactored:&amp;nbsp;org.portletfaces&amp;nbsp;-&amp;gt;&amp;nbsp;com.liferay&lt;/p&gt;
&lt;h2&gt;  Upcoming Release&lt;/h2&gt;
&lt;p&gt;  The first release of Liferay Faces is version 3.0.0-BETA1 and is
  scheduled for Friday April 6, 2012. The 3.0.x branch is designed to be
  used with Liferay 6.0.x based portals. After the release, work will
  begin on the 3.1.x branch which will target Liferay 6.1.x based portals.&lt;/p&gt;
&lt;p&gt;  In this first release, the Liferay Faces Alloy and Liferay Facs
  Portal projects have received some minor bug fixes, but Liferay Faces
  Bridge has undergone significant development since the last release of
  PortletFaces Bridge 2.0.2. Specifically, we've focussed on developing
  the remaining features of &lt;a
    href="http://www.jcp.org/en/jsr/detail?id=329"&gt;JSR 329&lt;/a&gt;&amp;nbsp;and
  have made great progress towards getting the bridge to pass all of the
  tests in the JSR 329 &lt;a
    href="http://myfaces.apache.org/portlet-bridge/jsr329tck.html"&gt;Test
    Compatibility Kit&lt;/a&gt; (TCK).&lt;/p&gt;
&lt;h2&gt;  Liferay IDE&lt;/h2&gt;
&lt;p&gt;  Features and support for developing portlets with Liferay Faces
  will be included in upcoming releases of &lt;a
    href="http://www.liferay.com/community/liferay-projects/liferay-ide"&gt;Liferay
  IDE&lt;/a&gt; and Liferay Developer Studio.&lt;/p&gt;
&lt;h2&gt;  Forums&lt;/h2&gt;
&lt;p&gt;  The forums at portletfaces.org were migrated on April 3, 2012 to
  their new home at liferay.com:&lt;/p&gt;
&lt;p&gt;
  &lt;a href="http://www.liferay.com/community/forums/-/message_boards/category/13289027"&gt;http://www.liferay.com/community/forums/-/message_boards/category/13289027&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;  If your account at www.portletfaces.org was created prior to
  January 19, 2012 had the same email address as your account at
  liferay.com then the posts you made at portletfaces.org should still
  be authored with your name. Otherwise the author will appear as
  &amp;quot;PortletFaces Community Member.&amp;quot; If you're waiting on an
  answer on a particular forum post, I recommend that you make a comment
  on that post in order to make sure you get email alerts. Also, I
  recommend subscribing to the Liferay Faces forum in general.&lt;/p&gt;
&lt;h2&gt;  JIRA&lt;/h2&gt;
&lt;p&gt;  The issues at jira.portletfaces.org will be consolidated into a
  single JIRA project called &lt;strong&gt;FACES&lt;/strong&gt; and will soon be
  migrated to their new home at liferay.com:&lt;/p&gt;
&lt;p&gt;
  &lt;a href="http://issues.liferay.com/browse/FACES"&gt;http://issues.liferay.com/browse/FACES&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;  If your account at jira.portletfaces.org had the same username as
  your account at issues.liferay.com then issues you created (or
  commented on) should continue to be authored with your name. If you
  didn't have an account at issues.liferay.com then a new account will
  automatically be created once the migration is complete. If that's the
  case, then you will probably have to use the &amp;quot;forgot my
  password&amp;quot; feature in order to setup your password in the new system.&lt;/p&gt;
&lt;h2&gt;  Twitter&lt;/h2&gt;
&lt;p&gt;  I renamed my @portletfaces account at twitter to &lt;a
  href="http://www.twitter.com/liferayfaces"&gt;@liferayfaces&lt;/a&gt;. If you
  were following @portletfaces then you will automatically be following @liferayfaces.&lt;/p&gt;
&lt;h2&gt;  Enterprise Subscription &amp;amp; Support&lt;/h2&gt;
&lt;p&gt;  As soon as Liferay Faces 3.0.0 and 3.1.0 reach their first
  production release, Liferay EE customers will enjoy support for
  Liferay Faces according to the Service Level Agreement (SLA)
  associated with Liferay Enterprise Subscription &amp;amp; Support (ESS).&lt;/p&gt;
&lt;h2&gt;  License Change&lt;/h2&gt;
&lt;p&gt;  The projects at portletfaces.org were released under the Apache 2
  license, but the Liferay Faces project will be released under the &lt;a
    href="http://www.gnu.org/licenses/lgpl-2.1.html"&gt;LGPL 2.1&lt;/a&gt;
  license which is already used by Liferay on other projects.&lt;/p&gt;
&lt;h2&gt;  Thank You&lt;/h2&gt;
&lt;p&gt;  I wanted to extend my personal thanks to my dear friends at Triton
  and Mimacom for making this contribution, and to Liferay for taking
  the lead moving forward. I also want to thank the faithful members of
  the portletfaces.org community for their support and kind words of encouragement.&lt;/p&gt;
&lt;p&gt;  &amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2012-04-03T10:20:50Z</dc:date>
  </entry>
  <entry>
    <title>Utilizing instance storage (ephemeral storage) with RHEL on Amazon EC2</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/utilizing-instance-storage-ephemeral-storage-with-rhel-on-amazon-ec2" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/utilizing-instance-storage-ephemeral-storage-with-rhel-on-amazon-ec2</id>
    <updated>2011-09-03T10:54:07Z</updated>
    <published>2011-09-02T22:59:43Z</published>
    <summary type="html">&lt;h2&gt;
	Introduction&lt;/h2&gt;
&lt;p&gt;
	I recently had the opportunity to launch an Amazon EC2 instance and setup Liferay &amp;amp; MySQL. There were a couple of hurdles that I had to overcome, so I thought I would share the solutions I came up with.&lt;/p&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;h2&gt;
		Storage: Ephemeral or EBS?&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
	When you launch an RHEL instance on EC2, the disk storage that is provided is a VERY SMALL (7 GB or less) root partition that is contained within the instance itself. This type of storage is called &lt;em&gt;ephemeral.&lt;/em&gt;&amp;nbsp;The benefit of ephemeral storage is that it doesn't cost any extra money. The drawback is that it can't participate in the EBS backup solution provided by Amazon -- you'll need to backup files across the network instead. Depending on the size of the instance, you will be given additional ephemeral storage, which is where you can potentially store data or install an app server for Liferay. The Amazon documentation indicates that this will be mounted automatically on /ephemeral0 but I found that this wasn't the case. You will need to use the "fdisk -l" command to find out the device name of the additional ephemeral storage. In my case, I found that the device was named&amp;nbsp;/dev/xvdj. However, there was no filesystem on it, and it wasn't mounted. So you'll need to execute commands like the following:&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;mkfs -t ext4 /dev/xvdj&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;mkdir /ephemeral0&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;echo "/dev/xvdj&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/ephemeral0&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;ext4&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;defaults&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;1 2" &amp;gt;&amp;gt; /etc/fstab&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;mount /ephemeral0&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	The alternative storage is called EBS. The benefit is that it can participate in the Amazon backup solution, but the drawback is that it costs extra money. If you want to use EBS instead of ephemeral, you can create EBS Volumes using the Amazon Management Console and then &lt;a href="http://yoodey.com/how-attach-and-mount-ebs-volume-ec2-instance-ubuntu-1010"&gt;attach them to your instance&lt;/a&gt;. Bear in mind that you'll still need to discover the device with "fdisk -l", put a filesystem on it, mount it, etc.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;h2&gt;
		Moving MySQL to the additional ephemeral storage&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
	In order to utilize the larger ephemeral storage for database files, I needed to move the MySQL data files from /var/lib/mysql to a filesystem mounted on /ephemeral0. I tried to follow the instructions in section 10.4.1 of the HREL documentation titled "&lt;a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-MySQL-Configuration_Examples.html"&gt;MySQL Changing Database Location&lt;/a&gt;" but&amp;nbsp;when I restarted mysqld via "service mysqld start" it reported FAILED, and the following was found in /var/log/mysqld.log:&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;em&gt;110902 11:35:42 mysqld_safe Starting mysqld daemon with databases from /opt/var/mysql&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;em&gt;110902 11:35:42 [Warning] Can't create test file /opt/var/mysql/domU-12-31-39-09-AE-12.lower-test&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;em&gt;110902 11:35:42 [Warning] Can't create test file /opt/var/mysql/domU-12-31-39-09-AE-12.lower-test&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;em&gt;/usr/libexec/mysqld: Can't change dir to '/opt/var/mysql/' (Errcode: 13)&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;em&gt;110902 11:35:42 [ERROR] Aborting&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	The irony here is that section 10.4.1 is meant to show you how to avoid this error. &amp;nbsp;So I had to find a different approach, and found inspiration in the following articles:&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;a href="http://uzyn.com/running-mysql-on-ec2-ephemeral-storage-while-maintaining-consistency"&gt;Running MySQL on EC2 ephemeral storage while maintaining consistency&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
		&lt;a href="http://aws.amazon.com/articles/1663"&gt;Running MySQL on Amazon EC2 with EBS&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
		&lt;a href="http://www.servercobra.com/building-a-web-server-on-amazons-ec2"&gt;Building a Web Server on Amazon's EC2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	The strategy I used was to copy the MySQL files to /ephemeral0, and then mount the ephemeral storage directory back to /var/lib/mysql&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;Step 1&lt;/strong&gt;: Stop the MySQL server and copy the data files over to /ephemeral0:&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# service mysqld stop&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# cd /var/lib&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# tar cf - mysql/ --selinux | (cd /ephemeral0/var/lib; tar xvfp -)&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;em&gt;NOTE: It's really important to keep the --selinux switch so that the SELinux context for each file will be saved in the tarball. Also, it's really important to keep the "p" switch upon extraction, so that file permissions will be preserved.&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;Step 2&lt;/strong&gt;: Determine the existing selinux settings and re-apply them on a similar var/lib folder structure on /ephemeral0:&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# ls -lZ / | grep var&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;em&gt;&lt;code&gt;drwxr-xr-x. root root system_u:object_r:var_t:s0 &amp;nbsp; &amp;nbsp; &amp;nbsp; var&lt;/code&gt;&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# chcon -u system_u -r object_r -t var_t /ephemeral0/var&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# ls -lZ /var | grep lib&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;drwxr-xr-x. root &amp;nbsp; root &amp;nbsp; system_u:object_r:var_lib_t:s0 &amp;nbsp; lib&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# chcon -u system_u -r object_r -t var_t /ephemeral0/var/lib&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# ls -lZ /var/lib | grep mysql&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;drwxr-xr-x. mysql &amp;nbsp; &amp;nbsp; mysql &amp;nbsp; &amp;nbsp;system_u:object_r:mysqld_db_t:s0 mysql&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;Step 3&lt;/strong&gt;: Re-create the /var/lib/mysql mount point and preserve ownership/group/selinux settings:&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# cd /var/lib&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# mv mysql mysql.orig&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# mkdir mysql&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# chown mysql mysql&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# chgrp mysql mysql&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# chcon -u system_u -r object_r -t mysqld_db_t mysql&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;Step 4&lt;/strong&gt;: Mount the directory that contains the MySQL data onto the /var/lib/mysql mount point and restart MySQL:&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# echo "/ephemeral0/var/lib/mysql /var/lib/mysql none bind bind" &amp;gt;&amp;gt; /etc/fstab&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# mount /var/lib/mysql&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;[root@server]# service mysqld start&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;h2&gt;
	Conclusion&lt;/h2&gt;
&lt;p&gt;
	The benefit of using this approach is that I didn't have to change any of the settings in the /etc/my.cnf configuration file. Also, I didn't have to fight the selinux security context problem. This approach can also be used for mounting other folders like /opt in order to utilize ephemeral storage.&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2011-09-02T22:59:43Z</dc:date>
  </entry>
  <entry>
    <title>Fixing SunCertPathBuilderException caused by Maven downloading from self-signed repository</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/fixing-suncertpathbuilderexception-caused-by-maven-downloading-from-self-signed-repository" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/fixing-suncertpathbuilderexception-caused-by-maven-downloading-from-self-signed-repository</id>
    <updated>2011-10-17T22:28:06Z</updated>
    <published>2011-08-11T17:47:43Z</published>
    <summary type="html">&lt;p&gt;
	If you have a Maven repository running under https with a self-signed certificate, then building a Maven project can report the following error:&lt;/p&gt;
&lt;p&gt;
	Error transferring file: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;/p&gt;
&lt;p&gt;
	There was an Oracle blog posted by&amp;nbsp;Andreas Sterbenz back on&amp;nbsp;Oct 09, 2006 that helped me diagnose the problem, but that blog is no longer available. Thankfully &lt;a href="http://dreamingthings.blogspot.com/2006/12/no-more-unable-to-find-valid.html"&gt;Andreas' blog was re-posted here&lt;/a&gt;. For additional information, I found &lt;a href="http://www.chrissearle.org/node/260"&gt;another blog post&lt;/a&gt; that was helpful.&lt;/p&gt;
&lt;p&gt;
	Anyways, I fixed this problem by downloading and compiling the source for &lt;a href="http://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java"&gt;InstallCert.java&lt;/a&gt; and running the following command:&lt;/p&gt;
&lt;p&gt;
	&lt;code&gt;java com.aw.ad.util.InstallCert myhostname.mydomain.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
	This generated a file named&amp;nbsp;&lt;strong&gt;jssecacerts&lt;/strong&gt; in the current directory.&lt;/p&gt;
&lt;p&gt;
	On Windows/Linux, this file needs to be copied to the JAVA_HOME/jre/lib/security/ directory.&lt;/p&gt;
&lt;p&gt;
	On Mac needs to be copied to the JAVA_HOME/lib/security/ directory.&lt;/p&gt;
&lt;p&gt;
	After I did this,&amp;nbsp;Maven was able to download the artifacts from the self-signed repository.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2011-08-11T17:47:43Z</dc:date>
  </entry>
  <entry>
    <title>Lightning fast portlet development with JRebel</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/lightning-fast-portlet-development-with-jrebel" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/lightning-fast-portlet-development-with-jrebel</id>
    <updated>2011-07-22T21:54:48Z</updated>
    <published>2011-07-22T21:11:27Z</published>
    <summary type="html">&lt;p&gt;
	Back in April of this year I had the opportunity to speak at the &lt;a href="http://www.con-fess.com/"&gt;CON-FESS&lt;/a&gt; conference in Vienna, Austria. One of the exhibitors there was &lt;a href="http://www.zeroturnaround.com"&gt;zeroturnaround.com&lt;/a&gt; and I had the privilege of sitting next to founder &lt;a href="http://www.zeroturnaround.com/about-us/"&gt;Jevgeni Kabanov&lt;/a&gt;&amp;nbsp;over dinner one night.&lt;/p&gt;
&lt;p&gt;
	Jevgeni described the benefits of &lt;a href="http://www.zeroturnaround.com/jrebel/"&gt;JRebel&lt;/a&gt;, a&amp;nbsp;JVM-plugin that makes it possible for Java developers to instantly see any code change made to an app without redeploying. Needless to say, redeploying WARs is part of the very fabric of a Liferay portlet developer's life, so I knew that I had to give this product a try with my next &lt;a href="http://www.icefaces.org"&gt;ICEFaces 2&lt;/a&gt; portlet with &lt;a href="http://www.portletfaces.org/projects/portletfaces-bridge"&gt;PortletFaces Bridge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
	and &lt;strong&gt;to my utter amazement... IT WORKED!!!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	Simply put, &lt;strong&gt;this product is a MUST HAVE for Liferay portlet developers&lt;/strong&gt;. I'm hooked! Over the past 6 years of portlet development, this product could have saved me COUNTLESS hours of development time waiting for redeploys.&lt;/p&gt;
&lt;p&gt;
	The &lt;a href="http://www.zeroturnaround.com/jrebel/documentation/"&gt;JRebel documentation&lt;/a&gt; is quite good, but here are some quick instructions for how to get started with JRebel and the Liferay+Tomcat bundle:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
		&lt;a href="http://www.zeroturnaround.com/jrebel/current/"&gt;Download JRebel&lt;/a&gt; (30 day free trial)&lt;/li&gt;
	&lt;li&gt;
		Install JRebel to it's default location. For example, on the Mac: /Applications/ZeroTurnaround/JRebel&lt;/li&gt;
	&lt;li&gt;
		Set the REBEL_HOME environment variable. On the Mac, I find it's best to do this inside the&amp;nbsp;$HOME/.MacOSX/environment.plist file:
		&lt;pre&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&amp;lt;plist version="1.0"&amp;gt; &amp;lt;dict&amp;gt;
&amp;lt;key&amp;gt;REBEL_HOME&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;/Applications/ZeroTurnaround/JRebel&amp;lt;/string&amp;gt;
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;&lt;/pre&gt;
	&lt;/li&gt;
	&lt;li&gt;
		On Mac, add the following to the LIFERAY_HOME/tomcat/bin/setenv.sh script:
		&lt;pre&gt;
-javaagent:$REBEL_HOME/jrebel.jar&lt;/pre&gt;
	&lt;/li&gt;
	&lt;li&gt;
		On Windows, add the following to the LIFERAY_HOME/tomcat/bin/setenv.bat file:
		&lt;pre&gt;
-javaagent:%REBEL_HOME%\jrebel.jar&lt;/pre&gt;
	&lt;/li&gt;
	&lt;li&gt;
		Create a &lt;a href="http://www.zeroturnaround.com/reference-manual/app.html#app-3.1"&gt;rebel.xml&lt;/a&gt; file that will be deployed in the runtime classpath of the WAR:Note that if you install the JRebel plugin for &lt;a href="http://www.zeroturnaround.com/reference-manual/ide.html#ide-2.2"&gt;Eclipse&lt;/a&gt;, &lt;a href="http://www.zeroturnaround.com/reference-manual/app.html#app-3.3"&gt;IntelliJ 8/9&lt;/a&gt;, &lt;a href="http://www.zeroturnaround.com/reference-manual/app.html#app-3.4"&gt;IntelliJ X&lt;/a&gt;, or &lt;a href="http://www.zeroturnaround.com/reference-manual/ide.html#ide-2.5"&gt;NetBeans&lt;/a&gt;) you can right click on the project and have the IDE generate the file. You can also generate the rebel.xml file with a &lt;a href="http://www.zeroturnaround.com/reference-manual/app.html#app-3.6"&gt;Maven&lt;/a&gt; goal.
		&lt;ul&gt;
			&lt;li&gt;
				&lt;strong&gt;Maven&lt;/strong&gt;: src/main/resources/rebel.xml&lt;/li&gt;
			&lt;li&gt;
				&lt;strong&gt;Liferay Plugins SDK&lt;/strong&gt;: docroot/WEB-INF/src/rebel.xml&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
		Start Tomcat with the liferay/tomcat/bin/startup.sh script (startup.bat on Windows)&lt;/li&gt;
	&lt;li&gt;
		Deploy the WAR to the Liferay /deploy folder&lt;/li&gt;
	&lt;li&gt;
		Make some Java code changes to your app and click Save in your IDE&lt;/li&gt;
	&lt;li&gt;
		Reload your browser, and voila! Instant changes! No redeploy!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2011-07-22T21:11:27Z</dc:date>
  </entry>
  <entry>
    <title>Working with JSF's &lt;f:convertDateTime /&gt; and java.util.Date</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/working-with-jsf-s-&lt;f:convertdatetime-&gt;-and-java-util-date" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/working-with-jsf-s-&lt;f:convertdatetime-&gt;-and-java-util-date</id>
    <updated>2010-07-30T18:00:04Z</updated>
    <published>2010-07-30T16:38:25Z</published>
    <summary type="html">&lt;p&gt;During a recent class I taught on ICEfaces, one of my students asked me why the &lt;ice:selectinputdate&gt;&lt;/ice:selectinputdate&gt; calendar was often one day off from what got posted back to the model managed-bean setter. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;For example&lt;/strong&gt;: &lt;br /&gt; &lt;code&gt;&lt;!-- Facelets XHTML markup: --&gt;// Facelets XHTML Markup:&lt;br /&gt;&amp;lt;ice:selectInputDate value=&amp;quot;#{modelManagedBean.dateOfBirth}&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;f:convertDateTime pattern=&amp;quot;MM/dd/yyyy&amp;quot; /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&amp;lt;/ice:selectInputDate&amp;gt;&lt;br type="_moz" /&gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;// Java Code&lt;br /&gt;import java.util.Date; &lt;br /&gt;&lt;/code&gt;&lt;code&gt; public class ModelManagedBean {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private Date dateOfBirth;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Date getDateOfBirth()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return dateOfBirth;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Date setDateOfBirth(Date dateOfBirth)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SimpleDateFormat dateFormat = new SimpleDateFormat(&amp;quot;MM/dd/yyyy hh:mm z&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// The value printed here during postback was often wrong by 1 day&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;dateOfBirth=&amp;quot; + dateFormat.format(dateOfBirth));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.dateOfBirth = dateOfBirth;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;} &lt;/code&gt; &lt;br /&gt; &lt;br /&gt;Basically, the JSF&amp;nbsp;&lt;a href="https://javaserverfaces.dev.java.net/nonav/docs/2.0/javadocs/javax/faces/convert/DateTimeConverter.html"&gt;DateTimeConverter Javadoc&lt;/a&gt; states that if the timeZone attribute is not specified, then the default is GMT. But when you create an instance of java.text.SimpleDateFormat, the default TimeZone is equal to TimeZone.getDefault() which (for me) was EST.  So the solution I explained to my students was to make sure we were comparing apples-to-apples the whole way through, by using GMT for the SimpleDateFormat printing, like this: &lt;br /&gt;&lt;br /&gt; &lt;code&gt;dateFormat.setTimeZone(TimeZone.getTimeZone(&amp;quot;GMT&amp;quot;)); &lt;br /&gt;&lt;/code&gt; &lt;br /&gt; And of course, I think it's the recommended practice to run your application server JVM in GMT. That would eliminate the problem entirely. But when you're using Eclipse and Tomcat for development, that's typically not the case.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2010-07-30T16:38:25Z</dc:date>
  </entry>
  <entry>
    <title>JSF 2.0 Complete Reference, with JSF Portlet Appendix</title>
    <link rel="alternate" href="http://www.liferay.com/web/neil.griffin/blog/-/blogs/jsf-2-0-complete-reference-with-jsf-portlet-appendix" />
    <author>
      <name>Neil Griffin</name>
    </author>
    <id>http://www.liferay.com/web/neil.griffin/blog/-/blogs/jsf-2-0-complete-reference-with-jsf-portlet-appendix</id>
    <updated>2010-07-30T18:47:55Z</updated>
    <published>2010-02-03T10:43:46Z</published>
    <summary type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td&gt;&lt;a href="http://www.amazon.com/JavaServer-Faces-2-0-Complete-Reference/dp/0071625097/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1265194167&amp;amp;sr=8-2"&gt;&lt;img width="200" alt="JSF 2.0 Complete Reference with JSF Portlet Appendix" src="http://jsfcompref.appspot.com/faces/javax.faces.resource/jsfcompref-cover-front.jpg?ln=style" /&gt;&lt;/a&gt;&lt;/td&gt;             &lt;td&gt;&lt;p&gt;I'm pleased to announce the new &lt;a href="http://www.amazon.com/JavaServer-Faces-2-0-Complete-Reference/dp/0071625097/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1265194167&amp;amp;sr=8-2"&gt;JSF 2.0 Complete Reference&lt;/a&gt; book by Ed Burns and Chris Schalk, published by McGraw-Hill. During the planning stages, Ed asked me to be a contributing author and help bring the first edition of the book up-to-date with JSF 2.0, and also to write a&amp;nbsp;&lt;strong&gt;JSF Portlet Appendix&lt;/strong&gt;.&lt;/p&gt;             &lt;p&gt;As listed in the Table of Contents, Appendix A discusses the following Topics:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Overview of Portlet 1.0 and 2.0&lt;ul&gt;&lt;li&gt;Portlet Lifecycle&lt;/li&gt;&lt;li&gt;Portlet Modes&lt;/li&gt;&lt;li&gt;Portlet Window States&lt;/li&gt;&lt;li&gt;Portlet Preferences&lt;/li&gt;&lt;li&gt;Inter-Portlet Communication&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;JSF Portlet Development&lt;ul&gt;&lt;li&gt;JSF Portlet Bridges&lt;/li&gt;&lt;li&gt;JSF Portlet View Handlers&lt;/li&gt;&lt;li&gt;JSF ExernalContext and the Portlet API&lt;/li&gt;&lt;li&gt;JSF and Portlet Preferences&lt;/li&gt;&lt;li&gt;JSF and Inter-Portlet Communication&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;ICEfaces Portlet Development&lt;ul&gt;&lt;li&gt;ICEfaces Ajax with Partial Submit&lt;/li&gt;&lt;li&gt;ICEfaces Direct-to-DOM RenderKit&lt;/li&gt;&lt;li&gt;The ice:portlet Tag&lt;/li&gt;&lt;li&gt;ICEfaces 1.x Portlet Bridge&lt;/li&gt;&lt;li&gt;ICEfaces 1.x D2DFaceletViewHandler&lt;/li&gt;&lt;li&gt;ICEfaces 1.x and Portlet Window States&lt;/li&gt;&lt;li&gt;ICEfaces Portlets and Concurrent DOM Views&lt;/li&gt;&lt;li&gt;ICEfaces 1.x Extended Request Scope&lt;/li&gt;&lt;li&gt;ICEfaces Ajax Push and Inter-Portlet Communication&lt;/li&gt;&lt;li&gt;ICEfaces Themes and Portal Themes&lt;/li&gt;&lt;li&gt;ICEfaces Themes and Liferay Themes&lt;/li&gt;&lt;li&gt;ICEfaces Ajax Bridge and Liferay Portal&lt;/li&gt;&lt;li&gt;ICEfaces Portlets and Liferay Request Attributes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;PortletFaces&lt;ul&gt;&lt;li&gt;Downloading PortletFaces&lt;/li&gt;&lt;li&gt;PortletFacesContext&lt;/li&gt;&lt;li&gt;PortletFaces Tags&lt;/li&gt;&lt;li&gt;PortletFaces and Portlet Preferences&lt;/li&gt;&lt;li&gt;PortletFaces and Expression Language Additions&lt;/li&gt;&lt;li&gt;PortletFaces and Localization&lt;/li&gt;&lt;li&gt;Liferay Language Portlet Integration&lt;/li&gt;&lt;li&gt;Improved Integration Between Liferay and ICEfaces 1.x&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;             &lt;p&gt;This week (Feb 2nd to Feb 5th) Ed Burns &amp;amp; Chris Schalk will be helping to &lt;a href="http://www.coderanch.com/t/481095/JSF/java/Welcome-Ed-Burns-Chris-Schalk"&gt;answer questions about the new book at JavaRanch.&lt;/a&gt; In addition, JavaRanch will be giving away a free copy of the book.&lt;/p&gt;&lt;p&gt;Finally I'd like to express my gratitude to &lt;a href="http://www.liferay.com"&gt;Liferay&lt;/a&gt;, &lt;a href="http://www.icesoft.com"&gt;ICEsoft&lt;/a&gt;, &lt;a href="http://www.mimacom.ch"&gt;Mimacom&lt;/a&gt;, and &lt;a href="http://www.tritonsvc.com"&gt;Triton&lt;/a&gt; for their generous support in making the JSF Portlet Appendix&amp;nbsp;possible.&lt;/p&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt;</summary>
    <dc:creator>Neil Griffin</dc:creator>
    <dc:date>2010-02-03T10:43:46Z</dc:date>
  </entry>
</feed>

