<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Function1</title>
	<atom:link href="http://www.function1.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.function1.com</link>
	<description>Discussing all things portal, WebCenter Interaction, WebCenter Suite, Sharepoint, and related technologies.</description>
	<lastBuildDate>Thu, 11 Mar 2010 20:25:23 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>&#8220;Just When I Thought I Was Out, They Pull Me Back In&#8221;: A Belated Welcome To Dave Paroulek</title>
		<link>http://www.function1.com/2010/03/just-when-i-thought-i-was-out-they-pull-me-back-in-a-belated-welcome-to-dave-paroulek/</link>
		<comments>http://www.function1.com/2010/03/just-when-i-thought-i-was-out-they-pull-me-back-in-a-belated-welcome-to-dave-paroulek/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 18:42:51 +0000</pubDate>
		<dc:creator>Brian Hak</dc:creator>
				<category><![CDATA[Function1]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=747</guid>
		<description><![CDATA[
Look, I think we can all agree that The Godfather III sucked, and was a black mark on an otherwise amazing trilogy.  The one (and probably only) highlight of the movie was Pacino giving us the sound-bite, &#8220;Just when I thought I was out, The pull me back in!&#8221;.  And so we welcome [...]]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/242H7F8DKHA&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/242H7F8DKHA&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Look, I think we can all agree that The Godfather III sucked, and was a black mark on an otherwise amazing trilogy.  The one (and probably only) highlight of the movie was Pacino giving us the sound-bite, &#8220;Just when I thought I was out, The pull me back in!&#8221;.  And so we welcome <a href="http://www.function1.com/2010/02/everything-maven-part-1-is-it-worth-the-effort/">Dave Paroulek</a> to the Function1 team.  </p>
<p>As you may or may not know, the WCI professional services world isn&#8217;t all that big.  Your options for finding quality consultants are pretty much either: Oracle (for an un-godly hourly tab), us, or a couple of <a href="http://blog.integryst.com/webcenter-interaction/2010/02/06/wall-of-shame-rant-beware-shady-wci-consultant-resellers/">other firms</a> with WCI expertise.  The small resource pool of qualified WCI consultants means that when we&#8217;re looking to bring new folks on board, we start by talking to people we&#8217;ve worked with in the past (usually at Plumtree/BEA/Oracle).  These folks are a know quantity, and we know they&#8217;ll represent Function1 well and make our customers happy.  Such is the case with Dave.  Dave is another long-time Plumtree->BEA->Oracle guy who took a little different career path than the rest of the Plumtree alumni at Function1.  He put his time in working for Plumtree Public Sector professional services, and then moved onto the BEA Services Engineering team.  In this capacity, Dave was focused on designing, developing, and delivering WCI add-on software directly to customers.  But his development experience doesn&#8217;t stop there.  About a year and a half or so ago, Dave left the mothership and took a full-time gig doing software development (specifically, playing around with <a href="http://code.google.com/webtoolkit/">GWT</a>).</p>
<p>And now he&#8217;s back in the fold.  <a href="http://www.metacafe.com/watch/2780329/absence_makes_the_heart_grow_fonder_the_is_it_true_series/">Absence makes the heart grow fonder I suppose</a>, and when we talked to Dave about coming on board at Function1, he was all about it.  Dave comes to Function1 helping us codify our software development practices and expertise, and continue on our quest to <a href="http://www.youtube.com/watch?v=ASguOiaEvaQ"><del datetime="2010-03-05T00:55:43+00:00">take over the world</del></a>, err, provide world class services and software to customers everywhere.  We&#8217;re tickled pink to have Dave with us:  be on the lookout for more <a href="http://www.function1.com/2010/02/everything-maven-part-1-is-it-worth-the-effort/">kick-ass blog posts</a> on software development tips and best practices from him soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/03/just-when-i-thought-i-was-out-they-pull-me-back-in-a-belated-welcome-to-dave-paroulek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Real World Example of PT Tags</title>
		<link>http://www.function1.com/2010/03/a-real-world-example-of-pt-tags/</link>
		<comments>http://www.function1.com/2010/03/a-real-world-example-of-pt-tags/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 21:00:54 +0000</pubDate>
		<dc:creator>jeremy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Portal]]></category>
		<category><![CDATA[Aqualogic]]></category>
		<category><![CDATA[communityactionsdata]]></category>
		<category><![CDATA[mandtabcommsdata]]></category>
		<category><![CDATA[mycommunitiesdata]]></category>
		<category><![CDATA[PT Tags]]></category>
		<category><![CDATA[pt.data]]></category>
		<category><![CDATA[wci]]></category>
		<category><![CDATA[WebCenter Interaction]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=718</guid>
		<description><![CDATA[If Aqualogic PT Tags were a character on MTVs Real World, it would surely be the difficult to understand, moody, and unpredictable one. Part of the misunderstanding comes from the cryptic tag library documentation and general lack of real world examples.
PT Tags give you the ability to use out-of-the-box coding logic within simple HTML pages. With a little [...]]]></description>
			<content:encoded><![CDATA[<p>If Aqualogic <a title="PT Tag Reference Guide" href="http://download.oracle.com/docs/cd/E13158_01/alui/wci/docs103/devguide/apidocs/tagdocs/index.html">PT Tags</a> were a character on MTVs Real World, it would surely be the difficult to understand, moody, and unpredictable one. Part of the misunderstanding comes from the cryptic <a href="http://download.oracle.com/docs/cd/E13158_01/alui/wci/docs103/devguide/apidocs/tagdocs/index.html">tag library documentation</a> and general lack of real world examples.</p>
<p>PT Tags give you the ability to use out-of-the-box coding logic within simple HTML pages. With a little patience and a slightly different way of thinking about logic flow, PT Tags can be an inexpensive answer to your UI problem.</p>
<p>Function1 has been &#8220;roomies&#8221; with PT Tags for quite some time, and we love our often confusing friend. To help educate our readers on PT Tags, here&#8217;s an example of solving a joined communities tag problem for portal navigation.</p>
<p>The &lt;pt:ptdata.mycommunitiesdata/&gt; tag is a useful array to get all the communities for your portal installation. However the tag includes both joined and mandatory communities for a user. Recently, a customer asked us to remove mandatory and mandatory with tab communities so the navigation could be seperated. How? we thought.</p>
<p>The solution is to use a different list of data from &lt;pt:data.mandtabcommsdata /&gt;. This tag contains an array of mandatory with tab communities. Our thought process was to loop through the communities data and compare it to a continuous loop of mandatory tab data. Whenever a link was found that did not have a matching mandatory link, we printed it as a joined community.</p>
<div style="font-size: 11px">&lt;pt:core.comment&gt;&lt;!&#8211; ##### Data used to determine correct tags ##### &#8211;&gt;&lt;/pt:core.comment&gt;<br />
&lt;pt:ptdata.mycommunitiesdata pt:id=&#8221;commLinks&#8221; /&gt;<br />
&lt;pt:ptdata.mandtabcommsdata pt:id=&#8221;mandComms&#8221; /&gt;<br />
&lt;pt:ptdata.communityactionsdata pt:id=&#8221;commActionLinks&#8221; /&gt;<br />
&lt;pt:core.comment&gt;&lt;!&#8211; ################################################&#8211;&gt;&lt;/pt:core.comment&gt;<br />
&lt;!&#8211; loop through all the community data which includes both joined and mandatory communities &#8211;&gt;<br />
&lt;pt:logic.foreach pt:data=&#8221;commLinks&#8221; pt:var=&#8221;currComm&#8221;&gt;<br />
&lt;pt:logic.variable pt:key=&#8221;isMandatory&#8221; pt:value=&#8221;0&#8243;/&gt;<br />
&lt;!&#8211; loop through all mandatory with tab communities and compare against the current joined community &#8211;&gt;<br />
&lt;pt:logic.foreach pt:data=&#8221;mandComms&#8221; pt:var=&#8221;currMandComm&#8221;&gt;<br />
&lt;pt:logic.intexpr pt:expr=&#8221;($isMandatory) == 0&#8243; pt:key=&#8221;boolJoinedCheck&#8221;/&gt;<br />
&lt;pt:logic.if pt:expr=&#8221;$boolJoinedCheck&#8221;&gt;<br />
&lt;pt:logic.iftrue&gt;<br />
&lt;pt:logic.intexpr pt:expr=&#8221;($currComm.objid) == ($currMandComm.objid)&#8221; pt:key=&#8221;boolMandatoryCheck&#8221;/&gt;<br />
&lt;pt:logic.if pt:expr=&#8221;$boolMandatoryCheck&#8221;&gt;<br />
&lt;pt:logic.iftrue&gt;<br />
&lt;pt:logic.variable pt:key=&#8221;isMandatory&#8221; pt:value=&#8221;1&#8243;/&gt;<br />
&lt;/pt:logic.iftrue&gt;<br />
&lt;/pt:logic.if&gt;<br />
&lt;/pt:logic.iftrue&gt;<br />
&lt;/pt:logic.if&gt;<br />
&lt;/pt:logic.foreach&gt;<br />
&lt;!&#8211; print only the joined communities &#8211;&gt;<br />
&lt;pt:logic.intexpr pt:expr=&#8221;($isMandatory) == 0&#8243; pt:key=&#8221;boolJoinedCheck&#8221;/&gt;<br />
&lt;pt:logic.if pt:expr=&#8221;$boolJoinedCheck&#8221;&gt;<br />
&lt;pt:logic.iftrue&gt;<br />
&lt;!&#8211; TO CHANGE JOINED LINKS STYLE ADD A ATTRIBUTE TO THIS LINE &#8211;&gt;<br />
&lt;!&#8211; _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ &#8211;&gt;<br />
&lt;pt:core.html pt:tag=&#8221;a&#8221; href=&#8221;$currComm.url&#8221;&gt;&lt;pt:logic.value pt:value=&#8221;$currComm.title&#8221;/&gt;&lt;/pt:core.html&gt;<br />
&lt;!&#8211; _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ &#8211;&gt;<br />
&lt;/pt:logic.iftrue&gt;<br />
&lt;/pt:logic.if&gt;<br />
&lt;/pt:logic.foreach&gt;</div>
<p> </p>
<p>Those mandatory tab communities might still be needed elsewhere. The following logic first checks if there are any mandatory communities, then loops through all communities and prints a nice link. You can include any css on these links simply by adding the class attribute to the &lt;pt:core.html/&gt; tag.</p>
<div style="font-size: 11px">&lt;pt:logic.existexpr pt:data=&#8221;mandComms&#8221; pt:key=&#8221;hasMandLinks&#8221;/&gt;<br />
&lt;pt:logic.if pt:expr=&#8221;$hasMandLinks&#8221;&gt;<br />
&lt;pt:logic.iftrue&gt;&lt;pt:ptdata.mandatorylinknamedata pt:key=&#8221;mandLinksTabName&#8221; /&gt;<br />
&lt;pt:logic.foreach pt:data=&#8221;mandComms&#8221; pt:var=&#8221;link&#8221;&gt;<br />
&lt;!&#8211; TO CHANGE MANDATORY LINKS STYLE ADD A ATTRIBUTE TO THIS LINE &#8211;&gt;<br />
&lt;!&#8211; _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ &#8211;&gt;<br />
&lt;pt:core.html pt:tag=&#8221;a&#8221; href=&#8221;$link.url&#8221;&gt;&lt;pt:logic.value pt:value=&#8221;$link.title&#8221; /&gt;&lt;/pt:core.html&gt;<br />
&lt;!&#8211; _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ &#8211;&gt;<br />
&lt;/pt:logic.foreach&gt;&lt;/pt:logic.iftrue&gt;<br />
&lt;/pt:logic.if&gt;</div>
<div style="font-size: 11px"> </div>
<p>Finally, administrators and community managers might need to edit their communities just like the out-of-the-box navigation. The following logic will print any additional buttons such as &#8220;manage communities&#8221;.</p>
<div style="font-size: 11px">&lt;pt:core.comment&gt;&lt;!&#8211; Print all the community actions buttons underneath the mandatory links &#8211;&gt;&lt;/pt:core.comment&gt;<br />
&lt;pt:logic.existexpr pt:data=&#8221;commActionLinks&#8221; pt:key=&#8221;hasCommActionLinks&#8221;/&gt;<br />
&lt;pt:logic.if pt:expr=&#8221;$hasCommActionLinks&#8221;&gt;<br />
&lt;pt:logic.iftrue&gt;<br />
&lt;pt:ptdata.joincommunitiesdata pt:id=&#8221;commActionsToDisplay&#8221; /&gt;&lt;pt:logic.foreach pt:data=&#8221;commActionsToDisplay&#8221; pt:var=&#8221;link&#8221;&gt;<br />
&lt;!&#8211; TO CHANGE ACTION LINKS STYLE ADD A ATTRIBUTE TO THIS LINE &#8211;&gt;<br />
&lt;!&#8211; _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ &#8211;&gt;<br />
&lt;pt:core.html pt:tag=&#8221;a&#8221; href=&#8221;$link.url&#8221;&gt;Manage my Communities&lt;/pt:core.html&gt;<br />
&lt;!&#8211; _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ &#8211;&gt;&lt;/pt:logic.foreach&gt;&lt;/pt:logic.iftrue&gt;<br />
&lt;/pt:logic.if&gt;</div>
<p><strong><a href="http://www.function1.com/?attachment_id=734">DOWNLOAD THE FULL CODE HERE</a></strong></p>
<p>We&#8217;ve noticed that we spend so much time with Aqualogic that we think <a title="PT Tag Reference Guide" href="http://download.oracle.com/docs/cd/E13158_01/alui/wci/docs103/devguide/apidocs/tagdocs/index.html">PT Tags</a> is a person. Since it doesn&#8217;t really have a face, we&#8217;ve decided it would probably look a lot like Puck from MTV&#8217;s Real World.</p>
<p style="text-align: center"><a href="http://www.function1.com/wp-content/uploads/2011/03/E_Puck_1361.jpg"><img class="size-full wp-image-720 alignnone" src="http://www.function1.com/wp-content/uploads/2011/03/E_Puck_1361.jpg" alt="" width="136" height="136" /></a></p>
<p style="text-align: center"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/03/a-real-world-example-of-pt-tags/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Everything Maven Part 1 &#8211; Is it Worth the Effort?</title>
		<link>http://www.function1.com/2010/02/everything-maven-part-1-is-it-worth-the-effort/</link>
		<comments>http://www.function1.com/2010/02/everything-maven-part-1-is-it-worth-the-effort/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 21:09:06 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Cool Tools]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[F1 Product]]></category>
		<category><![CDATA[Products]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=673</guid>
		<description><![CDATA[Each time you write a new Java portlet you may have noticed that there is definitely a set of common steps that need to be completed. For example, even though the functionality of portlets may be completely different, you can always be sure that you&#8217;ll have to do things like setting up a classpath, configuring [...]]]></description>
			<content:encoded><![CDATA[<p>Each time you write a new Java portlet you may have noticed that there is definitely a set of common steps that need to be completed. For example, even though the functionality of portlets may be completely different, you can always be sure that you&#8217;ll have to do things like setting up a classpath, configuring an IDE, hunting around for third party dependencies, testing and debugging, deploying your code to a server, etc. As you may know, there are several software development tools available that claim to help reduce the amount of these tedious &#8220;housekeeping&#8221; tasks. These types of tools are generally referred to as &#8220;Build Systems&#8221;. And the number one Google result for &#8220;Build System&#8221; at the time of this writing is a solution called <a href="http://maven.apache.org/what-is-maven.html">&#8220;Maven&#8221;</a>.</p>
<p>If you peruse maven articles out in the blog-o-sphere, this is the message you&#8217;ll hear: </p>
<blockquote><p>Using Maven will make you a better developer. Using Maven will make your organization more productive. Maven will solve your integration issues. Maven encourages unit testing. Maven will enforce <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a> best practices and <a href="http://en.wikipedia.org/wiki/Convention_over_configuration">Convention over Configuration</a>. Maven will save the rainforest and will give you thick, shiny, lustrous hair. Marcia, Marcia, Marcia! &#8230; Maven, Maven, Maven!</p></blockquote>
<p>You (or your software dev team) might have already written quite a bit of java web apps and have managed to get by pretty well without Maven. You may have even written some killer java portal apps which your organization can&#8217;t live without.  </p>
<p>If you&#8217;re like me, you&#8217;re also probably a bit tired of learning scripting languages (ant, perl, make, bash, dos, ruby, on and on, and on). You&#8217;re probably hesitant to make the investment in learning another. Well, I hear you. I feel your pain. So, in this article, I&#8217;d like to give you some idea about what types of tedious tasks that Maven can help you eliminate (and by doing so, possibly save significant development cost). I also want to try to convince you that Maven is worth the effort. Stay tuned for later articles where I will dive deeper into the actual implementation details of how to best use Maven to manage your java projects. </p>
<p>So, to prove it to you that Maven is well worth the investment, I&#8217;ll walk you through a recent experience. As a new employee at Function1, I am very excited about the product suite currently in development. In particular, I wanted to help add some functionality to one of our new products named Formbuilder.</p>
<p>Remember Studio Server? You know, the one with the <a href="http://www.function1.com/2007/03/tetris-anyone/">Tetris Easter Egg</a>? Well, Formbuilder is everything Studio Server was, plus an easier to use interface and updated with the latest and greatest technologies. Formbuilder really makes it a no-brainer to create and administer surveys and polls. Formbuilder can be run as a standalone webapp inside any of the standard java web containers. It can also be installed to run as a portlet with tight integration with Web Center Interaction.</p>
<p>Here are the steps it took me (as a brand new F1 employee, totally unfamiliar with Formbuilder source code) to get to the point where I could compile and run Formbuilder in a development environment without Maven. Afterwards, I&#8217;ll compare how each step might have been accomplished using Maven. And you can be the judge ;-)</p>
<p>Formbuilder is a standard java web application. On the back end, it uses servlets to manage requests. The servlets talk to a service layer powered by hibernate that manages persisting and retrieving data to database. On the front end, it uses GWT and Ext-JS to provide the views. Administrators can create surveys (using a very slick and easy-to-use user interface, imo):</p>
<div><a href="http://www.function1.com/wp-content/uploads/2010/02/admin32.jpg"><img class="aligncenter size-full wp-image-683" src="http://www.function1.com/wp-content/uploads/2010/02/admin32.jpg" alt="Formbuilder Admin Page" width="645" height="357" /></a></div>
<p>And, of course, Formbuilder also provides a page where you can complete and submit surveys:</p>
<div><a href="http://www.function1.com/wp-content/uploads/2010/02/formbuilder1.jpg"><img class="aligncenter size-full wp-image-684" src="http://www.function1.com/wp-content/uploads/2010/02/formbuilder1.jpg" alt="Formbuilder Example Survey" width="534" height="459" /></a></div>
<p>When I first got a hold of the source code, I was really impressed how well everything was organized. The folder structure followed the normal java development best practices and coding conventions. There were no surprises from a software development point of view.  Even so, getting to the point where I could actually write code, was pretty slow going. If you&#8217;ve ever inherited a non-trivial java application to maintain, I&#8217;m sure you can relate. And in my experience, this &#8220;ramp up&#8221; time is generally accepted by most development teams as something that you &#8220;just have to roll up your sleeves and get done&#8221;. Here are the steps that were necessary for me to get from having zero knowlege of source code to where I was able to compile and run the Formbuilder application:</p>
<h3>Check Out Source Code</h3>
<p>The first step was to get the source code. A few emails and I had access to subversion and I was able to check out the latest and greatest using the svn command line tool.</p>
<h3>Create Eclipse Project</h3>
<p>Eclipse stores info about what it thinks are java projects under a file called &#8220;.project&#8221; and a folder named &#8220;.settings&#8221;. Since these had been checked into subversion, I was able to import the code directly into eclipse as an eclipse java project. Unfortunately, this only kinda-sorta worked. Since the eclipse project had been build on another machine, the Eclipse files contained hard coded paths. There were red X&#8217;s everywhere and Eclipse was not happy.</p>
<h3>Resolved Dependencies</h3>
<p>One of the biggest hassles working with Java is managing the thirdparty jars that each web app depends on. In this case, it was easy to see that all required jars were inside the war/WEB-INF/lib directory. However, I also noticed that all these jars had been checked into source control. For small to medium sized projects, checking jars into source control works ok. But, in my experience, as the source code grows so does the jar dependencies and pretty soon the number of jars becomes unmanageable. Checkouts from svn can quickly become excruciatingly slow. In this case, it wasn&#8217;t a big problem (but something to keep in mind for future maven articles :). I manually added each jar to the eclipse project&#8217;s build path and that made Eclipse a little happier, making a lot of the existing red X&#8217;s go away.</p>
<h3>Compiling the UI Code</h3>
<p>Google Web Toolkit (GWT) is a technology that allows you to write java and have it compiled into javascript. Formbuilder uses GWT to create some really slick web user interfaces. So, the next step was to download and install the Eclipse GWT plugin. This plugin handles all the configuration necessary to be able to &#8220;compile&#8221; gwt java code. After setting up the plugin, eclipse was 100% happy, all the compile errors (Red X&#8217;s) in eclipse were satisfied!</p>
<h3>Build Database</h3>
<p>So now it&#8217;s time to fire this bad boy up and try it out?! Oh right, I probably need to install a database. Some hunting and I found the hibernate.cfg.xml which contained the database credentials. I noticed there were 3 database flavor&#8217;s configured inside of the xml file. Two of the configurations were commented out. I learned that Formbuilder is compatible with serveral database vendors including MySql, Oracle, and Microsoft SQL Server. I chose to use MySql since it lends itself well for development. A few google searches later and I was able to use the mysql command line tool to create a new mysql database (and new mysql user) to match the credentials found in the hibernate config file. I then used the hibernate hbm2ddl tool to automatically generate the datbase schema based on annotations inside the source code. Very cool. Life was good.</p>
<h3>Package</h3>
<p>Okie-Dokie. Things are compiling. The database is created and is online. The next step is to build a war and then test. I found a helpful shell script (named deploy.sh) that bundled up all the compiled class files created by eclipse along with the WEB-INF directory (including all the jars) into a war file. I copied the war file into tomcat/webapps and pointed my browser to browse to http://localhost:8080/formbuilder and voila? Oh, Dag nabbit!</p>
<h3>Runtime Error #1</h3>
<p>From the stack trace, it looked like the servlet was not able to connect to the database. After some more hunting I found that there were several application properties files. One property file was used to build a war to run on a local development environment. Another properties file was used to build a war to run on a production server. The production properties file was &#8220;active&#8221; so I switched back to the local properties file. Ok, run deploy.sh again. Then copy the war over to tomcat/webapps again. Browse to the formbuilder page, and &#8230;. DOH!</p>
<h3>Runtime Error #2</h3>
<p>I was seeing the same database connection error. After some troubleshooting, this time it turned out to be that some of the values inside the properties files were overwriting some of the<br />
values inside hibernate.cfg.xml. I could see that this was intentional. This way, the deploy.sh script could easily switch back and forth between building war for development vs a war for production. Run deploy.sh again, then copy the war over (&#8230;<em>again</em>!).</p>
<h3>Runtime Errors #3-15</h3>
<p>I was now able to connect to the database. But the next errors were several runtime ClassNotFound errors. Even though I had copied all jars over from WEB-INF/libs, it turned out that I needed to find and download a few extra from various web sites. It turned out that I was using a different version of Tomcat than other developers. So I ran the bash script to create the war (&#8230;<em>again</em>!). Then, I manually copied and pasted the war into tomcat/webapps (&#8230;<em>again</em>!).</p>
<h3>Run!</h3>
<p>Finally! Formbuilder was running inside tomcat. I was able to create and save a new survey successfully. All in all, it took probably close to 20 hrs to get to the point where I could start being productive and writing code. </p>
<h3>Maven</h3>
<p>Now, I&#8217;d like to describe the steps it took me to get up and running after I &#8220;mavenized&#8221; the formbuilder project. You ready for this?</p>
<p><strong>c:\&gt; mvn install</strong></p>
<p>That&#8217;s it! No lie. That single command (1) resolves and downloads required thirdparty jars (2) compiles java to class files (3) compiles gwt java to javascript (4) generates the database schema (5) runs junit tests (6) creates a war (7) and actually starts an embedded tomcat server which runs the Formbuilder web app.</p>
<h3>I&#8217;m convinced. So What Next?</h3>
<p>None of the steps described above will come to a surprise to anyone who&#8217;s ever written a Java web application. It can be frustrating (and costly) to manually repeat the same housekeeping tasks over and over. Maven solves this problem by forcing you to organize all your Java projects exactly the same. It gives you a common set of commands for building Java applications. Think how great it would be to be able to run &#8220;<strong>mvn install</strong>&#8221; against any piece of source code that can be found in your organization and have it handle all the tediousness for you?! Automation is a beautiful thing. </p>
<p>Stay tuned for Part II where I&#8217;ll cover more on exactly which common development problems that Maven solves and specifics of how to configure Maven to do so. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/02/everything-maven-part-1-is-it-worth-the-effort/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LiquidSkin and WCI 10gR3 – Not Exactly a Happy Couple!</title>
		<link>http://www.function1.com/2010/02/liquidskin-and-wci-10gr3-%e2%80%93-not-exactly-a-happy-couple/</link>
		<comments>http://www.function1.com/2010/02/liquidskin-and-wci-10gr3-%e2%80%93-not-exactly-a-happy-couple/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 19:34:02 +0000</pubDate>
		<dc:creator>Hani Atalla</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Portal Server]]></category>
		<category><![CDATA[LiquidSkin]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=463</guid>
		<description><![CDATA[Every migration project has its unique challenges that, for the most part, get resolved with due diligence.  Yet, some issues, let’s put it this way, can be more distinct.
Recently, I was on a client project migrating from ALUI 6.1 to WCI 10gR3.  Beside overcoming the usual quirks with SSL, security certificates, notification service, [...]]]></description>
			<content:encoded><![CDATA[<p>Every migration project has its unique challenges that, for the most part, get resolved with due diligence.  Yet, some issues, let’s put it this way, can be more distinct.</p>
<p>Recently, I was on a client project migrating from ALUI 6.1 to WCI 10gR3.  Beside overcoming the usual quirks with SSL, security certificates, notification service, analytics, and upgrade documentation that seems to cover 90% of what needs to be done and leaves 10% for us to improvise, I had issues with <a class="wp-caption" href="http://www.function1.com/2007/11/cool-tools-part-v-liquidskin/" target="_blank">LiquidSkin</a>. You remember that product developed some time ago for BEA Systems when WCI was still ALUI?</p>
<p>A quick refresher:  LiquidSkin is a set of libraries you can add to a portal install to customize the portal menu styles (dropdown, tabbed, vertical or horizontal navigation, …), the styles around portlets, pages, and communities and a whole slew of customizable navigational styles.  The customization is defined in XML files that map to experience definition objects.   Within the XML, you can target the customization to specific sections on a portal page; e.g. above banner, below banner, below body, above footer, etc.  After the Bea acquisition, Oracle kept the assemblies current but I&#8217;m not sure if it has been thoroughly tested with WCI 10gR3.</p>
<p>So, after migrating this customer&#8217;s development environment to 10gR3, upon a first visit to a community, the skin defined in the experience definitions for that community rendered properly.  All objects were rendered with their respective skin settings; e.g. portlets colors, page background color, etc.  However, after a subsequent navigation to a different community with a different experience definition, the skin attached to it did not load.  Instead, the target community was rendered with the skin attached to the community visited first.  You can imagine this: a community with correct page and portlets but incorrect styles and navigational menu below the banner!</p>
<p>The first thing that came to our mind is the caching setting that is defined for each section in the LiquidSkin.xml for that experience definition.  The setting were:</p>
<p><span style="color: #0000ff;">&lt;sCacheMode value=&#8221;</span><strong><span style="color: #0000ff;">NONE</span></strong><span style="color: #0000ff;">&#8221; /&gt;</span></p>
<p><span style="color: #0000ff;"><span style="color: #000000;"><span style="color: #0000ff;">&lt;iCacheLifetime value=&#8221;</span><strong><span style="color: #0000ff;">0</span></strong><span style="color: #0000ff;">&#8221; /&gt;</span></span></span></p>
<p>which indicate that caching is disabled for that particular section; all other sections had the same setting in the XML file.</p>
<p>I compared the IIS portal web site settings between 6.1 and 10gR3 and they were identical.  I insured that the adaptive page layout for each experience definition object is disabled.  After extensive fruitless digging, it seems that moving away from LiquidSkin to adaptive layouts for styles and navigation is the most feasible option.  But we are still looking into this and will post an update if we discover a resolution.</p>
<p>Thanks.</p>
<p>Hani</p>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/02/liquidskin-and-wci-10gr3-%e2%80%93-not-exactly-a-happy-couple/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Elephant(s) in the Room &#8211; Part 2. A Gentle Intro to Sharepoint 2007 for WCI/ALUI Customers.</title>
		<link>http://www.function1.com/2010/02/the-elephants-in-the-room-part-2-a-gentle-intro-to-sharepoint-2007-for-wcialui-customers/</link>
		<comments>http://www.function1.com/2010/02/the-elephants-in-the-room-part-2-a-gentle-intro-to-sharepoint-2007-for-wcialui-customers/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 14:06:02 +0000</pubDate>
		<dc:creator>jeremy</dc:creator>
				<category><![CDATA[Portal]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[WebCenter]]></category>
		<category><![CDATA[wci]]></category>
		<category><![CDATA[WebCenter migration]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=630</guid>
		<description><![CDATA[
Who says you can&#8217;t teach an old elephant new tricks?  In an effort to offer the best portal services available, Function1 has been spending a lot of time with Microsoft Office SharePoint server. Microsoft is a traditional market leader and its most recent incarnation of SharePoint has the technology baked-in to live up to the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.function1.com/wp-content/uploads/2010/02/circus-elephant.jpg"><img class="aligncenter size-full wp-image-631" src="http://www.function1.com/wp-content/uploads/2010/02/circus-elephant.jpg" alt="circus-elephant" width="220" height="257" /></a></p>
<p>Who says you can&#8217;t teach an old elephant new tricks?  In an effort to offer the best portal services available, Function1 has been spending a lot of time with Microsoft Office SharePoint server. Microsoft is a traditional market leader and its most recent incarnation of SharePoint has the technology baked-in to live up to the hype. Instead of just taking Microsoft&#8217;s word for how totally radical the software is, we did our own digging into the benefits and problems SharePoint has had over the years. We&#8217;ve been quite impressed by the integration of server and client side software, and by the general architecture of the MOSS solution. So much so, we believe the most recent SharePoint release is a viable contender for customers who want to migrate away from WCI to another  enterprise portal solution.</p>
<p>Before we get started, some terminology:</p>
<ul>
<li><strong>WebCenter Interaction (WCI)</strong> – The Plumtree-&gt;BEA Product Stack that you’re probably running now.</li>
<li><strong>WSS (Windows SharePoint Services)</strong> &#8211; The foundation of the SharePoint server platform. This is also the gateway for developers to interact with SharePoint behind the scenes.</li>
<li><strong>MOSS (Microsoft Office SharePoint Server)</strong> &#8211; The presentation layer and pre-built components that make up the portal aspect of SharePoint.</li>
<li><strong>Web Parts</strong> &#8211; The individual components that make up a Sharepoint site.  For WCI users, these are portlets.</li>
<li><strong>Web Sites</strong> &#8211; The areas of pages and web parts that combine to create a portal. For WCI users, this is the equivalent of a community.</li>
</ul>
<p style="text-align: left">From here on, I&#8217;ll refer to MOSS as simply SharePoint.</p>
<p style="text-align: left">
<p style="text-align: center"><strong>The History, Myth, and Legend</strong></p>
<p style="text-align: left">SharePoint has been competing in the portal space for a long time. SharePoint 2001 was Microsoft&#8217;s first endeavor in portal technology and was primarily a document storage solution. SharePoint 2003 built on this technology, but was plagued with scalability and usability issues. By the time 2007 rolled around, Microsoft had already been given a bad wrap for their portal technology and the myths surrounding the product became legend.  But the Sharepoint 2007 release went a long way to discrediting Microsoft&#8217;s critics.  With the 2007 release, in our opinion, Microsoft made the jump from &#8220;departmental document sharing sites&#8221; to &#8220;ready-for-primetime enterprise solution&#8221;.</p>
<p style="text-align: center">
<p style="text-align: center"><strong>SharePoint makes sense for customers with a heavy investment in Microsoft technology (Server, .Net Framework, SQL Server, and Office)</strong></p>
<p style="text-align: left">Microsoft was not at the forefront of Portal technology in 2003, but this gave the company the late adopter advantage of learning from other company&#8217;s mistakes. Instead of reinventing the wheel, Microsoft took the very best of portal technology from competing products and created a fully integrated suite of tools. Tight integration has been built from the Web to the Desktop through Office Tools, and from the Web to the Developer&#8217;s desktop through Visual Studio and SharePoint Designer. There&#8217;s also WEB 2.0 goodies like blogs and wikis, as well as a workflow and document management solution right out of the box.</p>
<p style="text-align: left">
<p style="text-align: center"><strong>What you need to install to get started</strong></p>
<p style="text-align: left">The reasoning for integrating middleware is similar for both Oracle and Microsoft. If you buy the portal product, life will be so much easier if you just buy all their connecting products too. Microsoft SharePoint is no exception with tight integration in Microsoft Office, Exchange, and Developer tools.</p>
<p style="text-align: left">There are a few moving parts needed for for a basic SharePoint installation.<strong> </strong></p>
<ul>
<li><strong>Microsoft Server 2003/2008 &#8211; </strong>This is self-explanatory, but the point we&#8217;d like to make is that you can use 32 or 64bit flavors of the server software. This is something we&#8217;ve been missing from Oracle WCI 10gR3.</li>
<li><strong>Active Directory</strong> &#8211; Although not required for a SharePoint installation, many of the security features and some of the add-ons require an AD source.</li>
<li><strong>IIS (Internet Information Services)</strong> &#8211; Microsoft&#8217;s web hosting platform handles application pools, memory management, and the .NET framework. SharePoint plugs right into existing IIS environments as a new website.</li>
<li><strong>SQL Server</strong> &#8211; Continuing on the theme of one company to rule them all, the database needs to be a SQL Server flavor. There are no alternatives to this, unlike WCI 10gR3 which had a number of database options.</li>
<li><strong>.NET Framework</strong> &#8211; Microsoft&#8217;s development container (it actually contains a number of languages) for the development of custom applications. Also the development base for WSS and MOSS.</li>
<li><strong>WSS (Windows Shared Services)</strong> &#8211; The nuts and bolts of any SharePoint deployment. This set of services includes web farm management, a persistence layer, workflow, content management, and search.</li>
<li><strong>MOSS (Microsoft Office SharePoint Server)</strong> &#8211; The interface, websites, and web parts that make up the user experience. Also includes integration with Office tools and SharePoint Designer.</li>
<li><strong>Visual Studio 2008</strong> &#8211; Although not a requirement to get started, any development with the .NET framework will include Visual Studio. If you&#8217;d like a solution that includes source control, we suggest the team edition.</li>
</ul>
<p style="text-align: center">
<p style="text-align: center"><strong>A Familiar Face</strong></p>
<p style="text-align: left">One of the benefits to having a Microsoft development team working on a portal product is the common user interface found in the SharePoint administrator and user experiences. Many of the menus are &#8220;office-like&#8221; and have been made even more so in SharePoint 2010 where the ribbon style interface has been employed. Behind the scenes, SharePoint employs AJAX and rich-text editing throughout the SharePoint experience. What Microsoft lacks in cutting-edge portal technology, it makes up for in robust engineering of the portal components.</p>
<p style="text-align: left">
<p style="text-align: center"><strong>Scalability and Availability</strong></p>
<p style="text-align: left">In the past, the weakest link in SharePoint deployments has been the limited amount of scalability and availability options for a systems administrator. SharePoint 2007 changes all that. With the 2007 release, Microsoft dismantled the SharePoint solution into a number of independent services that can be deployed on clustered, distributed, and virtual machines. Services communicate through the common WSS interface allowing for stateless services across a server farm. For smaller organizations, we found scalability goes both ways. SharePoint can actually run on a single computer (although highly frowned upon). Resource usage for a small organization is nominal compared to Oracle&#8217;s WebCenter 11g base deployment. Microsoft has also allowed organizations to expand on an existing SharePoint installation by reconfiguring and adding to server farms as needed.</p>
<p style="text-align: left">On the availability front, load balancing can be employed through a hardware device or Microsoft&#8217;s load balancing software solution. SQL Server contains Mirroring capabilities, and content can be distributed between multiple data stores to maximize server hardware.</p>
<p style="text-align: left">
<p style="text-align: center"><strong>Thank Goodness for Documentation</strong></p>
<p style="text-align: left">Plumtree Portal/ALUI/WCI  has never been credited to have a broad base of documentation, knowledgebase articles, examples, and blogs from users. As a former BEA consultant, I have felt the pain customer&#8217;s go through when trying to troubleshoot an undocumented problem. Oracle, similarly, has little documentation from real world WebCenter 11g users, because the product is so new to the market. SharePoint, on the other hand, has been widely used in various industries and there is a ton of documentation out there to support a SharePoint shop. From developer examples to 3rd party add-ons to UI Themes, the SharePoint community is verbose.<strong> </strong></p>
<p style="text-align: left"><strong><br />
</strong></p>
<p style="text-align: center"><strong>I&#8217;m sold, lets get on the SharePoint train!</strong></p>
<p style="text-align: left">Not so fast. Much like Oracle WebCenter 11g, there is no real clear path on migrating content from WCI to SharePoint. Although the technologies have similar portal components, SharePoint is a database driven solution whereas WCI was split between databases and file system storage. Don&#8217;t expect a migration plan from Microsoft&#8217;s rival, but that&#8217;s where we are hoping to help. As portal experts, we have the tools and knowledge to help you make the move from WCI to SharePoint. No, we haven&#8217;t received payola from Microsoft, we just want our customers to have the best solution for their investment.<strong> </strong>If you’re thinking about moving from WCI to SharePoint, or are just interested in more information about SharePoint Server in general, <a title="contact us" href="http://www.function1.com/contact-us/" target="_blank">contact us</a>. We&#8217;re happy to get you up to speed on your options.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/02/the-elephants-in-the-room-part-2-a-gentle-intro-to-sharepoint-2007-for-wcialui-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In which Function1.com plays with broken links and is redirected to its room</title>
		<link>http://www.function1.com/2010/01/in-which-function1-com-plays-with-broken-links-and-is-redirected-to-its-room/</link>
		<comments>http://www.function1.com/2010/01/in-which-function1-com-plays-with-broken-links-and-is-redirected-to-its-room/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 18:21:56 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[redirects]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=557</guid>
		<description><![CDATA[Let&#8217;s take a break for a moment from the world of portals, be it WebCenter or WebCenter Interaction, and take a look at the exciting life and times of our web site, Function1.com.
When we very recently refreshed our web site&#8217;s design, we also decided to change our blogging platform from MovableType to WordPress.  As [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s take a break for a moment from the world of <a href="http://www.function1.com/category/portal-server/">portals</a>, be it <a href="http://www.function1.com/2010/01/the-elephant-in-the-room-a-gentle-intro-to-webcenter-11g-for-wcialui-customers/">WebCenter</a> or WebCenter Interaction, and take a look at the exciting life and times of our web site, <a href="http://www.function1.com/">Function1.com</a>.</p>
<p>When we very recently refreshed our web site&#8217;s design, we also decided to change our blogging platform from <a href="http://www.movabletype.org">MovableType</a> to <a href="http://wordpress.org/">WordPress</a>.  As expected, as part of the migration we carefully migrated all of our <a href="http://www.function1.com/blog">blog</a> content to our new site.  However, we almost overlooked one detail that could potentially have both made our content inaccessible to some of our readers, as well as hampered our site&#8217;s search engine rankings.</p>
<p>Some background information: the URLs for the old blog posts were in the form <em>http://www.function1.com/site/[year]/[month]/[post title].html</em>.  The URLs for the new blog posts are in the form <em>http://www.function1.com/[year]/[month]/[post title]</em>.  For example, the old blog post <a href="http://www.function1.com/site/2007/12/check-search-server-status-the.html">http://www.function1.com/site/2007/12/check-search-server-status-the.html</a> can now be found at <a href="http://www.function1.com/2007/12/check-search-server-status-the-hard-way/">http://www.function1.com/2007/12/check-search-server-status-the-hard-way/</a></p>
<p>So what&#8217;s the problem?  Broken links, better known as 404 errors.  Take a look at the following screenshot from <a href="http://www.google.com/webmasters/tools/">Google Webmaster Tools</a>:</p>
<div id="attachment_569" class="wp-caption alignnone" style="width: 675px"><a href="http://www.function1.com/wp-content/uploads/2010/01/gt11.png"><img class="size-full wp-image-569" title="Function1.com Crawl errors" src="http://www.function1.com/wp-content/uploads/2010/01/gt11.png" alt="Function1.com Crawl errors" width="665" height="541" /></a><p class="wp-caption-text">Function1.com Crawl errors on Google Webmaster Tools</p></div>
<p>Other sites are linking to our content, and specifically to our blog posts, and that is important to us.  The table in the screenshot represents just a small subset of the links from other sites for which Google is now reporting crawl errors; this manifests into a lot of content that is sitting on our blog but is inaccessible because it&#8217;s being referenced by an invalidated URL.  If people stumble across pages linking to our old blog posts, we of course want them to be able to get to our content.  Now, do a Google search for <a href="http://www.google.com/search?q=site:www.function1.com/site/">&#8220;site:www.function1.com/site/&#8221;</a>.  As you can see, Google still holds a reference to many of our old URLs.  Yes, Google is aware of the URLs of our new links (for example, through our <a href="http://www.function1.com/sitemap.xml.gz">sitemap</a>), but we don&#8217;t want to lose the history we&#8217;ve established with Google, especially since Big G really does care about our old links going dead.</p>
<p>If all of the above didn&#8217;t make sense, here&#8217;s a made up example: what if Yahoo! decided to change its name to Oohay!, and in the process moved its domain from Yahoo.com to Oohay.com?  The news stories, sports scores, images, movies, and all the other content would still exist, and we can be sure that Google would eventually discover all of the new URLs.  But all of the old links to the content would effectively be severed, and as far as the search engines are concerned, it would be like one site completely shut down and a brand new site sprung up.  The <a href="http://en.wikipedia.org/wiki/PageRank">PageRank</a> that the old URLs had earned would be blown away.</p>
<p>In comes our hero, the 301 redirect.  The 301 HTTP status code tells the browser that a requested resource has permanently moved to a new location.  In other words, we can configure our web server so that a request for <a href="http://www.function1.com/site/2007/12/check-search-server-status-the.html">http://www.function1.com/site/2007/12/check-search-server-status-the.html</a> returns with a message to the browser that the resource has moved permanentely, and that the new location is <a href="http://www.function1.com/2007/12/check-search-server-status-the-hard-way/">http://www.function1.com/2007/12/check-search-server-status-the-hard-way/</a></p>
<p>To implement these redirects, I set aside some time setting up an .htaccess file that would hold the mappings for all of our old blog post URLs and some other old paths to the valid URLs.  Again, the point is to make sure that our content is still accessible via the old URLs but is still ultimately located at the new URLs.  Due to the number of blog posts that had to be redirected, I ended up writing a script to do a lot of this for me.  If you are interested in the script, check it out at <a href="http://github.com/mshafrir/MovableType-to-WordPress-.htaccess-Generator/blob/master/htaccess.py">http://github.com/mshafrir/MovableType-to-WordPress-.htaccess-Generator/blob/master/htaccess.py</a>.  In any case, here&#8217;s a look at a slice of our current .htaccess file.</p>
<div style="margin: 10px 8px; border-top: 1px solid #444; border-bottom: 1px solid #444;">
<code style="font-size: 11px; margin: 2px;"><br />
# Sample .htaccess file<br />
<br />
#<br />
# Explicit redirects of the October, 2009 blog posts<br />
redirect 301 /site/2009/10/-google-web-toolkit-gwt.html http://www.function1.com/2009/12/integrating-a-google-web-toolkit-application-with-wci-and-the-imageserver/<br />
<br />
redirect 301 /site/2009/10/oracle-open-world-and-the-nigh.html http://www.function1.com/2009/12/oracle-open-world-and-the-night-obama-stayed-at-my-hotel/<br />
<br />
redirect 301 /site/2009/10/function1corp-attending-oow09.html http://www.function1.com/2009/10/function1corp-attending-oow09/<br />
<br />
redirect 301 /site/2009/10/getting-the-band-back-together.html http://www.function1.com/2009/10/getting-the-band-back-together-function1-welcomes-casey-goodman-and-mike-shafrir/<br />
<br />
#<br />
# Redirects using regular expression matching<br />
<br />
# Redirect http://www.function1.com/site/year/month/day/<br />
# -> http://www.function1.com/year/month/day/<br />
RedirectMatch 301 ^/site/([0-9][0-9][0-9][0-9])/([0-9][0-9])/([0-9][0-9])/$ http://www.function1.com/$1/$2/$3/<br />
<br />
# Redirect http://www.function1.com/site/year/month/<br />
# -> http://www.function1.com/year/month/<br />
RedirectMatch 301 ^/site/([0-9][0-9][0-9][0-9])/([0-9][0-9])/$ http://www.function1.com/$1/$2/<br />
<br />
# Redirect http://www.function1.com/site/year/<br />
# -> http://www.function1.com/year/<br />
RedirectMatch 301 ^/site/([0-9][0-9][0-9][0-9])/$ http://www.function1.com/$1/<br />
</code>
</div>
<p>For further reading, here&#8217;s <a href="http://www.isitebuild.com/301-redirect.htm">an article on .htaccess files and 301 redirects</a>.</p>
<p>And just to make sure I&#8217;m not making all this up, do a search for <a href="http://www.google.com/search?q=site:www.function1.com/site/">&#8220;site:www.function1.com/site/&#8221;</a> on Google.  Choose any link in the results, but before you click on it, note the URL in green.  Finally, click on your chosen link, note that the content you expected came up, and then compare the URL in your location bar with the URL on the search results page.  You&#8217;ve just observed 301 redirects in action.</p>
<p>Hopefully you&#8217;ve learned a little bit about the issues and risks that can arise from changing your site&#8217;s URL structure which may come about from migrating your site&#8217;s blogging platform or content management system (CMS).  Please feel free to post your comments or questions below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/01/in-which-function1-com-plays-with-broken-links-and-is-redirected-to-its-room/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Elephant in the Room &#8211; A Gentle Intro to WebCenter 11g for WCI/ALUI customers</title>
		<link>http://www.function1.com/2010/01/the-elephant-in-the-room-a-gentle-intro-to-webcenter-11g-for-wcialui-customers/</link>
		<comments>http://www.function1.com/2010/01/the-elephant-in-the-room-a-gentle-intro-to-webcenter-11g-for-wcialui-customers/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 22:25:54 +0000</pubDate>
		<dc:creator>Brian Hak</dc:creator>
				<category><![CDATA[Function1]]></category>
		<category><![CDATA[WebCenter]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=497</guid>
		<description><![CDATA[
In 2006, the famous (infamous? I can never get those two words straight) street artist Banksy put on a show in an LA warehouse named, &#8220;Barely Legal&#8221;.  The centerpiece of the show was &#8220;The Elephant In The Room&#8221;, a painted live elephant that seemed like, IMO,  a pretty blase metaphor all dressed up in shock [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.function1.com/wp-content/uploads/2010/01/Bansky.Elephant.jpg"><img class="aligncenter size-full wp-image-498" src="http://www.function1.com/wp-content/uploads/2010/01/Bansky.Elephant.jpg" alt="" /></a></p>
<p>In 2006, the famous (infamous? I can never get those two words straight) street artist <a href="http://www.banksy.co.uk">Banksy</a> put on a show in an LA warehouse named, &#8220;Barely Legal&#8221;.  The centerpiece of the show was &#8220;The Elephant In The Room&#8221;, a painted live elephant that seemed like, IMO,  a pretty blase metaphor all dressed up in shock and awe.  But I&#8217;m sure there was deeper meaning that I was missing&#8230;what do I know about art anyways?  In any case, it&#8217;s a new decade now, and I don&#8217;t need to literally paint an elephant to point out that there&#8217;s an elephant in the room for WCI customers: Oracle WebCenter 11g.  I&#8217;m sure you&#8217;ve all seen some of the marketing around Oracle&#8217;s new portal platform, and maybe even seen a demo or two.  But here at Function1, we&#8217;ve been spent a lot of time and effort digging past the marketing material to try to understand the real value proposition of WebCenter 11g, both for new portal customers, and for existing WCI customers.  So, without further adieu, a gentle introduction to WebCenter 11g for WCI customers.</p>
<p>Since marketing people seem to like to give similar names to completely different things, let&#8217;s start with some terminology :</p>
<ul>
<li><strong>WebCenter Interaction (WCI)</strong> &#8211; The Plumtree-&gt;BEA Product Stack that you&#8217;re probably running now</li>
<li><strong>WebCenter Suite 11g </strong>- Oracle owns 3 portal products:  WCI (Plumtree-&gt;BEA acquisition), BEA Portal (BEA acquisition), and WebCenter (Oracle Organic product).  WebCenter Suite is the blanket license you can buy to acquire all three of these portal products.</li>
<li><strong>WebCenter Framework</strong> &#8211; A set of ADF components and APIs that let developers tap into the Oracle product stack</li>
<li><strong>WebCenter Services</strong> &#8211; A set of pre-built business components (Blogs, Wikis, Social Graph, etc) that developers can utilize to build applications.  These are essentially out of the box portlets</li>
<li><strong>WebCenter Spaces</strong> &#8211; The homegrown out of the box Oracle portal product</li>
<li><strong>WebCenter 11g </strong>- The term used for collectively referring to Oracle WebCenter Spaces, WebCenter Services, and WebCenter Framework</li>
</ul>
<p>The rest of this post will focus on WebCenter 11g, and the components that comprise it.  So what is Oracle WebCenter 11g?</p>
<p style="text-align: center;"><strong>At heart, WebCenter is a development platform</strong></p>
<p style="text-align: left;">If you take nothing else away from reading this, remember that WebCenter is a development platform first.  Specifically, WebCenter is an integrated, end-to-end Java development solution for delivering enterprise applications.  This differs dramatically from the WCI approach.  In the WCI world, product is first, and development is second.  The focus of WCI is to provide a configurable, out of the box portal experience for users.  WebCenter, on the other hand, is geared towards providing developers a set of components and APIs that can be pieced together to build and deliver enterprise applications.  The addition of WebCenter Spaces (the WebCenter Portal) to the stack is just one method to surface custom WebCenter apps.</p>
<p style="text-align: center;"><strong>WebCenter makes sense for customers with a heavy investment in Java and Oracle</strong></p>
<p style="text-align: left;">If you&#8217;re a .NET shop thinking about replacing WCI, you should probably stop reading now and start thinking about Sharepoint (We&#8217;ll have a similar intro to Sharepoint for WCI users post up soon).  Sure, WebCenter is committed to open development standards, which means you can write .NET portlets and wrap them in WSRP so that they get consumed through WebCenter Spaces.  But going down this road is kind of like putting ketchup on a nice steak.  Yeah, you can do it, but why would you want to?  At the end of the day you&#8217;re just wasting time and money.  If you wanted something to put ketchup on, you should have just had the burger for dinner.  If you&#8217;re going to eat steak; eat steak.  If you&#8217;re a Microsoft shop, let your developers build their stuff in Visual Studio and take advantage of the tight integration with the Sharepoint platform.  If you&#8217;re an Oracle shop, let your developers build their code in JDeveloper and take advantage of the tight integration with the Weblogic App server and the rest of the WebCenter/Oracle platform.</p>
<p style="text-align: center;"><strong>WebCenter is a way to surface Oracle&#8217;s Fusion Middleware stack</strong></p>
<p style="text-align: left;">Oracle is probably happy that you pony up the cash to use WebCenter, but they really want you to run your enterprise on Oracle software.  Not coincidentally, there are APIs and components built into the WebCenter Framework that allow you to nicely integrate and surface Fusion middleware components.  Things like their BPEL engine, SOA suite, etc.  If you&#8217;ve invested in Fusion, the addition of WebCenter might be a nice way for you to tie a bunch of disparate middleware components together.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;"><strong>OK, so what do I get out of the box?</strong></p>
<p style="text-align: left;">Just because WebCenter is targeted at development shops doesn&#8217;t mean that Oracle left you high and dry if you just want to install products and get going.  Out of the box, you get a portal environment in WebCenter Spaces.  The portal provides you Group Spaces (i.e. WCI communities), Personal Spaces (i.e. WCI my pages), user customization, and a security model.  The user security model is built on top of Weblogic Server security.  This means that, out of the box, your users are going to be stored in the LDAP user store embedded in WebLogic.  You can, however, delegate security out to your corporate LDAP/AD, or integrate with an SSO solution.  In addition, you get the functionality (i.e. pre-built portlets) of WebCenter Services.  These services include Document Collaboration, Blogs, Wikis, Tasklists, Tagging, Search, Activity Streams, Calendaring, and more.  You also get a limited use license for Oracle Universal Content Management (UCM).  UCM is the Oracle branding for their Stellent acquisition, and the product is actually quite mature and worthwhile as an enterprise content management solution.  For more info on UCM, take a look <a href="http://www.oracle.com/technology/products/content-management/ucm/index.html">here</a>.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;"><strong>Great, so what do I have to install and manage to make this stuff work?</strong></p>
<p style="text-align: left;">This is kind of a loaded question, as the answer changes depending on how much Oracle functionality you want to expose through WebCenter.  At a bare minimum, however, you&#8217;re probably going to have the following components in your WebCenter environment.</p>
<ul>
<li><strong>JDK 1.6</strong> &#8211; Yep.  It&#8217;s the JDK.  You&#8217;re running Java, so you need the Java runtime and associated toolkits</li>
<li><strong>Weblogic Server</strong> &#8211; Oracle&#8217;s J2EE app server of choice since the BEA acquisition.  Note that Weblogic Server licenses are an additional cost in the procurement of WebCenter</li>
<li><strong>Database</strong> &#8211; WebCenter has support for both Oracle and SQL Server databases.  Not sure why you&#8217;d be running SQL Server if you have so much other Oracle product, but you can if you want to.  There are several schemas that get installed as part of the WebCenter installation to manage meta-data for the various applications in the stack.</li>
<li><strong>UCM</strong> &#8211; With the release of UCM 11g this summer, things will change a bit and UCM will just be another WAR/EAR that you deploy to Weblogic server.  For the time being however, plan on installing a standalone Java server that runs the UCM application.</li>
<li><strong>WebCenter WAR files </strong>- Deployed and manged in Weblogic server are various WAR files for running WebCenter components (Spaces, Services, etc)</li>
<li><strong>Apache</strong> &#8211; You probably don&#8217;t really need Apache, but everybody seems to like to stick it in front of Weblogic for serving up static HTML content.</li>
<li><strong>JDeveloper</strong> &#8211; Like it or not, it&#8217;s the IDE your developers are going to be using for composing WebCenter applications.</li>
</ul>
<p><strong>And what if I&#8217;m concerned about things like scalability and high availability?</strong></p>
<p>This is one area where I&#8217;m personally quite happy with the way Oracle did things.  Because everything is deployed to a J2EE container, you can architect your solution as a traditional 3-tier web application.  Install a hardware load balancer for web request distribution and fail over.  Scale out your web tier horizontally as needed for load and high availability.  Cluster your app servers.  And use your Database vendor&#8217;s replication solution of choice (Oracle RAC, etc).  One item of note here is that we&#8217;ve found WebCenter applications to be quite RAM intensive (moreso than even most Java Apps).  Luckily, like talk, RAM is cheap.  So plan on loading up your servers with a bunch of RAM to avoid a painful user experience.  Also, consider how you&#8217;re licensing WebCenter.  If you&#8217;re paying by Server/CPU/Power Unit/whatever term they use these days, building out a large fault tolerant environment can get pretty costly, and you might be better served to just look into an ELA/all you can eat model.</p>
<p><strong>So, what kind of skillsets should I have on my team?</strong></p>
<p>IMO, you&#8217;re going to want some number of the following resources on your team to run a WebCenter project successfully:</p>
<ul>
<li><strong>Java developers</strong>- You&#8217;ll want these guys to be familiar with J2EE and JSF.  If you&#8217;re really lucky, they&#8217;ll know all about Oracle ADF (Oracle&#8217;s proprietary extension to JSF) as the ADF learning curve is non-trivial.  It would probably also be good if they have experience developing in JDeveloper.</li>
<li><strong>System Architect</strong> &#8211; Somebody who can plan your hosting environment for you and knows how all the pieces fit together.  i.e. somebody who understands your network topology and can tell you which segment of the network to stick servers in.  Somebody who can implement a highly available solution.  Somebody who can tell you how much horsepower you&#8217;re going to need to run your environment, and, additionally, how you can scale to meet increased demand.</li>
<li><strong>Weblogic Expert</strong> &#8211; The vast majority of the components you use, and the code you write, is going to get deployed to Weblogic Server.  Having production support who know the in&#8217;s and out&#8217;s of Weblogic is a good idea.</li>
<li><strong>Functional People</strong> &#8211; These are the same functional folks that you&#8217;d have for any portal project.  They&#8217;re going to help define governance, drive development, and generally take care of the important stuff that your tech guys don&#8217;t want anything to do with.</li>
</ul>
<p><strong>I&#8217;m sold, how do I migrate?</strong></p>
<p>This is, literally, the million dollar question.  Your first step towards migration is moving your licenses over from WCI to WebCenter Suite.  Once you&#8217;ve gotten over the sticker shock of doing so, the world is your oyster.  Except&#8230;uh&#8230;there&#8217;s no migration plan from Oracle; no real roadmap to help you get from point A to point B.  And that&#8217;s where we hope to fit into the equation.  Function1 understands both the WCI and WebCenter environments.  We can help you get the most out of your WebCenter installation, without completely throwing away your investment in WCI and starting from scratch.  If you&#8217;re thinking about moving from WCI to WebCenter, or are just interested in more information about WebCenter in general, give us a ring or drop us a line.  We&#8217;re happy to come out and talk to you.</p>
<p><strong>Oh, and one other thing&#8230;</strong></p>
<p>Some of us on the Function1 team delivered a much more detailed deep dive presentation on WebCenter recently.  As a show of team unity, we all decided to grow moustaches.  As a thanks for reading this whole post, here&#8217;s a picture of our best &#8217;stache.</p>
<p><a href="http://www.function1.com/wp-content/uploads/2010/01/hani1.jpg"><img class="aligncenter size-large wp-image-514" src="http://www.function1.com/wp-content/uploads/2010/01/hani1-e1264111182497-576x1024.jpg" alt="" width="576" height="1024" /></a></p>
<p>Sadly, he has nothing on <a href="http://www.youtube.com/watch?v=wYi24D9lHqc">this guy</a>.</p>
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/01/the-elephant-in-the-room-a-gentle-intro-to-webcenter-11g-for-wcialui-customers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Welcome to 2010</title>
		<link>http://www.function1.com/2010/01/welcome-to-2010/</link>
		<comments>http://www.function1.com/2010/01/welcome-to-2010/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 18:15:19 +0000</pubDate>
		<dc:creator>Brian Hak</dc:creator>
				<category><![CDATA[Function1]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.function1.com/?p=481</guid>
		<description><![CDATA[Howdy all, and welcome to to the new decade.  To kick off the new year in style, you may have noticed that we re-branded our website.  New look and feel, new content, and new back-end engine:  we swapped Movable Type out in favor of Wordpress.  So what do you think?  Like it?  Love it?  Hate [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-483" src="http://www.function1.com/wp-content/uploads/2010/01/Baby-New-Year.jpg" alt="Baby New Year" width="283" height="424" />Howdy all, and welcome to to the new decade.  To kick off the new year in style, you may have noticed that we re-branded our website.  New look and feel, new content, and new back-end engine:  we swapped Movable Type out in favor of Wordpress.  So what do you think?  Like it?  Love it?  Hate it?  Doesn&#8217;t make all that much of a difference in your life?  Leave a comment and let us know.</p>
<p>As a company, Function1 is pretty excited about the opportunity that 2010 brings.  While continuing our focus on WCI, we&#8217;ve also been investing in new technologies to the company (namely, WebCenter Suite and Sharepoint), and spending time developing kick-ass software.  Stay tuned for more info about our software offerings and musings about WebCenter and Sharepoint in the coming months.</p>
<p>As always, thanks for reading&#8230;we hope the new year finds you happy, healthy, and prosperous.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2010/01/welcome-to-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Early Christmas Present: Free code to list Published Content Links</title>
		<link>http://www.function1.com/2009/12/an-early-christmas-present-free-code-to-list-published-content-links/</link>
		<comments>http://www.function1.com/2009/12/an-early-christmas-present-free-code-to-list-published-content-links/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 18:37:21 +0000</pubDate>
		<dc:creator>Brian Hak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wp.function1.server296.com/?p=435</guid>
		<description><![CDATA[Howdy all, hope this note finds you well and recovering from Turkey overload.
Warning: This is a pretty specific discussion of a pretty specific situation that occurs when you&#8217;re moving a bunch of stuff around in Publisher.  If you&#8217;re not interested in Publisher and it&#8217;s idiosyncrasies,  you should save your time and skip this post.
Anyhow, with the [...]]]></description>
			<content:encoded><![CDATA[<p>Howdy all, hope this note finds you well and recovering from Turkey overload.</p>
<div><strong>Warning:</strong> This is a pretty specific discussion of a pretty specific situation that occurs when you&#8217;re moving a bunch of stuff around in Publisher.  If you&#8217;re not interested in Publisher and it&#8217;s idiosyncrasies,  you should save your time and skip this post.</div>
<div>Anyhow, with the holiday season upon us and all, I figured I&#8217;d share the source code for a little Publisher utility I recently put together.  I&#8217;m working with a client who is in the process of a major Publisher update: they&#8217;re re-organizing their publisher content hierarchy to operate more efficiently.  This is all fine and dandy, except for the fact that many of their content items link to other content items.  As such, when they re-organize their content hierarchy, a bunch of embedded links are going to break :(  For example, consider the following:</div>
<div>The file:</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em><br />
</em></span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>$pub_root/<strong>foo</strong>/foo.html</em> </span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><br />
</span></p></blockquote>
<p><span style="background-color: #ffffff; ">contains a link to another content item that looks like:</span></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em><br />
</em></span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>http://pubcontentserver/<strong>bar</strong>/bar.html</em> </span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><br />
</span></p></blockquote>
<p><span style="background-color: #ffffff; ">So far so good, except that during the content migration, the <strong><em>foo</em><span style="font-weight: normal;"> and </span><em>bar</em><span style="font-weight: normal;"> directories are getting rolled into one new folder named </span><em>foobar<span style="font-weight: normal;">.  <span style="font-style: normal;">When this happens, we&#8217;ll end up with the following files:</span></span></em></strong></span></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em>$pub_root/<strong>foobar</strong>/foo.html</em></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em>$pub_root/<strong>foobar</strong>/bar.html</em></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em><br />
</em></p></blockquote>
<div>
<div>
<div>Unfortunately, Publisher isn&#8217;t smart enough to fix embedded links for you when you move stuff around within the hierarchy.  The net result is that our link in foo.html is out of date and pointing to a file that doesn&#8217;t exist:</div>
</div>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>http://pubcontentserver/<strong>bar</strong>/bar.html</em> </span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><br />
</span></p></blockquote>
<p>What we&#8217;d like to happen, though, is for our link to point to the new location of the file, i.e.:</p>
<div><span style="background-color: #ffffff;"><br />
</span></div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>http://pubcontentserver/<strong>foobar</strong>/bar.html</em> </span></p></blockquote>
<div></div>
<p><span style="background-color: #ffffff; ">This particular client has a bunch of published content items (in the tens of thousands), which makes it pretty impractical to ask someone to manually go through every published content item and look for links that are going to break.  So I volunteered to write a script/program to go through and identify potential problem links automatically.  I have to admit I first volunteered because I thought this was going to be really easy to figure out via. a recursive grep:</span></p>
<div></div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em>From $PUB_CONTENT_ROOT on filesystem</em></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em><strong>find . | xargs grep -i &#8216;publishedcontent&#8217;</strong></em></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em><strong><br />
</strong></em></p></blockquote>
<p><em><strong><span style="font-style: normal; font-weight: normal;">Just to make me mad though, while the grep approach works, it returns too many false positives.  It turns out that a lot of the out-of-the-box content items have links back to themselves, i.e something like:</span></strong></em></p>
<div><em><strong><span style="font-style: normal; font-weight: normal;"><br />
</span></strong></em></div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>in the file $PUB_CONTENT_ROOT/foo/foo.html</p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em><strong>http://pubcontentserver/foo/foo.html#myTarget</strong></em></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em><strong><br />
</strong></em></p></blockquote>
<p><em><strong><span style="font-weight: normal; font-style: normal;">And Publisher is smart enough to fix these self-referencing links when you move the items around, i.e. the link above gets updated to</span><br />
</strong></em></p>
<div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em><strong><br />
</strong></em></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em><strong><span style="background-color: #ffffff; font-style: normal; font-weight: normal; ">in the file $PUB_CONTENT_ROOT/foobar/foo.html<br />
<em><strong>http://pubcontentserver/foobar/foo.html#myTarget</strong></em> </span></strong></em></p>
<p><em><strong></p>
<div><em><strong><br />
</strong></em></div>
<p></strong></em></p></blockquote>
<p>What we really need is a piece of code that does the following:</p></div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; ">1) Recurse down the published content tree and examine all the published content items</span><br />
<span style="background-color: #ffffff; ">2) Check for links to other published content items in each file.  This can be done by looking for a specific token, which by default, is &#8220;publishedcontent&#8221;</span><br />
<span style="background-color: #ffffff; ">3) At this point, we have a list of all the links to content items in the file.  However, we need to filter out the self-referencing links that will get auto-updated by Publisher.  To do this, let&#8217;s look at the path in the link, and ignore any references that point to the same directory.  For example:</span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; ">In the file <em>$PUB_CONTENT_ROOT/foo/foo.html</em></span><br />
<span style="background-color: #ffffff; ">We&#8217;ll capture the link <em>http://putcontentserver/<strong>bar</strong>/bar,html</em></span><br />
<span style="background-color: #ffffff; ">But we&#8217;ll ignore the link http://pubcontentserver/<strong>foo</strong>/mystuff.html because it will be auto-updated by Publisher.</span></p></blockquote>
</blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; ">4) Dump all matches found out to a file so the links can be reviewed and fixed.</span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><br />
</span></p></blockquote>
<p><span style="background-color: #ffffff; ">So I wrote some code that does the above.  Go grab <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://www.function1.com/site/2009/11/30/LinkChecker.java">LinkChecker.java</a></span> if you&#8217;re interested.  The code is pretty simple, but it does have a few caveats which are all listed in the comments.  You should be able to compile the code with a JDK 1.5+ compiler without any external dependencies:</span></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><em>javac com\function1\utility\LinkChecker.java</em></p></blockquote>
<div><span style="background-color: #ffffff; "><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><br />
</span></span></div>
<div><span style="background-color: #ffffff; "><span class="mt-enclosure mt-enclosure-file" style="display: inline;">And then run it pretty easily too:</span></span></div>
<div><span style="background-color: #ffffff; "><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><br />
</span></span></div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>java -classpath . com.function1.utility.LinkChecker my/path/to/pubcontent_root/publish</em></span></p></blockquote>
<div><span style="background-color: #ffffff; "><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><br />
</span></span></div>
<div><span style="background-color: #ffffff; "><span class="mt-enclosure mt-enclosure-file" style="display: inline;">Note that the code actually generates two output files: <em>published_content_links.log</em> and <em>external_links.log</em>.  <em>published_content_links.log</em> is the list of all the links and files that fall into the scenario outlined above.  <em>external_links.log </em>just lists all links in content items that are to non-published content items (i.e. links to external websites, and other portal links). </span></span></p>
<div><span style="background-color: #ffffff; "><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><br />
</span></span></div>
<p><span style="background-color: #ffffff; ">Eventually, somebody with a little motivation could evolve this code to the next logical iteration and add functionality to auto-check the links that are grabbed.  Would be pretty simple to do by adding something like:</span></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>URLConnection myLink = new URLConnection(currentLink);</em></span><br />
<span style="background-color: #ffffff; "><em>int statusCode = myLink.getResponseCode();</em></span></p></blockquote>
<div>
<div>But then you have to think about faking portal authentication and all that other good stuff that I&#8217;m not really up for tonight.  Anyhow, hope this little utility comes in handy for at least somebody out there on the internet&#8230;.enjoy the early (admittedly pretty lame) Christmas present from your friends at Function1.</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2009/12/an-early-christmas-present-free-code-to-list-published-content-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running WCI 10gR3 on Windows 2008</title>
		<link>http://www.function1.com/2009/12/running-wci-10gr3-on-windows-2008/</link>
		<comments>http://www.function1.com/2009/12/running-wci-10gr3-on-windows-2008/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 18:36:23 +0000</pubDate>
		<dc:creator>Brian Hak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wp.function1.server296.com/?p=432</guid>
		<description><![CDATA[Howdy all.  It&#8217;s been a long week, so this one is short and sweet.  No witty anecdotes, no flowery prose and mixed metaphors, and minimal run-on sentences.  Just the facts before I shut down my machine for a bit.
Running WCI on Windows 2008 isn&#8217;t officially supported, but it&#8217;s kind of ridiculous to have to run [...]]]></description>
			<content:encoded><![CDATA[<p>Howdy all.  It&#8217;s been a long week, so this one is short and sweet.  No witty anecdotes, no flowery prose and mixed metaphors, and minimal run-on sentences.  Just the facts before I shut down my machine for a bit.</p>
<div>Running WCI on Windows 2008 isn&#8217;t officially supported, but it&#8217;s kind of ridiculous to have to run your environments on an OS going on 7 years old.  We&#8217;re running the entire WCI stack swimmingly on Win2K8 internally, but there are a few things to know if you&#8217;re going to try to do an install yourself.</div>
<div>1) The installers will fail miserably if you don&#8217;t run them as an <a href="http://www.howtogeek.com/howto/windows-vista/run-a-command-as-administrator-from-the-windows-vista-run-box/">administrator</a> and <a href="http://windows.microsoft.com/en-US/windows-vista/Make-older-programs-run-in-this-version-of-Windows">in compatibility mode</a>.  We ran our installers in Windows 2003 compatibility mode without problem.</div>
<div>2) You need to do a command line install of the portal.  To do this, edit the example-silent.properties config file that comes with the installer, and then run:</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>WebCenterInteraction_10.3.0.0.0.exe -f example-silent.properties</em></span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em><br />
</em></span></p></blockquote>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" src="http://www.function1.com/site/silent_install.png" alt="silent_install.png" width="669" height="330" /></span><span style="background-color: #ffffff; ">Annoyingly, you get no feedback at all on the state of the install when running this way.  Your  DOS prompt will return immediately, but have no fear, the installer is running.  Open up Task Manager, and look for the &#8220;WebCenterInteraction&#8230;&#8221; process.  Once it disappears, the installer is done.<br />
</span></p>
<div><span style="background-color: #ffffff; "><br />
</span></div>
<div><span style="background-color: #ffffff; ">3) Portal does an OS check when it starts up, and doesn&#8217;t like you running on a non-supported platform.  Luckily, the check it does is pretty easy to trick.  Just tell Java to set the OS.name environment variable to Windows 2003 when you start your app server.  For Weblogic and Tomcat, you&#8217;ll want to add something like this to the script you&#8217;re using to start the server:</span></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p><span style="background-color: #ffffff; "><em>set JAVA_OPTS=-Dos.name=&#8221;windows 2003&#8243;</em></span></p></blockquote>
<div><span style="color: #000000; font-family: helvetica, arial; line-height: 20px; "><strong><br />
</strong></span></div>
<div><span style="font-family: helvetica, arial; color: #000000;"><span style="line-height: 20px;">4) Oh, and one other thing.  Even when you do all the above, you /might/ have problems with getting configuration manager to lay down correctly.  Luckily, Configuration manager is just a straight forward web app.  We made it work by running the installer on a Win2K3 box, and just copying over the entire configmgr directory.  Works like a charm.</span></span></div>
<div><span style="font-family: helvetica, arial; color: #000000;"><span style="line-height: 20px;"><br />
</span></span></div>
<div><span style="font-family: helvetica, arial; color: #000000;"><span style="line-height: 20px;">And that&#8217;s all she wrote.  Have fun, and good luck.  Just to brighten up this post a little bit, here&#8217;s a picture of my just completed, first ever piece of handmade stained glass&#8230;enjoy :)</span></span></div>
<div style="text-align: auto;"><span style="font-family: helvetica, arial; color: #000000;"><span style="line-height: 20px;"><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><br />
</span></span></span></div>
<div style="text-align: auto;"><span style="font-family: helvetica, arial; color: #000000;"><span style="line-height: 20px;"><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" src="http://www.function1.com/site/stained_glass.jpg" alt="stained_glass.jpg" width="604" height="453" /></span></span></span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.function1.com/2009/12/running-wci-10gr3-on-windows-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
