<?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>Rob@Rojotek &#187; WebSphere Portal</title>
	<atom:link href="http://www.rojotek.com/blog/blog/websphere-portal/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rojotek.com/blog</link>
	<description>Software Development in Brisbane</description>
	<lastBuildDate>Wed, 25 Jan 2012 10:34:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Resetting IBM WebSphere Portal 6.1 Security</title>
		<link>http://www.rojotek.com/blog/2009/11/16/resetting-ibm-websphere-portal-61-security/</link>
		<comments>http://www.rojotek.com/blog/2009/11/16/resetting-ibm-websphere-portal-61-security/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 05:39:47 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[WebSphere Portal]]></category>

		<guid isPermaLink="false">http://www.rojotek.com/blog/?p=925</guid>
		<description><![CDATA[Situation&#160; You have received a WebSphere Portal VM that is setup to use security settings that don’t match your environment, and you need to go back to a simple config. Running the recommended 1ConfigEngine wp-restore-default-repository-configuration does not work, because you have not got a working Portal environment in the first place, so it won’t start. [...]]]></description>
			<content:encoded><![CDATA[<h3>       Situation&#160;    </h3>
<p>       You have received a WebSphere Portal VM that is setup to use security settings that don’t match your environment, and you need to go back to a simple config.    </p>
<p>       Running the recommended</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ConfigEngine wp-restore-default-repository-configuration</div></td></tr></tbody></table></div>
<p>does not work, because you have not got a working Portal environment in the first place, so it won’t start.    </p>
<h3>       Overview of solution    </h3>
<p>       Disable the security, then perform wp-restore-default-repository-configuration.    </p>
<h3>       Files and Tools used    </h3>
<ul>
<li>        security.xml      </li>
<li>        ConfigEngine&#160;      </li>
<li>        wkplc.properties      </li>
</ul>
<p>       Whenever you see some code with bold and italics that is something for you to change to match your environment&#160;    </p>
<h3>       Details:    </h3>
<h4>       1) disable security.    </h4>
<p>       This involves directly editing the security.xml file for your node. Note that your portal instance will <span class="caps">NOT</span> work when security is disabled, so performing this step will disable your portal instance. You should not think about doing this in a production environment (you probably shouldn’t be passing around Portal VM’s for production environments anyway). (The security.xml will live in the config for your node. I’ll assume you know where this is, if not use the find command on your operating system).    </p>
<p>       To disable security, edit the security.xml, and change the enabled attribute on the root security element to be false ie change enabled=”true” to enabled=”true”    </p>
<h4>       2) start up your portal instance using whatever commands are appropriate.    </h4>
<p>       On linux you might find</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">service portal start</div></td></tr></tbody></table></div>
<p>useful.    </p>
<h4>       3) Setup restore properties in your wkplc.properties file.    </h4>
<p>       <strong><em>Profile</em></strong>/ConfigEngine/properties/wkplc.properties    </p>
<p>       # The realm name to be used. A realm with this name will be created.<br />       restore.file.realm=<strong><em>New Unique Realm</em></strong> restore.file.delimiter=/    </p>
<p>       # Portal and <span class="caps">WAS</span> admin <span class="caps">UID</span> (short name) and password<br />       restore.file.primaryAdminId=<strong><em>New Unique Admin ID</em></strong>&#160;    </p>
<p>       restore.file.primaryAdminPassword=<strong><em>Password</em></strong>    </p>
<p>       # CN of portal admin group (short name)<br />       restore.file.primaryPortalAdminGroup=adminGroupCN    </p>
<h4>       4) run ConfigEngine.sh    </h4>
<p>       <em><strong>Profile</strong></em>/ConfigEngine/ConfigEngine.sh wp-restore-default-repository-configuration    </p>
<h4>       5) Turn on security (reversing step 1)    </h4>
<h4>       6) shutdown (or kill) portal    </h4>
<h4>       7) startup portal.    </h4>
<p>       You should now see your portal server running without using LDAP.    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rojotek.com/blog/2009/11/16/resetting-ibm-websphere-portal-61-security/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Reducing the Startup time for IBM WebSphere Portal</title>
		<link>http://www.rojotek.com/blog/2008/09/10/reducing-the-startup-time-for-ibm-websphere-portal/</link>
		<comments>http://www.rojotek.com/blog/2008/09/10/reducing-the-startup-time-for-ibm-websphere-portal/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 02:41:47 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[WebSphere Portal]]></category>

		<guid isPermaLink="false">http://www.rojotek.com/blog/2008/09/10/reducing-the-startup-time-for-ibm-websphere-portal/</guid>
		<description><![CDATA[After spending too much time today waiting for WebSphere Portal to restart (due to a nasty bug causing Portal to crash when I was working with it) I&#39;ve been revisiting how to improve the startup time. The key step in doing this is to uninstall portlets that aren&#39;t needed. (see http://www-01.ibm.com/support/docview.wss?rs=899&#38;uid=swg21213982&#38;ca=lsall for a list). For [...]]]></description>
			<content:encoded><![CDATA[<p>
       After spending too much time today waiting for WebSphere Portal to restart (due to a nasty bug causing Portal to crash when I was working with it) I&#39;ve been revisiting how to improve the startup time.
    </p>
<p>
       The key step in doing this is to uninstall portlets that aren&#39;t needed. (see <a href="http://www-01.ibm.com/support/docview.wss?rs=899&#38;uid=swg21213982&#38;ca=lsall">http://www-01.ibm.com/support/docview.wss?rs=899&#38;uid=swg21213982&#38;ca=lsall</a> for a list). For the lazy developers (read me) there are a series of scripts that have been developed that do this. The article <a href="http://www.ibm.com/developerworks/rational/library/07/0327_riordan/index.html">Installing and configuring WebSphere Portal V6.0 Servers for development with Rational Application Developer V7.0 and Rational Software Architect V7.0</a> includes these scripts in a zip file (search for StartupPerformanceConfig.zip in the article). The article also has some good suggestions for memory and jvm settings for your server.
    </p>
<p>
       I have known about the existence of this process for a little while, but it took me a little to find them just now (when tuning a development server). Google was have troubles pointing me to the right article, so I thought for my sake I&#39;d try and help google find this in the future. (Even if google did find the right spots, the title of the developerworks article wouldn&#39;t have made me think that it had the nugget of information about IBM WebSphere Portal Startup performance).
    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rojotek.com/blog/2008/09/10/reducing-the-startup-time-for-ibm-websphere-portal/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Programmatic Check for WebSphere Portal iFixes and Fixpacks</title>
		<link>http://www.rojotek.com/blog/2008/08/20/programmatic-check-for-websphere-portal-ifixes-and-fixpacks/</link>
		<comments>http://www.rojotek.com/blog/2008/08/20/programmatic-check-for-websphere-portal-ifixes-and-fixpacks/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 03:47:32 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[WebSphere Portal]]></category>

		<guid isPermaLink="false">http://www.rojotek.com/blog/2008/08/20/programmatic-check-for-websphere-portal-ifixes-and-fixpacks/</guid>
		<description><![CDATA[As the internet didn&#39;t seem to know how to programatically lookup the installed iFixes and Fixpacks for a PortalServer, I&#39;m going to share my solution, it the hope that someone can point me to a better way. What I was able to work out from trawling the net and poking around at the WebSphere portal [...]]]></description>
			<content:encoded><![CDATA[<p>
       <em>As the internet didn&#39;t seem to know how to programatically lookup the installed iFixes and Fixpacks for a PortalServer, I&#39;m going to share my solution, it the hope that someone can point me to a better way.</em>
    </p>
<p>
       What I was able to work out from trawling the net and poking around at the WebSphere portal installation is that the install history for iFixes and Fixpacks for Portal are stored in the directory %PORTAL_HOME%/version/history. This makes the process of finding the fix level a case of:&#160;
    </p>
<ol>
<li>
        &#160;Lookup the Portal home.&#160;
      </li>
<li>
        List the files in the version history directory.
      </li>
</ol>
<h3>
       Lookup the Portal Home<br />
    </h3>
<p>
       To lookup the portal home, use the fact that there is a WPS_HOME environment variable set in the WebSphere environment. Unfortunately looking up values in the WebSphere environment is non-trivial. The WebSphere environment is not made directly available, to access it you need to go through the WebSphere Admin service, and the WebSphere management mbeans.
    </p>
<p>
       The code to do this is:
    </p>
<pre style=" padding-left: 0.5cm; border-right-width: 1px; font-size: 10pt; font-family: &#39;Courier New&#39;; border-style: solid; border-top-width: 1px; padding-top: 0.5cm; border-bottom-width: 1px; border-left-width: 1px; padding-bottom: 0.5cm; padding-right: 0.5cm;">
com<span style=" color: #000000;">.</span>ibm<span style=" color: #000000;">.</span>websphere<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span>AdminService as <span style=" color: #000000;">=</span>
	com<span style=" color: #000000;">.</span>ibm<span style=" color: #000000;">.</span>websphere<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span>AdminServiceFactory<span style=" color: #000000;">.</span><span style=" color: #000000;">getAdminService</span><span style=" color: #000000;">();</span>
<span style=" color: #7f0055; font-weight: bold;">String</span> server <span style=" color: #000000;">=</span> as<span style=" color: #000000;">.</span><span style=" color: #000000;">getProcessName</span><span style=" color: #000000;">();</span>
javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span> serverName <span style=" color: #000000;">=</span>
    <span style=" color: #7f0055; font-weight: bold;">new</span> javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span><span style=" color: #000000;">(</span><span style=" color: #0000ff;">&quot;*:*,type=AdminOperations,process=&quot;</span> <span style=" color: #000000;">+</span> server<span style=" color: #000000;">);</span>
<span style=" color: #7f0055; font-weight: bold;">Set</span> objectNames <span style=" color: #000000;">=</span> as<span style=" color: #000000;">.</span><span style=" color: #000000;">queryNames</span><span style=" color: #000000;">(</span>servName<span style=" color: #000000;">,</span> null<span style=" color: #000000;">);</span>
javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span> objectName <span style=" color: #000000;">=</span>
    <span style=" color: #000000;">(</span>javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span><span style=" color: #000000;">)</span> objectNames<span style=" color: #000000;">.</span><span style=" color: #000000;">iterator</span><span style=" color: #000000;">().</span><span style=" color: #000000;">next</span><span style=" color: #000000;">();</span>
<span style=" color: #7f0055; font-weight: bold;">Object</span><span style=" color: #000000;">[]</span> args <span style=" color: #000000;">=</span> <span style=" color: #7f0055; font-weight: bold;">new</span> <span style=" color: #7f0055; font-weight: bold;">Object</span><span style=" color: #000000;">[] {</span><span style=" color: #0000ff;">&quot;${WPS_HOME}&quot;</span><span style=" color: #000000;">};</span>
<span style=" color: #7f0055; font-weight: bold;">String</span><span style=" color: #000000;">[]</span> signature <span style=" color: #000000;">=</span> <span style=" color: #7f0055; font-weight: bold;">new</span> <span style=" color: #7f0055; font-weight: bold;">String</span><span style=" color: #000000;">[] {</span><span style=" color: #0000ff;">&quot;java.lang.String&quot;</span><span style=" color: #000000;">};</span>
<span style=" color: #7f0055; font-weight: bold;">String</span> wpsHome <span style=" color: #000000;">=</span> as<span style=" color: #000000;">.</span><span style=" color: #000000;">invoke</span><span style=" color: #000000;">(</span>objectName<span style=" color: #000000;">,</span><span style=" color: #0000ff;">&quot;expandVariable&quot;</span><span style=" color: #000000;">,</span>args<span style=" color: #000000;">,</span> signature<span style=" color: #000000;">);</span>
</pre>
<p>
       The wpsHome variable will contain the string path to the websphere portal home directory.
    </p>
<h3>
       List the Files in the Version History Directory<br />
    </h3>
<p>
       After retrieving the portal home, it is possible to lookup the fixpacks in the ${WPS_HOME}/version/history directory.
    </p>
<p>
       The following code does this:
    </p>
<pre style=" padding-left: 0.5cm; border-right-width: 1px; font-size: 10pt; font-family: &#39;Courier New&#39;; border-style: solid; border-top-width: 1px; padding-top: 0.5cm; border-bottom-width: 1px; border-left-width: 1px; padding-bottom: 0.5cm; padding-right: 0.5cm;">
<span style=" color: #7f0055; font-weight: bold;">File</span> f <span style=" color: #000000;">=</span> <span style=" color: #7f0055; font-weight: bold;">new</span> <span style=" color: #7f0055; font-weight: bold;">File</span><span style=" color: #000000;">(</span>wpsHome <span style=" color: #000000;">+</span> <span style=" color: #7f0055; font-weight: bold;">File</span><span style=" color: #000000;">.</span>separatorChar <span style=" color: #000000;">+</span>
    <span style=" color: #0000ff;">&quot;version&quot;</span> <span style=" color: #000000;">+</span> <span style=" color: #7f0055; font-weight: bold;">File</span><span style=" color: #000000;">.</span>separatorChar <span style=" color: #000000;">+</span> <span style=" color: #0000ff;">&quot;history&quot;</span><span style=" color: #000000;">);</span>
<span style=" color: #7f0055; font-weight: bold;">String</span><span style=" color: #000000;">[]</span> children <span style=" color: #000000;">=</span> f<span style=" color: #000000;">.</span><span style=" color: #000000;">list</span><span style=" color: #000000;">();</span>
<span style=" color: #7f0055; font-weight: bold;">for</span> <span style=" color: #000000;">(</span><span style=" color: #7f0055; font-weight: bold;">int</span> i<span style=" color: #000000;">=</span><span style=" color: #000000;">0</span><span style=" color: #000000;">;</span>i<span style=" color: #000000;">&#60;</span>children<span style=" color: #000000;">.</span>length<span style=" color: #000000;">;</span>i<span style=" color: #000000;">++){</span>
	out<span style=" color: #000000;">.</span><span style=" color: #000000;">println</span><span style=" color: #000000;">(</span>children<span style=" color: #000000;">[</span>i<span style=" color: #000000;">]);</span>
<span style=" color: #000000;">}</span>
</pre>
<p>
       In summary the full code snippet for this is:
    </p>
<pre style=" padding-left: 0.5cm; border-right-width: 1px; font-size: 10pt; font-family: &#39;Courier New&#39;; border-style: solid; border-top-width: 1px; padding-top: 0.5cm; border-bottom-width: 1px; border-left-width: 1px; padding-bottom: 0.5cm; padding-right: 0.5cm;">
com<span style=" color: #000000;">.</span>ibm<span style=" color: #000000;">.</span>websphere<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span>AdminService as <span style=" color: #000000;">=</span>
	com<span style=" color: #000000;">.</span>ibm<span style=" color: #000000;">.</span>websphere<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span>AdminServiceFactory<span style=" color: #000000;">.</span><span style=" color: #000000;">getAdminService</span><span style=" color: #000000;">();</span>
<span style=" color: #7f0055; font-weight: bold;">String</span> server <span style=" color: #000000;">=</span> as<span style=" color: #000000;">.</span><span style=" color: #000000;">getProcessName</span><span style=" color: #000000;">();</span>
javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span> serverName <span style=" color: #000000;">=</span>
    <span style=" color: #7f0055; font-weight: bold;">new</span> javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span><span style=" color: #000000;">(</span><span style=" color: #0000ff;">&quot;*:*,type=AdminOperations,process=&quot;</span> <span style=" color: #000000;">+</span> server<span style=" color: #000000;">);</span>
<span style=" color: #7f0055; font-weight: bold;">Set</span> objectNames <span style=" color: #000000;">=</span> as<span style=" color: #000000;">.</span><span style=" color: #000000;">queryNames</span><span style=" color: #000000;">(</span>servName<span style=" color: #000000;">,</span> null<span style=" color: #000000;">);</span>
javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span> objectName <span style=" color: #000000;">=</span>
    <span style=" color: #000000;">(</span>javax<span style=" color: #000000;">.</span>management<span style=" color: #000000;">.</span><span style=" color: #7f0055; font-weight: bold;">ObjectName</span><span style=" color: #000000;">)</span> objectNames<span style=" color: #000000;">.</span><span style=" color: #000000;">iterator</span><span style=" color: #000000;">().</span><span style=" color: #000000;">next</span><span style=" color: #000000;">();</span>
<span style=" color: #7f0055; font-weight: bold;">Object</span><span style=" color: #000000;">[]</span> args <span style=" color: #000000;">=</span> <span style=" color: #7f0055; font-weight: bold;">new</span> <span style=" color: #7f0055; font-weight: bold;">Object</span><span style=" color: #000000;">[] {</span><span style=" color: #0000ff;">&quot;${WPS_HOME}&quot;</span><span style=" color: #000000;">};</span>
<span style=" color: #7f0055; font-weight: bold;">String</span><span style=" color: #000000;">[]</span> signature <span style=" color: #000000;">=</span> <span style=" color: #7f0055; font-weight: bold;">new</span> <span style=" color: #7f0055; font-weight: bold;">String</span><span style=" color: #000000;">[] {</span><span style=" color: #0000ff;">&quot;java.lang.String&quot;</span><span style=" color: #000000;">};</span>
<span style=" color: #7f0055; font-weight: bold;">String</span> wpsHome <span style=" color: #000000;">=</span> as<span style=" color: #000000;">.</span><span style=" color: #000000;">invoke</span><span style=" color: #000000;">(</span>objectName<span style=" color: #000000;">,</span><span style=" color: #0000ff;">&quot;expandVariable&quot;</span><span style=" color: #000000;">,</span>args<span style=" color: #000000;">,</span> signature<span style=" color: #000000;">);</span>

<span style=" color: #7f0055; font-weight: bold;">File</span> f <span style=" color: #000000;">=</span> <span style=" color: #7f0055; font-weight: bold;">new</span> <span style=" color: #7f0055; font-weight: bold;">File</span><span style=" color: #000000;">(</span>wpsHome <span style=" color: #000000;">+</span> <span style=" color: #7f0055; font-weight: bold;">File</span><span style=" color: #000000;">.</span>separatorChar <span style=" color: #000000;">+</span>
    <span style=" color: #0000ff;">&quot;version&quot;</span> <span style=" color: #000000;">+</span> <span style=" color: #7f0055; font-weight: bold;">File</span><span style=" color: #000000;">.</span>separatorChar <span style=" color: #000000;">+</span> <span style=" color: #0000ff;">&quot;history&quot;</span><span style=" color: #000000;">);</span>
<span style=" color: #7f0055; font-weight: bold;">String</span><span style=" color: #000000;">[]</span> children <span style=" color: #000000;">=</span> f<span style=" color: #000000;">.</span><span style=" color: #000000;">list</span><span style=" color: #000000;">();</span>
<span style=" color: #7f0055; font-weight: bold;">for</span> <span style=" color: #000000;">(</span><span style=" color: #7f0055; font-weight: bold;">int</span> i<span style=" color: #000000;">=</span><span style=" color: #000000;">0</span><span style=" color: #000000;">;</span>i<span style=" color: #000000;">&#60;</span>children<span style=" color: #000000;">.</span>length<span style=" color: #000000;">;</span>i<span style=" color: #000000;">++){</span>
	out<span style=" color: #000000;">.</span><span style=" color: #000000;">println</span><span style=" color: #000000;">(</span>children<span style=" color: #000000;">[</span>i<span style=" color: #000000;">]);</span>
<span style=" color: #000000;">}</span>
</pre>
<p>
       The work of mapping file names to the installed fix packs/iFixes is left as an exercise for the reader.
    </p>
<p>
       Does anyone know if there is a better way of dong this?
    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rojotek.com/blog/2008/08/20/programmatic-check-for-websphere-portal-ifixes-and-fixpacks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Automating Deployment to IBM WebSphere Portal</title>
		<link>http://www.rojotek.com/blog/2008/05/22/automating-deployment-to-ibm-websphere-portal/</link>
		<comments>http://www.rojotek.com/blog/2008/05/22/automating-deployment-to-ibm-websphere-portal/#comments</comments>
		<pubDate>Thu, 22 May 2008 23:40:35 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[WebSphere Portal]]></category>

		<guid isPermaLink="false">http://www.rojotek.com/blog/2008/05/22/automating-deployment-to-ibm-websphere-portal/</guid>
		<description><![CDATA[Having an automated deployment procedure is an important goal for any project. This post talks about the the steps taken in making E2 autodeploy to WebSphere Portal in Development. &#160;The below process assumes that the application has been deployed once through other means. After a friendly pointer from AJ to an article about automating websphere [...]]]></description>
			<content:encoded><![CDATA[<p>       <em>Having an automated deployment procedure is an important goal for any project. This post talks about the the steps taken in making E2 autodeploy to WebSphere Portal in Development. &#160;The below process assumes that the application has been deployed once through other means.</em>    </p>
<p>       After a friendly pointer from AJ to an article about <a href="http://lresende.blogspot.com/2008/02/automating-websphere-with-maven-and.html">automating websphere deployment</a>, I decided that the time had come to revisit trying to automate the deployment of our <span class="caps">EAR</span> file for E2. I had done bits and pieces of thi in the past using a combination of the WebSphere scripting client, and the WebSphere ant tool (like ant but built with WebSphere bits and pieces). The killer constraint for me is that my client machine didn’t have access to any of the WebSphere binaries (perhaps unsuprisingly Apple and <span class="caps">IBM</span> have don’t perfectly interoperate).    </p>
<p>       In order to work around thi sproblem I ended up leveraging one of the classic protocols (telnet), the websphere scripting client, samba (to mount the application server drives), and a bit of ant to glue it all together. The process outlined below is focused around the deployment of the application E2Application to WebSphere portal.    </p>
<h3>       Step 1: Enable telnet    </h3>
<p>       In Windows Server 2003 this is relatively straightforward. Simply go to your control panel -&#62; services -&#62; Telnet go to the properties, make it automatic and start it.    </p>
<h3>       Step 2: Write scripts to start and stop the app server    </h3>
<p>       I did this using tcl and ended up with the following scripts (the pythonistas may like to use jython to do the same):    </p>
<p>       <strong>stopApplication.jacl</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#160;</div></td></tr></tbody></table></div>
</p>
<p><div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">set cell [$AdminControl getCell]&lt;br /&gt; &nbsp; &nbsp; &nbsp; set node [$AdminControl getNode]&lt;br /&gt; &nbsp; &nbsp; &nbsp; set appManager</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[$AdminControl queryNames</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cell=$cell,node=$node,type=ApplicationManager,process=WebSphere_Portal,*]&lt;br /&gt; &nbsp; &nbsp; &nbsp; $AdminControl invoke $appManager stopApplication E2Application&lt;br /&gt;</div></td></tr></tbody></table></div>
</p>
<p>       <strong>startApplication.jacl</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#160;</div></td></tr></tbody></table></div>
</p>
<p><div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">set cell [$AdminControl getCell]&lt;br /&gt; &nbsp; &nbsp; &nbsp; set node [$AdminControl getNode]&lt;br /&gt; &nbsp; &nbsp; &nbsp; set appManager</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[$AdminControl queryNames</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cell=$cell,node=$node,type=ApplicationManager,process=WebSphere_Portal,*]&lt;br /&gt; &nbsp; &nbsp; &nbsp; $AdminControl invoke $appManager startApplication E2Application&lt;br /&gt;</div></td></tr></tbody></table></div>
</p>
<h3>       Step 3: Write the ant code to compile and copy the application    </h3>
<p>       After the series of standard building tasks, we used a simple <a href="http://ant.apache.org/manual/CoreTasks/copy.html">copy</a> task to copy the files to the exploded <span class="caps">WAR</span> directory on the server. (something like: ${portal.home}/WebSphere/profiles/wp_profile/installedApps/{cell}/{application}.ear/{app_war}.war). Since I develop on a laptop I added in a combination of <a href="http://ant.apache.org/manual/CoreTasks/available.html">available</a> and <a href="http://ant.apache.org/manual/CoreTasks/fail.html">fail</a> task to stop me from accidently creating directories if I hadn’t mounted m    </p>
<h3>       Step 4: use ant to telnet to the server    </h3>
<p>       Make use of the <a href="http://ant.apache.org/manual/OptionalTasks/telnet.html">telnet</a>&#160;ant task<a href="#footnote1:1211499024787" class="footnote" name="footlink1:1211499024787" id="footlink1:1211499024787">1</a> to telnet into the server, and run the stop and start server jacl scripts. My Ant targets (passwords scrubbed) are below (excuse the duplication):    </p>
<p><div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;target name=&amp;quot;startApplication&amp;quot;&amp;#62;</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;telnet userid=&amp;quot;Administrator&amp;quot; password=&amp;quot;${portal_admin_password}&amp;quot; server=&amp;quot;${portal_server}&amp;quot;&amp;#62;&lt;br /&gt; &nbsp; &nbsp; &nbsp; &amp;#160;&amp;#160;&amp;#160;&amp;#60;read&amp;#62;Administrator&amp;#60;/read&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;!&#8211; change to the IBM&#160;AppServer directory &#8211;&#62;<br />       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;write&amp;#62;cd \ibm\AppServer\bin&amp;#60;/write&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;read&amp;#62;AppServer\bin&amp;#60;/read&amp;#62;</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;!&#8211; Execute the jacl &#8211;&#62;<br />       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;write&amp;#62;wsadmin -conntype SOAP -port 10033</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-username wasadmin -password **** -f startApplication.jacl&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;/write&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;!&#8211; wait for the connected to process message, which will occur on the successful completion of the script &#8211;&#62;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;read&amp;#62;Connected to process&amp;#60;/read&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;read&amp;#62;AppServer\bin&amp;#60;/read&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;/telnet&amp;#62;&lt;br /&gt; &nbsp; &nbsp; &nbsp; &amp;#60;/target&amp;#62;</div></td></tr></tbody></table></div>
</p>
<p><div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;br /&gt; &nbsp; &nbsp; &nbsp; &amp;#60;target name=&amp;quot;stopApplication&amp;quot;&amp;#62;</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;telnet userid=&amp;quot;Administrator&amp;quot; password=&amp;quot;${portal_admin_password}&amp;quot; server=&amp;quot;${portal_server}&amp;quot;&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;read&amp;#62;Administrator&amp;#60;/read&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;!&#8211; change to the IBM&#160;AppServer directory &#8211;&#62;<br />       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;write&amp;#62;cd \ibm\AppServer\bin&amp;#60;/write&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;read&amp;#62;AppServer\bin&amp;#60;/read&amp;#62;</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;!&#8211; Execute the jacl &#8211;&#62;<br />       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;write&amp;#62;wsadmin -conntype SOAP -port 10033</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-username wasadmin -password **** -f stopApplication.jacl&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;/write&amp;#62;</div></td></tr></tbody></table></div>
<p>       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;!&#8211; wait for the connected to process message, which will occur on the successful completion of the script &#8211;&#62;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;read&amp;#62;Connected to process&amp;#60;/read&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;read&amp;#62;AppServer\bin&amp;#60;/read&amp;#62;&lt;br /&gt;</div></td></tr></tbody></table></div>
<p>&#160;&#160;&#160;&#160;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;#60;/telnet&amp;#62;&lt;br /&gt; &nbsp; &nbsp; &nbsp; &amp;#60;/target&amp;#62;</div></td></tr></tbody></table></div>
</p>
<h3>       Step 5    </h3>
<p>       mix ingredients and enjoying being able to have a one click deploy to WebSphere Portal.    </p>
<h3>       Appendix    </h3>
<p>       For security paranoid people with time on their hands, it is possible to do this using ssh and scp. The key parts will be step 3 and step 4. In step 3 we are using folder share and the ant copy task currently. It could be done with <a href="http://ant.apache.org/manual/OptionalTasks/scp.html">scp</a>. In step 4 the use of telnet could be replaced with <a href="http://ant.apache.org/manual/OptionalTasks/sshexec.html">ssh</a>.    </p>
<p class="footnote">       <a href="#footlink1:1211499024787" name="footnote1:1211499024787" id="footnote1:1211499024787">1</a> &#8211; The telnet task depends on the availability of the commons-net jar on the classpath. (<a href="http://commons.apache.org/net/index.html">click here to download commons-net</a>).<a class="footnotereturn" href="#footlink1:1211499024787">↩</a>    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rojotek.com/blog/2008/05/22/automating-deployment-to-ibm-websphere-portal/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Setting up Oracle XE to work with IBM WebSphere Portal IWWCM</title>
		<link>http://www.rojotek.com/blog/2008/05/21/setting-up-oracle-xe-to-work-with-ibm-websphere-portal-iwwcm/</link>
		<comments>http://www.rojotek.com/blog/2008/05/21/setting-up-oracle-xe-to-work-with-ibm-websphere-portal-iwwcm/#comments</comments>
		<pubDate>Wed, 21 May 2008 07:11:20 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[WebSphere Portal]]></category>

		<guid isPermaLink="false">http://www.rojotek.com/blog/2008/05/21/setting-up-oracle-xe-to-work-with-ibm-websphere-portal-iwwcm/</guid>
		<description><![CDATA[In order to make the Oracle XE database work with IBM WebSphere Portal IWWCM there are a number of steps to perform. Ensure that the database is accessible using the Oracle SID (see the early post Oracle SID!=Service name) Next you will need to increase the number of proceses that can be connected to the [...]]]></description>
			<content:encoded><![CDATA[<p>       In order to make the Oracle XE database work with IBM WebSphere Portal IWWCM there are a number of steps to perform.    </p>
<ol>
<li>        Ensure that the database is accessible using the Oracle SID (see the early post <a href="http://www.rojotek.com/blog/2008/01/04/oracle-sid-service_name/">Oracle SID!=Service name</a>)      </li>
<li>        Next you will need to increase the number of proceses that can be connected to the instance, as there are a large number of connection pools set up by the system, which the database will need to support. The following command worked in my environment:
<pre>    ALTER SYSTEM SET PROCESSES=150 SCOPE=SPFILE;</pre>
</li>
<li>        After having performed these base setup commands and options, you can run the IWWCM migration scripts to migrate existing data.      </li>
<li>        To ensure that the connection pooling works correctly, you will need to grant the following privileges to public:
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grant select on pending_trans$ to public;</div></td></tr></tbody></table></div>
<p></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grant select on dba_2pc_pending to public;</div></td></tr></tbody></table></div>
<p></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grant select on dba_pending_transactions to public;</div></td></tr></tbody></table></div>
<p>      </li>
<li>        Finally, grant the following privilege to each user to which connections are made from the application server.
<pre>    grant execute on dbms_system to &#60;user&#62;;</pre>
</li>
</ol>
<p>       After having performed these steps you will have an Oracle XE database that will work happily with IWWCM.    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rojotek.com/blog/2008/05/21/setting-up-oracle-xe-to-work-with-ibm-websphere-portal-iwwcm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle SID != SERVICE_NAME</title>
		<link>http://www.rojotek.com/blog/2008/01/04/oracle-sid-service_name/</link>
		<comments>http://www.rojotek.com/blog/2008/01/04/oracle-sid-service_name/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 12:14:32 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[WebSphere Portal]]></category>

		<guid isPermaLink="false">http://www.rojotek.com/blog/2008/01/04/oracle-sid-service_name/</guid>
		<description><![CDATA[&#8230; or how to setup your Oracle XE database so that JDBC database urls will work like they traditionally have. For many years Oracle has been telling everyone Oracle SID != SERVICE_NAME. Java Developers have always smiled and nodded with this statement as the oracle thin client jdbc url would always be something like: jdbc:oracle:thin:@server:1521:SERVICE_NAME, [...]]]></description>
			<content:encoded><![CDATA[<p>
       <em>&#8230; or how to setup your Oracle XE database so that <span class="caps">JDBC</span> database urls will work like they traditionally have.</em>
    </p>
<p>
       For many years Oracle has been telling everyone Oracle <span class="caps">SID</span> != <span class="caps">SERVICE</span>_NAME.
    </p>
<p>
       Java Developers have always smiled and nodded with this statement as the oracle thin client jdbc url would always be something like:
    </p>
<p>
       jdbc:oracle:thin:@server:1521:SERVICE_NAME, or<br />
       jdbc:oracle:thin:@server:1521:SID&#160;
    </p>
<p>
       which would work because databases always either had the <span class="caps">SID</span> and <span class="caps">SERVICE</span>_NAME as the same, or there was some magic that the Oracle listeners did to make this work.
    </p>
<p>
       Somewhere in the past couple of releases of Oracle this transparent mapping has ceased to exist. In particular Oracle 10G XE out of the box doesn’t support this sort of option.
    </p>
<p>
       It seems the new preferred way of doing Oracle <span class="caps">JDBC</span> URLs is:<br />
       jdbc:oracle:thin:@server:1521/SERVICE_NAME.
    </p>
<p>
       I discovered this information while working with making a WebSphere Portal instance use Oracle as it’s data repository. The documentation for doing this suggested using the old school SID&#160;style of url. &#160;I tried this first as it felt familiar, but things didn&#39;t work. &#160;Changing the url to use the <strong>PORT/SERVICE_NAME</strong> approach looked to mostly work, but didn’t quite spread the changes to everywhere required. I needed to run <strong>WPSConfig connect-database</strong> to update all the hidden bits of configuration around the portal installation. Unfortunately, this failed as the wpsconfig script calls out to programs that expect the url to follow the old school syntax (the stack trace show an index-out-of-bounds exception while parsing connect srings). I then had to go in and update the configuration on the database to enable connection via the old <span class="caps">SID</span> style approach.
    </p>
<p>
       This was done by working on the listener.ora file<br />
       (C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN) to add in a <span class="caps">SID</span>_LIST_LISTENER entry for the database.
    </p>
<p>
       This was simply to add:<br />
       (SID_DESC =<br />
       &#160;&#160;&#160;&#160;(GLOBAL_NAME = XE)<br />
       &#160;&#160;&#160;&#160;(SID_NAME = XE)<br />
       &#160;&#160;&#160;&#160;(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)<br />
       )
    </p>
<p>
       to the <span class="caps">SID</span>_LIST of the <span class="caps">SID</span>_LIST_LISTENER
    </p>
<p>
       I ended up with a <span class="caps">SID</span>_LIST_LISTENER that looks like this:
    </p>
<p>
       <span class="caps">SID</span>_LIST_LISTENER =<br />
       &#160;&#160;&#160;&#160;(SID_LIST =<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SID_DESC =<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SID_NAME = PLSExtProc)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(PROGRAM = extproc)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SID_DESC =<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SID_NAME = CLRExtProc)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(PROGRAM = extproc)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SID_DESC =<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(GLOBAL_NAME = XE)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SID_NAME = XE)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;)<br />
       &#160;&#160;&#160;&#160;)
    </p>
<p>
       This configuration works with an out of the box Oracle XE installation, and lets me use the jdbc:oracle:thin:@server:1521:SID.
    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rojotek.com/blog/2008/01/04/oracle-sid-service_name/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Why Use a Sledgehammer When There is a Bulldozer Lying Around</title>
		<link>http://www.rojotek.com/blog/2007/10/17/why-use-a-sledgehammer-when-there-is-a-bulldozer-lying-around/</link>
		<comments>http://www.rojotek.com/blog/2007/10/17/why-use-a-sledgehammer-when-there-is-a-bulldozer-lying-around/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 22:41:03 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[WebSphere Portal]]></category>

		<guid isPermaLink="false">http://www.rojotek.com/blog/2007/10/17/why-use-a-sledgehammer-when-there-is-a-bulldozer-lying-around/</guid>
		<description><![CDATA[Or finding which websphere portal shared jar contains the class you need. When trying to find which WebSphere portal jar file contains the PortletServiceHome class (for the unitiated there are 225 jars in the portal shared directory), I was pushing my very rusty shell scripting skills. &#160;I pulled in Doug for some advice, and we [...]]]></description>
			<content:encoded><![CDATA[<p>
       <em>Or finding which websphere portal shared jar contains the class you need.</em>
    </p>
<p>
       When trying to find which WebSphere portal jar file contains the PortletServiceHome class (for the unitiated there are 225 jars in the portal shared directory), I was pushing my very rusty shell scripting skills. &#160;I pulled in <a href="http://www.trontos.com/dsouth/blog">Doug</a> for some advice, and we were working through various sledgehammer approaches and talking to google about what to do. &#160;We were playing with various combinations of pipes and shell commands to get the output of the find (or ls) to play with the jar tvf and grep.
    </p>
<p>
       <a href="http://www.symphonious.net">AJ</a>&#160;then piped in with just use grep, and he really meant.. just use grep, and take advantage of the fact that the contents of the jar will be listed in plain text in the jar.
    </p>
<p>
       The command I ended up with was (running in PortalServer/shared/app):
    </p>
<p>
       <strong>grep PortletServiceHome *.jar</strong>
    </p>
<p>
       Which returns:<br />
       <strong>Binary file wp.pe.api.standard.jar matches</strong><br />
       <strong>Binary file wp.pe.rt.impl.jar matches</strong>
    </p>
<p>
       Then running jar -tvf across the first jar shows that this is what I need to compile against and work with when developing.
    </p>
<p>
       The bulldozer of a grep across jars is the best way to find which jar contains a class that you are looking for<a id="footlink1-1192660776182" name="footlink1-1192660776182" class="footnote" href="#footnote1-1192660776182">1</a>.
    </p>
<p class="footnote">
       <a id="footnote1-1192660776182" name="footnote1-1192660776182" href="#footlink1-1192660776182">1</a> &#8211; While this feels really inefficient, it is actually better than having to spawn off multiple the jar processes which other approaches would involve. <a class="footnotereturn" href="#footlink1-1192660776182">&#8617;</a>
    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rojotek.com/blog/2007/10/17/why-use-a-sledgehammer-when-there-is-a-bulldozer-lying-around/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

