<?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/"
	>

<channel>
	<title>Ecovations Blog</title>
	<atom:link href="http://www.ecovations.de/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.ecovations.de/blog</link>
	<description>tech notes by konrad wulf</description>
	<pubDate>Fri, 13 Aug 2010 08:42:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to get current page id from within a portlet in WebSphere Portal</title>
		<link>http://www.ecovations.de/blog/?p=177</link>
		<comments>http://www.ecovations.de/blog/?p=177#comments</comments>
		<pubDate>Thu, 22 Jul 2010 14:26:40 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=177</guid>
		<description><![CDATA[Here&#8217;s how to get current Page Id from within a portlet in WebSphere Portal 6.1:

NavigationSelectionModel navModel = // see http://publib.boulder.ibm.com/infocenter/wpdoc/v6r1/index.jsp?topic=/com.ibm.wp.ent.doc_v6101/dev/dgn_modelxmp.html on how to get the NavigationSelectionModel
            NavigationNode navNode = (NavigationNode) navModel.getSelectedNode();
            if (navNode [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s how to get current Page Id from within a portlet in WebSphere Portal 6.1:</p>
<pre class="java" name="code">
NavigationSelectionModel navModel = // see http://publib.boulder.ibm.com/infocenter/wpdoc/v6r1/index.jsp?topic=/com.ibm.wp.ent.doc_v6101/dev/dgn_modelxmp.html on how to get the NavigationSelectionModel
            NavigationNode navNode = (NavigationNode) navModel.getSelectedNode();
            if (navNode != null) {
                ContentNode contentNode = navNode.getContentNode();
                if (contentNode != null) {
                    pageId = contentNode.getObjectID();
                }
            }
</pre>
<p>The Servlet Request can be accessed via com.ibm.wsspi.portletcontainer.portlet.PortletUtils.getHttpServletRequest(javax.portlet.PortletRequest).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=177</wfw:commentRss>
		</item>
		<item>
		<title>Facilitating WebDAV usage on Windows XP</title>
		<link>http://www.ecovations.de/blog/?p=170</link>
		<comments>http://www.ecovations.de/blog/?p=170#comments</comments>
		<pubDate>Sat, 20 Mar 2010 12:27:06 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[WebDAV]]></category>

		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=170</guid>
		<description><![CDATA[The default WebDAV client on Windows XP is not as usable as it could be. But luckily you can turn web folders into fully featured network drives by applying some more configuration. I just learned that from this blog and the Simple Groupware WebDAV Server web site. Really good to know when working with WebDAV [...]]]></description>
			<content:encoded><![CDATA[<p>The default WebDAV client on Windows XP is not as usable as it could be. But luckily you can turn web folders into fully featured network drives by applying some more configuration. I just learned that from this <a href="http://smallvoid.com/article/winnt-webdav-network-drive.html">blog</a> and the <a href="http://www.simple-groupware.de/cms/WebDAV">Simple Groupware WebDAV Server web site</a>. Really good to know when working with WebDAV on windows, I believe. </p>
<p>Here is a summary How-to:<span id="more-170"></span></p>
<p>There are <em>two additional prerequisites</em> your wedav server needs to fulfill though, in order to be able to use the web dav server as mapped network drive with the default webdav client (called Mini-Redirector) on windows XP:</p>
<ul>
<li>it can only use the standard http ports (80/443)</li>
<li>the first path segment after the server name is expected to be the webdav root folder, e.g. <code>http://server.name/root-webdav-folder</code> can be embedded as network drive, but not <code>http://server.name/path/to/my/root-webdav-folder</code>.</li>
</ul>
<p>On your Windows XP desktop, perform two simple steps to <em>make webdav a fully featured network drive</em> for your Win XP workstation (supposing your webdav server uses http basic authentication):</p>
<p>1) edit the windows registry (run > regedit) and add this setting<br />
(or place these two lines in a *.reg file and double-click):</p>
<pre name="code" class="java">
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"UseBasicAuth"=dword:00000001
</pre>
<p>2) from the command line issue:</p>
<pre name="code" class="java">net use x: "http://my.server.com/subfolder/" myPassword /User:myUser /persistent:yes</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=170</wfw:commentRss>
		</item>
		<item>
		<title>Disable built-in ZIP Support on Windows XP</title>
		<link>http://www.ecovations.de/blog/?p=159</link>
		<comments>http://www.ecovations.de/blog/?p=159#comments</comments>
		<pubDate>Thu, 10 Dec 2009 13:28:30 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=159</guid>
		<description><![CDATA[Windows XP has built-in ZIP support to manage and explore ZIP archives, which can slow down folder browsing considerably. It is possible to disable the built-in ZIP support in Windows XP. Here is how to do it:

Bring up a command prompt window, e.g. by issuing cmd in &#8220;Run&#8230;&#8221; command box in the Start Menu. Then [...]]]></description>
			<content:encoded><![CDATA[<p>Windows XP has built-in ZIP support to manage and explore ZIP archives, which can slow down folder browsing considerably. It is possible to disable the built-in ZIP support in Windows XP. Here is how to do it:<br />
<span id="more-159"></span><br />
Bring up a command prompt window, e.g. by issuing <code>cmd</code> in &#8220;Run&#8230;&#8221; command box in the Start Menu. Then type the following command and hit “Enter” key in the Command Prompt window shell:</p>
<p><code>regsvr32 /u zipfldr.dll</code></p>
<p>But running the command above is not enough to permanently disable this feature. The zipped files are no longer listed as folders in Windows Explorer folder tree when expanded, but sometimes the settings get reverted, especially when users double-click on any .ZIP file. To avoid this problem, and ensure that built-in ZIP support is totally and permanently disabled in XP, continue with the steps below after running unregistration command above.</p>
<p>* Run Registry Editor (<code>RegEdit.exe</code> in Run command), and search for <code>Zipfldr.dll</code> in the registry. Delete all instances of <code>Zipfldr.dll</code> found. There should be only one instance of it after unregistering.</p>
<p>* Reboot the computer system to unload the DLL from memory, in case it still persists.</p>
<p>* Delete or rename <code>Zipfldr.dll</code> file from <code>\Windows\System32\DLLCache\</code> folder.</p>
<p>* Delete or rename <code>Zipfldr.dll</code> file from <code>\Windows\System32\</code> folder. When prompted by WFP (Windows File Protection) saying that system stability may be affected, answer “No” or click “OK” on the dialog window pop up.</p>
<p>* Install your favorite ZIP program, e.g. 7-Zip, which is my preferred choice. Ensure that .ZIP extension is associated with the program. </p>
<p>(adapted from: <a href="http://forums.techarena.in/tips-tweaks/934175.htm">http://forums.techarena.in/tips-tweaks/934175.htm</a> => it worked well for me)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=159</wfw:commentRss>
		</item>
		<item>
		<title>Linux cheat sheet</title>
		<link>http://www.ecovations.de/blog/?p=146</link>
		<comments>http://www.ecovations.de/blog/?p=146#comments</comments>
		<pubDate>Tue, 03 Nov 2009 14:10:12 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=146</guid>
		<description><![CDATA[Empty an existing file: (see also here):
tail -5 my.log &#62; my.log
Trigger a process and let it run while you&#8217;re logging out again (see also here):
nohup &#60;command&#62; &#38;
or, for being able to reattach later, start with

type screen and submit
trigger your longer-running process
detach with the sequence ctrl + a and ctrl + d
logout
later, when logging in again, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Empty an existing file:</strong> (see also <a href="http://www.wallpaperama.com/forums/how-to-empty-a-large-file-in-linux-witout-deleting-shell-command-delete-t732.html">here</a>):<br />
<code>tail -5 my.log &gt; my.log</code></p>
<p><strong>Trigger a process and let it run while you&#8217;re logging out again</strong> (see also <a href="http://www.linuxforums.org/forum/redhat-fedora-linux-help/43711-help-running-process-bg-logout-persist-woes-s.html">here</a>):<br />
<code>nohup &lt;command&gt; &amp;</code><br />
or, for being able to reattach later, start with</p>
<ol>
<li>type <code>screen</code> and submit</li>
<li>trigger your longer-running process</li>
<li>detach with the sequence <code>ctrl + a</code> and <code>ctrl + d</code></li>
<li>logout</li>
<li>later, when logging in again, you can reattach to that console session with:<br />
<code>screen -r</code></li>
</ol>
<p>for the latter, see also <a href="http://www.novell.com/coolsolutions/tip/16365.html">this tip</a>.</p>
<p><strong>Symbolic links</strong> (see also <a href="http://en.wikipedia.org/wiki/Symbolic_link">here</a>): </p>
<ul>
<li><em>Creation:</em>  <code>ln -s target link_name</code></li>
<li><em>Removal:</em> simply delete it using e.g. <code>rm</code>. It is a file of its own and deletion will not affect the target it is pointing at.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=146</wfw:commentRss>
		</item>
		<item>
		<title>Setting up SSL for http client with IBM JSSE</title>
		<link>http://www.ecovations.de/blog/?p=139</link>
		<comments>http://www.ecovations.de/blog/?p=139#comments</comments>
		<pubDate>Fri, 30 Oct 2009 10:10:36 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[IBM Java]]></category>

		<category><![CDATA[security]]></category>

		<category><![CDATA[websphere]]></category>

		<category><![CDATA[wsadmin]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=139</guid>
		<description><![CDATA[If you want to set up a java http client to use SSL and you&#8217;re using an IBM JDK / WebSphere and have a wsadmin  installation on the machine where the http client is running: 

Here&#8217;s an easy solution for setting up client-side SSL. Instead of doing the usual javax.net.ssl key store declarations and [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to set up a java http client to use SSL and you&#8217;re using an IBM JDK / WebSphere and have a <code>wsadmin </code> installation on the machine where the http client is running: </p>
<ul>
<li>Here&#8217;s an easy solution for setting up client-side SSL. Instead of doing the usual <code>javax.net.ssl</code> key store declarations and more, you can simply set one single system property <code>com.ibm.SSL.ConfigURL</code> to point to the <code>ssl.client.props</code> in the <code>%WSADMIN_HOME%/properties</code> folder</li>
</ul>
<p>I have learned about this in <a href="http://www.ibm.com/developerworks/forums/message.jspa?messageID=14049899#14049899">another forum post</a> - and after that I also found the <a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rsec_sslclientpropsfile.html">corresponding official documentation</a>.</p>
<p>It worked fine in my case and I find it an elegant solution&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=139</wfw:commentRss>
		</item>
		<item>
		<title>Accessing Portlet MBeans on WAS 6.1+</title>
		<link>http://www.ecovations.de/blog/?p=133</link>
		<comments>http://www.ecovations.de/blog/?p=133#comments</comments>
		<pubDate>Thu, 14 May 2009 06:31:19 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[JMX]]></category>

		<category><![CDATA[MBeans]]></category>

		<category><![CDATA[Portlets]]></category>

		<category><![CDATA[websphere]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=133</guid>
		<description><![CDATA[In the developerworks article series on exploiting the portlet container in the websphere application server, there is something I want to comment about. It is about the section on accessing meta information about portlets via MBeans:

In the code sample, the MBeans are retrieved via an AdminClient using a soap connection, whereas
if the portlets you want [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0610_hesmer/0610_hesmer.html">developerworks article series on exploiting the portlet container in the websphere application server</a>, there is something I want to comment about. It is about the <a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0607_hesmer/0607_hesmer2.html#N101D0">section on accessing meta information about portlets</a> via MBeans:</p>
<ul>
<li>In the code sample, the MBeans are retrieved via an <code>AdminClient</code> using a soap connection, whereas</li>
<li>if the portlets you want to query about reside on the same server, you can access them more directly via the <code>AdminServiceFactory</code> <a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rport_mbeans.html">as described e.g. in the info center</a></li>
</ul>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=133</wfw:commentRss>
		</item>
		<item>
		<title>Optional Features in JSR-286</title>
		<link>http://www.ecovations.de/blog/?p=128</link>
		<comments>http://www.ecovations.de/blog/?p=128#comments</comments>
		<pubDate>Wed, 08 Apr 2009 11:42:17 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[JSR-286]]></category>

		<category><![CDATA[Portlets]]></category>

		<category><![CDATA[specification]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=128</guid>
		<description><![CDATA[It is sometimes not so easy to find out in a specification, which features are mandatory and which are not, even when you are precisely interpreting words like &#8216;MAY&#8217;, &#8216;SHOULD&#8217; or &#8216;MUST&#8217;. I have browsed through the web and couldn&#8217;t find any summary for optional features in the JSR 286 spec. So I compiled one [...]]]></description>
			<content:encoded><![CDATA[<p>It is sometimes not so easy to find out in a specification, which features are mandatory and which are not, even when you are precisely interpreting words like &#8216;MAY&#8217;, &#8216;SHOULD&#8217; or &#8216;MUST&#8217;. I have browsed through the web and couldn&#8217;t find any summary for optional features in the JSR 286 spec. So I compiled one myself from the <a href="http://jcp.org/en/jsr/detail?id=286">spec</a> that should be complete. If not, please don&#8217;t hesitate to drop me a note.</p>
<ul>
<li>Container runtime options, except for javax.portlet.actionScopedRequestAttributes</li>
<li>Setting of html head section elements via the MimeResponse.MARKUP_HEAD_ELEMENT property</li>
<li>Custom Portlet Modes and Custom Window States</li>
<li>Portlet-managed modes</li>
<li>RenderResponse.setNextPossiblePortletModes(Collection<PortletMode>)</li>
<li>Set dynamic portlet titles via RenderResponse.setTitle(String)</li>
<li>Support for aliases in public render parameters</li>
<li>Support for aliases and wildcards in eventing</li>
<li>Expiration and validation based caching</li>
</ul>
<p>Moreover, it should be noted that some typical portal features based on the 286 portlets are emphasized to be out of scope of the specification:</p>
<ul>
<li>the actual wiring between portlet events, and</li>
<li>the aggregation of portlets into a portal page</li>
</ul>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=128</wfw:commentRss>
		</item>
		<item>
		<title>Can request.getPortletSession(false) return null when the portal user is logged-in?</title>
		<link>http://www.ecovations.de/blog/?p=116</link>
		<comments>http://www.ecovations.de/blog/?p=116#comments</comments>
		<pubDate>Tue, 31 Mar 2009 06:47:57 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[JSR-286]]></category>

		<category><![CDATA[Portlets]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=116</guid>
		<description><![CDATA[In a Portal environment, one might think that once a user is logged-in, there is an HttpSession and therefore also the corresponding PortletSession would exist. Let&#8217;s have a look at the PortletRequest interface of the JSR-286 API for this:

/**
   * Returns the current portlet session or, if there is no current session
  [...]]]></description>
			<content:encoded><![CDATA[<p>In a Portal environment, one might think that once a user is logged-in, there is an <code>HttpSession</code> and therefore also the corresponding <code>PortletSession</code> would exist. Let&#8217;s have a look at the <code>PortletRequest</code> interface of the JSR-286 API for this:<span id="more-116"></span></p>
<pre class="java" name="code">
/**
   * Returns the current portlet session or, if there is no current session
   * and the given flag is <CODE>true</CODE>, creates one and returns
   * the new session.
   *
   * If the given flag is <CODE>false</CODE> and there is no current
   * portlet session, this method returns <CODE>null</CODE>.
   *
   * Creating a new portlet session will result in creating
   * a new <code>HttpSession</code> on which the portlet session is based on.
   *
   * @param create
   *               <CODE>true</CODE> to create a new session, <BR>
   *               <CODE>false</CODE> to return <CODE>null</CODE> if there
   *               is no current session
   * @return the portlet session
   *
   */

  public PortletSession getPortletSession (boolean create);</pre>
<p>So, in short, since when a new <code>PortletSession</code> is created also a new <code>HttpSession</code> is created, it should also hold true that if there is an existing <code>HttpSession</code>, the <code>PortletSession</code> should also already exist. This is correct as long as all portlets live in the same web application as the main portal servlet. In this case, <code>request.getPortletSession(false)</code> will always return a non-<code>null</code> value.</p>
<p>But consider that standard portlets usually live in multiple web applications. And each web application has its own scope for <code>HttpSession</code>s. In the latter case, you can only be sure that a logged-in user has an active <code>HttpSession</code> in the web application where the main portal servlet resides, but not necessarily in other web apps where your portlets reside. So in summary: <code>request.getPortletSession(false)</code> can, in fact, return <code>null</code>, even if the portlet can only be used by logged-in users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=116</wfw:commentRss>
		</item>
		<item>
		<title>Using jconsole with Websphere</title>
		<link>http://www.ecovations.de/blog/?p=99</link>
		<comments>http://www.ecovations.de/blog/?p=99#comments</comments>
		<pubDate>Wed, 25 Mar 2009 15:02:39 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[monitoring]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[websphere]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=99</guid>
		<description><![CDATA[The jconsole tool is a JMX-compliant graphical tool for monitoring a Java virtual machine. It can monitor both local and remote JVMs. You can read more about it here&#8230;
It has been introduced with Java 1.5 and can also be used with the Websphere Appserver. Sander Hautvast has proposed a configuration based on a Service integration [...]]]></description>
			<content:encoded><![CDATA[<p>The jconsole tool is a JMX-compliant graphical tool for monitoring a Java virtual machine. It can monitor both local and remote JVMs. You can <a href="http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html">read more about it here&#8230;</a></p>
<p>It has been introduced with Java 1.5 and can also be used with the Websphere Appserver. Sander Hautvast has <a href="http://blog.xebia.com/2009/02/10/helloworld-with-jconsole-and-the-websphere-service-integration-bus/">proposed a configuration based on a Service integration Bus</a>. </p>
<p>Below, I shall outline a simpler way that also works:<br />
1. Create a file named <code>/my/path/management.properties</code> with the following contents:</p>
<pre name="code" class="java">
com.sun.management.jmxremote.port=9999
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false
</pre>
<p>2. Next, you need to edit the Generic JVM arguments of your server (via the administrative console: Application servers > server1 > Process definition > Java Virtual Machine) :<br />
<code>-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote -Dcom.sun.management.config.file=/my/path/management.properties</code></p>
<p>3. Start jconsole from your <code>WAS_HOME/java/bin</code> directory and login with <code>localhost:9999</code>, as defined in your <code>management.properties</code> file (Note: not recommended for production use, since security is disabled for that port). </p>
<p>4. You&#8217;re done. Have a look at the threads, the memory consumption, the mbeans etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=99</wfw:commentRss>
		</item>
		<item>
		<title>wsadmin pifalls: hot deploy</title>
		<link>http://www.ecovations.de/blog/?p=86</link>
		<comments>http://www.ecovations.de/blog/?p=86#comments</comments>
		<pubDate>Tue, 24 Mar 2009 22:30:01 +0000</pubDate>
		<dc:creator>jacomac</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[jython]]></category>

		<category><![CDATA[websphere]]></category>

		<category><![CDATA[wsadmin]]></category>

		<guid isPermaLink="false">http://ecovations.de/blog/?p=86</guid>
		<description><![CDATA[Using administrative scripting with the Websphere AppServer (via wsadmin) can be tricky sometimes. For example there are some commands that return control before they are actually done. One case is the hot deployment of applications (EAR,WAR files) on a running server. 
Normally you would think, well first you install the app and then you start [...]]]></description>
			<content:encoded><![CDATA[<p>Using administrative scripting with the Websphere AppServer (via <code>wsadmin</code>) can be tricky sometimes. For example there are some commands that return control before they are actually done. One case is the hot deployment of applications (EAR,WAR files) on a running server. </p>
<p>Normally you would think, well first you install the app and then you start it. Well, not quite right with wsadmin. If you have a large app or many apps in one bigger app (EAR), the application(s) may not have been completely extracted, when you issue your start application request.</p>
<p>But there is help - use the <code>isAppReady</code> command in between:</p>
<pre class="python" name="code">
def installApplication (serverName, nodeName, appName, appPath):
   global AdminControl
   global AdminApp
   global AdminConfig

   print AdminApp.install(appPath)
   AdminConfig.save( )
   # important: wait for the installation to be completed ...
   AdminApp.isAppReady(appName)
   # ... before starting the app
   appManager = AdminControl.queryNames("type=ApplicationManager,process="+ serverName +",node="+nodeName+",*" )
   AdminControl.invoke(appManager, "startApplication", appName )
#endDef
</pre>
<p>The use of <code>isAppReady</code> may surprise as well, because normally you would check the return value in an if-clause or similar. But since this method always returns 0 (zero) you should avoid doing so. The method <code>isAppReady</code> basically holds back the response until the app is completely installed and that&#8217;s all we need.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ecovations.de/blog/?feed=rss2&amp;p=86</wfw:commentRss>
		</item>
	</channel>
</rss>

