<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>Mindoo Blog</title>
<description>Cutting edge technologies - About Java, Lotus Notes and iPhone</description>
<link>http://www.mindoo.de/web/blog.nsf/</link>
<language>en-us</language>
<lastBuildDate>Thu, 22 Jul 2010 22:32:43 +0200</lastBuildDate>
<item>
<title>The View article: Add LSDoc Support to Domino Designer on Eclipse with Custom Plug-ins (download link included)</title>
<pubDate>Thu, 22 Jul 2010 22:32:43 +0200</pubDate>
<description>
<![CDATA[ 
We just received permission to blog about a new article that we wrote for THE VIEW and that went online today. The article demonstrates several interesting techniques that can be used for Notes client and DDE plugin development. It includes a new display area in DDE that shows the LotusScript.doc content for the currently selected design element.

Here is the public abstract and the download link for the plugin. Of course, we highly recommend that you get a subscription for THE VIEW if you're not a subscriber yet. ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/22.07.2010223240KLES4H.htm</link>
<category>DDE</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/22.07.2010223240KLES4H.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/22.07.2010223240KLES4H.htm</guid>
<content:encoded><![CDATA[ We just received permission to blog about a new article that we wrote for THE VIEW and that went online today. The article demonstrates several interesting techniques that can be used for Notes client and DDE plugin development. It includes a new display area in DDE that shows the LotusScript.doc content for the currently selected design element. <br /> <br />Here is the public abstract and the download link for the plugin. Of course, we highly recommend that you get a subscription for THE VIEW if you're not a subscriber yet. <br /> <br /> <br /><strong>Add LSDoc Support to Domino Designer on Eclipse with Custom Plug-ins</strong> <br /> <br />Improve, accelerate, and streamline the Domino application development process by adding custom Eclipse extensions to Domino Designer on Eclipse (DDE). Find out how to add a handy development tool - LotusScript documentation support - to DDE and learn techniques and tricks that you can reuse for your own plug-in development. <br />Moving IBM Lotus Domino Designer to the Eclipse platform has opened a new world of extensibility and customizability opportunities to developers. No longer restricted to using error-prone C add-in development to add features to Designer, you can now write Eclipse plug-ins for Domino Designer on Eclipse (DDE) 8.5 and above, taking advantage of a variety of Eclipse and DDE extension points to add functionality for both UI and back-end logic. <div align=center> <br /><img  alt="Image:The View article: Add LSDoc Support to Domino Designer on Eclipse with Custom Plug-ins (download link included)" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/22.07.2010223240KLES4H.htm/content/M2?OpenElement" /></div> <br />Using Eclipse APIs, you can create a wide range of helpful tools, like the batch processing of design elements and one-click imports of frequently used script libraries. You can even customize Designer&#8217;s user interface - for example, add your own design element properties to the property panel (like the width and height in pixels of image resources). <br /> <br />We&#8217;ll provide a useful example of using Eclipse APIs to enhance DDE as we take you through the steps for integrating LotusScript doc (LSDoc) support into DDE. LSDoc is a very popular development tool created by Mikkel Heisterberg that generates well-formatted code documentation for LotusScript, similar to Javadoc for the Java language. Version 2 of LSDoc has been completely rewritten in Java, so it integrates better into the Java-based Eclipse world - it is faster, scales better with large database designs, and it can be seamlessly used in Eclipse plug-ins. <br />LSDoc generates HTML files for LotusScript documentation and stores them in a Notes database. However, it does not provide a mechanism to display those files. The files are served by the local Web preview of DDE, which requires Anonymous access to the LSDoc database; otherwise, the LSDoc database needs to be placed on a Domino server, which is not an option if you need to use LSDoc offline. In addition, there is no direct integration into Domino Designer yet. The documentation has to be opened in a separate browser window. <br /> <br />We&#8217;ll show you how you can solve these two issues by creating a new DDE/Eclipse feature that carries its own Web server and displays the LSDoc content for the currently selected design element in a new visual area of DDE, an Eclipse ViewPart. <br /> <br />Download link (source code and binary distribution): <br /><a href="http://blog.mindoo.com/web/blog.nsf/dx/DDE_LSDoc_Plugin.zip/$file/DDE_LSDoc_Plugin.zip">DDE_LSDoc_Plugin.zip</a> <br /> <br />Full article version (subscription required): <br /><a href="http://www.eview.com/eview/VOLR6.nsf/CurrentIssue/29CCE86A4A5408238525776000393C50?OpenDocument" target="_blank">Article on eview.com</a> <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/22.07.2010223240KLES4H.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/22.07.2010223240KLES4H.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>XPages series #9: How to debug an XPages application</title>
<pubDate>Tue, 20 Jul 2010 09:49:53 +0200</pubDate>
<description>
<![CDATA[ 
Are you tired of using System.out.println's to track what the code of your XPages application is actually doing and why it is not working as expected? Life as a developer would be so much easier if there was a way to debug an XPages app while it is running. 
Well, at least for code written in Java there is a solution. 
 ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/20.07.2010094952KLEB7R.htm</link>
<category>XPages</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/20.07.2010094952KLEB7R.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/20.07.2010094952KLEB7R.htm</guid>
<content:encoded><![CDATA[ Are you tired of using <code>System.out.println's</code> to track what the code of your XPages application is actually doing and why it is not working as expected? Life as a developer would be so much easier if there was a way to debug an XPages app while it is running. <br /> Well, at least for code written in Java there is a solution. <br /> <br /> Before we start, let me summarize which other options you have as an XPages developer to get runtime information about an application: <strong><br /> <br /> Writing log messages to the console or a log file/database</strong> <br /> Of course you can manually collect the necessary information about the application state and write it to a log. &nbsp;For client-side JavaScript logging, <a href="http://getfirebug.com/logging" target="_blank">Firebug and console.log</a> are your friends. <br /> On the server-side, you can use <code>System.out.println()</code> in Java to write a message to the console. For server-side JavaScript, there is a command called <code>_dump()</code> that does the same. If you don't have your own private Domino server for development, you will then soon get a call from the administrator, because the server's log database is rapidly filled with funny log messages like "before method xyz", "after method xyz" or another popular syntax: "method xyz.1", "method xyz.2", "method xyz.3" to see whether specific lines in your code are executed or skipped for a certain set of input parameters (of course, we never do that! ;-) ). <br /> You should at least use some global debug switches to quickly enable/disable debugging. Otherwise, moving an application to production and removing all those debug prints when the app is ready for prime time can be a lot of work. <br /> <br /> To not stress the administrator too much, you should use more advanced variants of this technique that do not write to the console, but make use of a dedicated log database or send status messages via email to the developer. &nbsp;The <a href="http://elguji.com/ideajam/elguji/taskjam.nsf/Start?ReadForm" target="_blank">TaskJam template</a> contains a SSJS library that generates log records for the popular <a href="http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenLog">OpenLog project</a> of Julian Robichaux (Java classes to do the same are available as part of the project). <br /> Tommy Valand has written a <a href="http://dontpanic82.blogspot.com/2009/12/helper-functions-for-debugging-xpages.html" target="_blank">helper function to send debug messages via email</a>. <strong><br /> <br /> Analyzing the XPages component tree</strong> <br /> For more advanced XPages applications, writing simple status messages to a log is often not enough. You need detailed information about how the XPage is stored in the server memory. For example, if your XPages contain dynamic elements like repeater controls that create part of the UI at runtime or - even more powerful - you generate the whole component tree on the fly in your code, it's very hard to find out why an application is behaving unexpectedly. <br /> The <a href="http://www.openntf.org/Projects/pmt.nsf/ProjectLookup/Medusa" target="_blank">Medusa project</a> of Nathan Freeman, Tim Tripcony and Colin Macdonald can help you in this case. In short, it provides a Firebug plugin that lets you examine the server-side component tree (see the <a href="http://www.openntf.org/internal/home.nsf/screenshots.xsp?action=openDocument&amp;name=Medusa&amp;documentId=8DDCA2BE6F0CB1BC862576C50077E3F6" target="_blank">screenshot section</a> of the Medusa project page for more details), e.g. to check whether a link has any server-side event code attached at all.<strong><br /> <br /> Debug library code outside of XPages/Lotus Notes</strong> <br /> When you write a lot of application code in Java, a smart approach is to make most of it work outside of an XPage or even outside of a Lotus Notes context. That way, you can easily debug your library code in Eclipse and you can even build test cases for test-driven development. <br /> Unfortunately, there is no easy approach for SSJS debugging. There might be a way to build your own runtime environment using a JavaScript engine like <a href="http://www.mozilla.org/rhino/">Rhino</a>, but we haven't really invested much time in that area, because most of our SSJS code is just directly calling bean methods in Java. <br /> <strong><br /> What is missing?</strong> <br /> Looks like we already have a lot of options for logging and debugging. We have more for logging than debugging though, and there is no way yet to watch Java code while it is being executed on the server. That's exactly what this article is about. <br /><br /> Now why is this important? At first, you save a lot of time, because you don't have to blow up your code with dozens of <code>println's</code> to track a specific issue, and remove all of them again after the issue has been resolved. <br /> And if you need to know more about complex objects and data structures, it's pretty hard to serialize them and print all parts to the log. Finally, in case of memory profiling and searching for memory leaks, it's a lot easier to just set a breakpoint in the code and examine which Java objects are stored in the server memory than trying to dump all that information to a log, if possible at all. <br /> <strong><br /> Requirements for debugging</strong> <br /> Well, to be able to debug Java code, the Java Virtual Machine that is running the code, must be running in debug mode. Pretty logic, isn't it? In addition, you need to have the source code of something that you would like to debug, on the one hand to define the breakpoint position and on the other hand, because the debugger has to show something to tell you what is being executed. <br /> <strong><br /> The best solution</strong> <br /> Our first idea was: What if we could launch the Domino server as a target platform from Eclipse, just like we do with the Notes Client or Domino Designer (DDE)? Then we could bring the JVM in debug mode and it would stop when a breakpoint in the code is reached. That's a similar approach to working with the Eclipse EE development environment, where Eclipse launches an embedded Tomcat server with a servlet configuration. <br /> Unfortunately, we don't know (yet) how to do this, because the Domino server is a bit more than just a few Java classes. <br /> <strong><br /> Our solution :-)</strong> <br /> But, as I said above, we <em>do know</em> how to launch the Notes Client from Eclipse (with installed Expeditor). And since the Lotus Notes Client is able to serve "XPages in the Client" since release 8.5.1, it should be possible to debug the executed Java code in an XPages app. And in fact, it really is. <br /> We tried it and it worked, but when you launch Notes from Expeditor, you have to choose between launching the Notes client or DDE. Both cannot run at the same time, which is bad if you want to make small adjustments to your XPages application. <br /> <br /> There is an even simpler solution that does not require installing the Expeditor toolkit: Eclipse Remote Debugging. <br /> <strong><br /> Launching Lotus Notes with enabled Remote Debugging</strong> <br /> This technique was inspired by a <a href="http://blog.balfes.net/?p=148" target="_blank">blog article of Bob Balfe</a> that he wrote back in 2008: Lotus Notes can be launched in a special mode that makes it possible to connect to a running Notes Client from Eclipse. <br />You can find detailed setup instructions on Bob's blog. Unfortunately, the picture links are broken, but you should get the idea what you have to do make it work. <br /><br /> The calling syntax for Lotus Notes from his blog entry has slightly changed since 2008. Here is the syntax that works for release 8.5.1 and (most probably) 8.5.2: <br /> <br /> <code>C:\Program files\IBM\Lotus\Notes\framework\rcp\rcplauncher.exe -config notes -debug -console -vmargs -Xdbg:transport=dt_socket,suspend=n,server=y,address=<strong>8000</strong> -Xss512k</code><br /> <br /> Please note how we specify the port (8000) at the end of the line. We need to use the same port when we now create a new debug configuration in Eclipse (we're using version 3.4.2):  <div align=center> <br /><img  alt="Image:XPages series #9: How to debug an XPages application" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/20.07.2010094952KLEB7R.htm/content/M2?OpenElement" /> <br />Debug configuration for remote debugging of Lotus Notes</div> <br />While Lotus Notes is running in debug mode, we can now connect to its JVM from our Eclipse IDE. <br /> <br />You should now add Java projects to Eclipse that contain the Java code that you execute in your XPages application and set a few breakpoints. <br />When you add the Java projects, Eclipse might complain about unresolved dependencies to classes of Expeditor, Notes or DDE. <br />Here is a collection of JARs that might be needed as part of the classpath (depending on your Notes configuration, you need to modify the version numbers). <br /> <ul> <li><code>C:\Program files\IBM\Lotus\Notes\jvm\lib\ext\Notes.jar</code> </li><li><code>C:\Program files\IBM\Lotus\Notes\framework\shared\eclipse\plugins\com.ibm.designer.lib.jsf_8.5.1.20090926-0124\lib\jsf-api.jar</code> </li><li><code>C:\Program files\IBM\Lotus\Notes\framework\shared\eclipse\plugins\com.ibm.xsp.core_8.5.0.20100318-1445\lwpd.xsp.core.jar</code> </li><li><code>C:\Program files\IBM\Lotus\Notes\framework\shared\eclipse\plugins\com.ibm.xsp.designer_8.5.0.20090926-0124\lwpd.xsp.designer.jar</code> </li><li><code>C:\Program files\IBM\Lotus\Notes\framework\shared\eclipse\plugins\com.ibm.xsp.domino_8.5.1.20100318-1445\lwpd.xsp.domino.jar</code> </li><li><code>C:\Program files\IBM\Lotus\Notes\framework\shared\eclipse\plugins\com.ibm.xsp.extsn_8.5.1.20100318-1445\lwpd.xsp.extsn.jar</code></li></ul> <br /><strong>Launching the XPages application</strong> <br />To launch the application, you can either choose an XPage in the Notes launch settings of the database or create a Composite Application, e.g. with one component that either shows the XPage itself or a component created for the XPage. Regarding the latter: there is an <a href="http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm" title="How to use XPages as components in Composite Applications" target="_blank" >article</a> in this blog with a demo video from IBM how to do it. <div align=center> <br /><img  alt="Image:XPages series #9: How to debug an XPages application" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/20.07.2010094952KLEB7R.htm/content/M3?OpenElement" /> <br />Choosing an XPages as launch option</div> <br /><strong>Hijacking XPages</strong> <br />For every XPage displayed in the Notes Client, the Client starts a new local HTTP server instance that will be running until you close the XPage tab. That server is running on a randomly chosen port number and the Notes client uses a unique ID in the URL to authenticate the browser: <br /> <br /><code>http://127.0.0.1<strong>:2711</strong>/xsp/path%5Cto%5Cdb.nsf/xpageName.xsp?<strong>SessionID=ID0-35c463d059feb800</code></strong> <br /> <br />Ever read that URL from JavaScript (document.location.href) and tried to use it in the system browser? Works like a charm. <br /> <br />So in case your XPages apps are not running well in the Notes Client, because its XPages viewer blocks popup dialogs or does not display things like rounded corners via CSS properly etc., you can also open that URL in any other browser. It will be served locally by the HTTP server instance of the running Lotus Notes client. The Notes Client acts like a Domino server (and you don't need to open up the ACL for anonymous access like you have to do for the XPages preview in DDE). <br /> <br />To make the process of opening a running XPages application in the system's default browser a lot easier, we have developed a small helper Eclipse plugin that shows up as a new toolbar icon in the Notes Client: <div align=center> <br /><img  alt="Image:XPages series #9: How to debug an XPages application" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/20.07.2010094952KLEB7R.htm/content/M4?OpenElement" /> <br />Toolbar icon to launch an XPage in the system browser</div> <br />The code behind the toolbar action is actually very easy. It reads the currently displayed XPages url, strips a few query string parameters and calls an Eclipse method that opens the URL in the default browser. <br />Here is a ZIP file with an update site and the source code: <ul> <li><a href="http://blog.mindoo.com/web/blog.nsf/dx/xpages-browserlauncher.zip/$file/xpages-browserlauncher.zip" title="xpages-browserlauncher.zip">xpages-browserlauncher.zip</a></li></ul> <br /><strong>A word about security exceptions</strong> <br />You might see ECL security exceptions, if you are using "restricted" operations in your Java code, for example such dangerous things like XML parsing. ;-). This issue is discussed in <a href="http://blog.mindoo.com/web/blog.nsf/dx/21.10.2009142550KLEGL7.htm" title="Running under a restricted Java context - or: Why doesn&#8217;t my XPages application work in the Notes Client?!" target="_blank">another block article</a>. <br />Remember that it's still the Notes Client that serves the XPages, although you are using them in the system browser. <br />As a temporary workaround, this can be solved by appending the following code to the java policy file located in C:\Program files\IBM\Lotus\Notes\java.policy: <br /> <br /><code>grant { <br />&nbsp; &nbsp; &nbsp; permission java.security.AllPermission; <br />};</code> <br /> <br />This completely disables any security restriction that is active for XPages code (Eclipse plugins are not affected by the security manager anyway), so be careful with it! <br /> <br /><strong>Summary</strong> <br />The demonstrated approach is a workaround for debugging XPages backend Java code, for which there is no officially available solution from IBM yet. By launching the Lotus Notes client with enabled remote debugging, we were able to connect from an external Eclipse IDE and debug custom backend Java code of an XPages application. <br />Hopefully, IBM will someday provide a better solution, for example by transforming the Domino server into a standard Eclipse target platform that can be directly launched from Eclipse. <br /> <br />At Lotusphere 2010, IBM announced that XPages in the upcoming Lotus Notes release 8.5.2 can be extended with custom OSGi/Eclipse plugins, e.g .in order to split up the business logic of a large enterprise application into small extensible modules. <br />With some slight modifications, the demonstrated approach should also work in that scenario, but running a Domino server directly from Eclipse would further speed up the process of developing, deploying and testing code. <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/20.07.2010094952KLEB7R.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/20.07.2010094952KLEB7R.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Fast Notes view reading via C API Part 2: How to read views 99.7% faster than Notes.jar</title>
<pubDate>Sun, 25 Apr 2010 23:52:56 +0200</pubDate>
<description>
<![CDATA[ 
This is a follow-up article to the first one about using the C API to read Notes view data instead of the Notes Java API provided by the Notes.jar file.

Disclaimer
You will see some incredible numbers in this article. Be sure, that we double checked them. This is no fake, although it looks like one. :-)  ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/25.04.2010235255KLETNN.htm</link>
<category>Notesdev</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/25.04.2010235255KLETNN.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/25.04.2010235255KLETNN.htm</guid>
<content:encoded><![CDATA[ This is a follow-up article to the <a href="http://blog.mindoo.com/web/blog.nsf/dx/31.03.2010220936KLERN4.htm" title="Fast Notes view reading via C API: A comparison C vs. Notes.jar" target="_blank">first one</a> about using the C API to read Notes view data instead of the Notes Java API provided by the Notes.jar file. <br /> <br /><strong>Disclaimer</strong> <br />You will see some incredible numbers in this article. Be sure, that we double checked them. This is <strong><span style="text-decoration:underline">no fake</span></strong>, although it looks like one. :-) <br /> <br /><strong>Testing our approach on a server</strong> <br />In the first article, we compared the execution times of the C code with the Notes.jar performance in a test case of reading 15.000 view entries from a local database. The result was 0.93 seconds for the C version and 2.8 seconds for the Java API. Pretty nice. That's a third of the execution time of Notes.jar, but we discussed that this may only make sense in cases where you really have a lot to read, e.g. several thousands of view entries, because there is some initialization overhead for creating a second Notes session and opening the database and view. <br /> <br />So far, we only had done tests on the local machine and we were curious how well our code would work on a server database. <br />Our test server is one of our development machines, which is hosted at an internet service provider and has a 100 mbit connection to the internet. Our home office internet connection speed is 15224 kbit/s downstream and 1164 kbit/s upstream. <br /> <br />Reading all the view entries using Notes.jar gives us a good opportunity to look for some coffee. It takes 856735 ms, which is <strong>more than 14 minutes</strong>. There is no passthru server in between. The results were even slower when we were testing with a passthru server and a 1,5 mbit server connection. <br /> <br />Our code looks like this: <br /><code> <br />&nbsp; &nbsp; &nbsp; &nbsp; Session session=NotesFactory.createSession(); <br />&nbsp; &nbsp; &nbsp; &nbsp; Database db=session.getDatabase(serverName, dbPath); <br />&nbsp; &nbsp; &nbsp; &nbsp; View v=db.getView(viewName); <br />&nbsp; &nbsp; &nbsp; &nbsp; v.setAutoUpdate(false); <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &nbsp; &nbsp; ViewEntryCollection entryCol=v.getAllEntries(); <br />&nbsp; &nbsp; &nbsp; &nbsp; ViewEntry entry=entryCol.getFirstEntry(); <br />&nbsp; &nbsp; &nbsp; &nbsp; while (entry!=null) { <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (entry.isValid()) { <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Vector colValues=entry.getColumnValues(); <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //... code to dump the values to stdout <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ViewEntry nextEntry=entryCol.getNextEntry(); <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; entry.recycle(); <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; entry=nextEntry; <br />&nbsp; &nbsp; &nbsp; &nbsp; } <br />&nbsp; &nbsp; &nbsp; &nbsp; session.recycle();</code> <br /> <br />So let's see how long our C approach takes... With the implementation of our first article, it takes 433337 ms, which is <strong>half the time</strong> - 7 minutes. Not bad, but still enough time for coffee. <br /> <br /><strong>Reading more than one view entry at a time</strong> <br />We were really surprised when we saw that result. We had expected that IBM might have added some caching technologies to read more than one view entry at a time, to optimize throughput on the slow network connection. But our C code was still a lot faster than their approach, and it only read one entry, reported it to our Java code via JNI and then it read the next one. <br /> <br />But there was still some room for improvement in our solution. <br />The C API function NIFReadEntries that we are using to read the data has a parameter to tell the API how many rows should be returned, as long as the provided buffer size is sufficient (we let Notes choose the buffer size for now). Until now, we were using a fixed value of 1. In the next version, this parameter is configurable. <br /> <br /><strong>No time for coffee anymore :-)</strong> <br />So here are the results, all for reading 15.000 view entries via the C API on a server database with different NIFReadEntries parameter values. <br />Again, this is no fake. The numbers are absolutely reproducible: <br /> <br /> <table border> <tr valign=top> <td><strong>Maximum entries to read in NIFReadEntries</strong> <td><strong>Duration</strong> <tr valign=top> <td>1 <td>433337 ms <tr valign=top> <td>10 <td>44801 ms <tr valign=top> <td>100 <td>5960 ms <tr valign=top> <td>1000 <td>2552 ms</table> <br /> <br />We are down from 7 minutes to 2,5 seconds just by changing one single parameter in the NIFReadEntries call! <br /> <br /><strong>Performance gain for local environment</strong> <br />Reading more than one line at a time also speeds up the already fast local access times: <br /> <br /> <table border> <tr valign=top> <td><strong>Maximum entries to read in NIFReadEntries</strong> <td><strong>Duration</strong> <tr valign=top> <td>1 <td>968 ms <tr valign=top> <td>10 <td>606 ms <tr valign=top> <td>100 <td>587 ms <tr valign=top> <td>1000 <td>573 ms</table> <br /> <br /><strong>Reducing CPU load</strong> <br />We did some tests to search for memory leaks in our code, in which we read the view about 1000 times. We found out that the CPU load can be reduced from 50% to 5-8% just by doing a <code>Thread.sleep(1)</code> every 200 rows in the Java code. This increased the execution time from 0,5s to 1s. <br /> <br /><strong>Conclusion</strong> <br />We could not believe our eyes when we saw those results. How on earth can reading a view be 99,7% (335 times) faster using C instead of Notes.jar? 14 minutes used for ECL checks and synchronize blocks? That's impossible. <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/25.04.2010235255KLETNN.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/25.04.2010235255KLETNN.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Fast Notes view reading via C API: A comparison C vs. Notes.jar</title>
<pubDate>Wed, 31 Mar 2010 22:09:36 +0200</pubDate>
<description>
<![CDATA[ 
Bad day for a blog posting - this is no April fool's joke. :-) 

About 1,5 weeks ago, Nathan Freeman wrote a blog posting about the hidden NAPI plugin in Lotus Notes 8.5.1 that IBM uses to speed up the XPages framework. NAPI is an unsupported and incomplete set of Java classes that use JNI technology (Java Native Interface) to leverage functions of the Notes C API, for example to read data from a Notes view. 

According to Nathan's speed race video, the NAPI classes are much faster than using the classic Notes Java API inside the Notes.jar archive. To read 15.000 view entries, NAPI takes 1 second where Notes.jar is running for 6 seconds - a pretty impressive result. 

Last week, inspired by his comparison, we decided to develop our own C/JNI code. Of course, we like nothing more than writing C and it was a question of honour not to use IBM's NAPI plugin. :-) 

No, just kidding. Our use case was a bit different. NAPI is an Eclipse plugin, but we needed a solution that also runs in standalone Java applications. 

A few days of fun with NIF'ty things like NIFOpenCollection, NIFGetCollectionData or NIFReadEntries later, we now have our own working solution.  ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/31.03.2010220936KLERN4.htm</link>
<category>Notesdev</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/31.03.2010220936KLERN4.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/31.03.2010220936KLERN4.htm</guid>
<content:encoded><![CDATA[ Bad day for a blog posting - this is no April fool's joke. :-) <br /> <br /> About 1,5 weeks ago, Nathan Freeman wrote <a href="http://www.lotus911.com/nathan/escape.nsf/d6plinks/NTFN-83P6PZ" target=_blank>a blog posting about the hidden NAPI plugin in Lotus Notes 8.5.1</a> that IBM uses to speed up the XPages framework. NAPI is an unsupported and incomplete set of Java classes that use JNI technology (Java Native Interface) to leverage functions of the Notes C API, for example to read data from a Notes view. <br /> <br /> According to Nathan's <a href="http://www.youtube.com/watch?v=IHNy8Q_NmM4" target=_blank>speed race video</a>, the NAPI classes are much faster than using the classic Notes Java API inside the Notes.jar archive. To read 15.000 view entries, NAPI takes 1 second where Notes.jar is running for 6 seconds - a pretty impressive result. <br /> <br /> Last week, inspired by his comparison, we decided to develop our own C/JNI code. Of course, we like nothing more than writing C and it was a question of honour not to use IBM's NAPI plugin. :-) <br /> <br /> No, just kidding. Our use case was a bit different. NAPI is an Eclipse plugin, but we needed a solution that also runs in standalone Java applications. <br /> <br /> A few days of fun with <em>NIF'ty</em> things like NIFOpenCollection, NIFGetCollectionData or NIFReadEntries later, we now have our own working solution. <strong><br /> <br /> The result</strong><br /> We took Nathans test database with 15.000 documents to measure the performance of the different solutions. Our test code is executed from the Eclipse IDE as a small standalone application, we did not build an Eclipse plugin for it yet. <br /> The view looks like this:  <div align=center> <br /><img  alt="Image:Fast Notes view reading via C API: A comparison C vs. Notes.jar" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/31.03.2010220936KLERN4.htm/content/M2?OpenElement" /></div> <br />Three columns with text, one hidden sort column with the severity as number. <br /> <br /> Traversing the view and reading all column values using Notes.jar takes 2.8 seconds on our desktop test machine (Intel Core2Duo, 3 GHz, 4 GB RAM. WinXP VM in Vista) <br /> Please note that our test code is running exclusively in the JVM. This may explain the gap to Nathan's 6 seconds, his four test cases run in parallel which probably slows down I/O throughput, causes synchronization losses in the API and splits the CPU power. <strong><br /> <br /> Speed of our C/JNI solution</strong> <br /> For the same scenario, the C/JNI approach only takes 0.93 seconds. You can even save more time by reducing the columns to be read. In contrast to Notes.jar, where you just have <code>ViewEntry.getColumnValues()</code>, which decodes all columns in a row, by using the C API you have to decode each column separately (e.g. to convert Notes LMBCS strings to Java's Unicode format). <br /> For example, if you decide to only decode one column, let's say the last one, the duration drops to 0,8 seconds. If you are just interested in the sort order of documents, you might only read the Note ID and skip the column decoding, which results in 0,7 seconds. <strong><br /> <br /> Drawbacks</strong> <br /> 0,93 seconds instead of 2,8 sounds pretty dramatic, but we need to keep in mind that we are not reading 10 or 100 view entries, but 15.000. So for normal lookup operations, this solution is probably an overkill. Especially because in a hybrid scenario (where most operations are done in Notes.jar, but view reading in C/JNI) we need to create a second session and may open the database and view twice, which obviously consumes some time. <br /> <br /> However, it looks like there is a good use case for the JNI approach in scenarios where a lot of processes access Notes data in parallel, for example on a Domino web server or in the Lotus Notes Standard Client with a lot of plugins that use Notes APIs. <br /> <br /> In those cases, Notes.jar turns out to be a performance bottleneck, because it does not directly wrap the C API functions, but is based on the "Lotus Software Extension Backend (LSXBE)", which does not handle multithreading very well from a performance perspective.  <div align=center> <br /><img  alt="Image:Fast Notes view reading via C API: A comparison C vs. Notes.jar" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/31.03.2010220936KLERN4.htm/content/M3?OpenElement" /></div> <br />Click here to read the <a href="http://blog.mindoo.com/web/blog.nsf/dx/25.04.2010235255KLETNN.htm" target="_blank">second article</a> about C API vs. Notes.jar - how to speed up view reading by the factor 335. <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/31.03.2010220936KLERN4.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/31.03.2010220936KLERN4.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>LS10/EC10 session sample #2: Adding custom properties to DDE design elements</title>
<pubDate>Thu, 11 Mar 2010 18:00:51 +0200</pubDate>
<description>
<![CDATA[ 
Sample 2 of our Lotusphere and Entwickercamp sessions is an add-on for Domino Designer on Eclipse. (I changed the order of the samples, because we need to work on a few others before we can publish th ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010180051KLEMY4.htm</link>
<category>DDE</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010180051KLEMY4.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010180051KLEMY4.htm</guid>
<content:encoded><![CDATA[ Sample 2 of our <a href="http://blog.mindoo.com/web/blog.nsf/dx//web/blog.nsf/dx/25.01.2010004124KLEVSF.htm?opendocument&amp;comments" target=_blank>Lotusphere</a> and <a href="http://blog.mindoo.com/web/blog.nsf/dx//web/blog.nsf/dx/11.03.2010124229KLEFR6.htm?opendocument&amp;comments" target=_blank>Entwickercamp</a> sessions is an add-on for Domino Designer on Eclipse. <br />(I changed the order of the samples, because we need to work on a few others before we can publish them) <br /> <br />As a long time web developer for the Notes/Domino platform, I have always missed one Designer feature a lot: There was obviously no easy way to get the pixel dimensions of image resources.  <br />My workaround was to extract the image to disk, open it in an image viewer and write down the width and height. A real pain. <br /> <br />But now, that Domino Designer is based on the Eclipse platform, things have changed. Developers don't have to wait any more for IBM to implement a specific new feature. They can just create they own Designer add-ons! <br /> <br />By leveraging the Eclipse APIs and new Domino Designer extensibility APIs we were able to build a small helper plugin, that hooks directly into the properties pane of DDE: <div align=center> <br /><img  alt="Image:LS10/EC10 session sample #2: Adding custom properties to DDE design elements" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010180051KLEMY4.htm/content/M2?OpenElement" /></div> <br />There are no methods in the DDE API to add such a section. It's basically an API that lets you convert the standard Eclipse selection into Designer specific classes. It offers some basic set/get methods for design elements and refresh methods to notify DDE that the design has been changed, e.g. by a DXL import using the backend Notes classes. <br /> <br />But fortunately, IBM built DDE right on top of Eclipse and made use of standard Eclipse property panels for the design properties. <br />Those panels can be extended by plugins with the following XML code: <br /> <br /><code>< extension point="org.eclipse.ui.views.properties.tabbed.propertySections" > <br />&nbsp; &nbsp; &nbsp; &nbsp; < propertySections contributorId="com.ibm.designer.domino.navigator.panels" > <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; < propertySection <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; afterSection="com.ibm.designer.domino.navigator.panels.image.basic" <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enablesFor="1" <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; class="com.mindoo.dde.imageproperties.WebImageSizeSection" <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filter="com.mindoo.dde.imageproperties.ImagePropFilter" <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id="com.ibm.designer.domino.navigator.panels.image.websize" <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tab="com.ibm.designer.domino.navigator.panels.file.basic" / > <br />&nbsp; &nbsp; &nbsp; &nbsp; < /propertySections > <br />< /extension > </code> <br /> <br />It adds a custom section to an existing property panel. In this case, we are adding it to the "basics" panel and use a filter to hide it if no image resource is selected: <br /> <br /><code><strong>package</strong> com.mindoo.dde.imageproperties; <br /> <br /><strong>import</strong> org.eclipse.core.resources.IResource; <br /><strong>import</strong> org.eclipse.jface.viewers.IFilter; <br /> <br /><strong>import</strong> com.ibm.designer.domino.ide.resources.extensions.DesignerDesignElement; <br /><strong>import</strong> com.ibm.designer.domino.ui.commons.extensions.DesignerResource; <br /> <br /><strong>public</strong> <strong>class</strong> ImagePropFilter <strong>implements</strong> IFilter { <br />&nbsp; &nbsp; &nbsp; &nbsp; <strong>public</strong> <strong>boolean</strong> select(Object paramObject) { <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>if</strong> (paramObject <strong>instanceof</strong> IResource) { <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IResource resource=(IResource) paramObject; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DesignerDesignElement designElement=DesignerResource.<em>getDesignElement</em>(resource); <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>if</strong> (designElement!=<strong>null</strong>) { <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String deType=designElement.getDesignElementType(); <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>if</strong> (DesignerResource.<em>TYPE_IMAGE</em>.equals(deType)) <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>return</strong> <strong>true</strong>; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>return</strong> <strong>false</strong>; <br />&nbsp; &nbsp; &nbsp; &nbsp; } <br />}</code> <br /> <br />When the selected image changes, the implementation class schedules a background job that grabs the DXL content of the image's design element. It converts the base64 encoded DXL content to a byte stream, uses Eclipse API methods to load the image, reads the width and height and displays them in the specific fields of the "Image size in px" area. <br />Since we are doing this in a background operation, the DDE UI is still responsive. <br /> <br />If you are asking yourself where to get those internal section IDs from, I highly recommend you to take a look at the plugin.xml file of the DDE plugin "com.ibm.designer.domino.navigator" in the "framework/shared subfolder" of your Notes program directory. :-) <br /> <br />Finally, here is the plugin source code and an update site to install from: <ul> <li><a href="http://blog.mindoo.com/web/blog.nsf/dx/ls10-com.mindoo.dde.imageproperties.zip/$file/ls10-com.mindoo.dde.imageproperties.zip">ls10-com.mindoo.dde.imageproperties.zip</a> </li><li><a href="http://blog.mindoo.com/web/blog.nsf/dx/ls10-com.mindoo.dde.imageproperties-updatesite.zip/$file/ls10-com.mindoo.dde.imageproperties-updatesite.zip">ls10-com.mindoo.dde.imageproperties-updatesite.zip</a></li></ul> <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/11.03.2010180051KLEMY4.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010180051KLEMY4.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Entwickercamp 2010: our slides about add-ons for Notes Client and Domino Designer 8.5.1</title>
<pubDate>Thu, 11 Mar 2010 12:42:31 +0200</pubDate>
<description>
<![CDATA[ 
As Julian Buss and Ulrich Krause already blogged, Entwicklercamp 2010 (developer camp), taking place this week from Monday to Wednesday, was a really well organized conference. It was great to meet wi ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010124229KLEFR6.htm</link>
<category>Entwicklercamp 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010124229KLEFR6.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010124229KLEFR6.htm</guid>
<content:encoded><![CDATA[ As <a href="http://www.juliusbuss.de/web/youatnotes/blog-jb.nsf/dx/entwicklercamp-2010-fazit.htm" target=_blank>Julian Buss</a> and <a href="http://www.eknori.de/2010-03-11/entwicklercamp-2010-day-3/" target=_blank>Ulrich Krause</a> already blogged, Entwicklercamp 2010 (developer camp), taking place this week from Monday to Wednesday, was a really well organized conference. <br />It was great to meet with other developers and business partners and there were a lot of high quality sessions, mainly focused on XPages for web and Notes Client and Java/JavaScript development. Good to see that more and more developers and end users get interested in the new possibilities. <br /> <br />Thanks to Rudi Knegt and his team for all their work organizing the event! <br /> <br />This blog posting contains the slides of my session about add-on development for Notes Client/Domino Designer, leveraging new Java APIs of Notes/Domino 8.5.1. <br /> <br />Actually, I did not only present the session <em>once</em>. I did <strong><span style="text-decoration:underline">three full session runs</span></strong>, one on Monday and two on Tuesday, because two Entwicklercamp participants had a conflict with other sessions, but were highly interested in the topic. So we had two additional one-on-one presentations including the whole demo show. The feedback for all three sessions was very positive. They even changed the room for the session (track 2 instead of track 4), because there were a lot more reservations for the session than expected. <br /> <br />Fortunately, I had more time to present than at <a href="http://blog.mindoo.com/web/blog.nsf/dx//web/blog.nsf/dx/25.01.2010004124KLEVSF.htm?opendocument&amp;comments" target=_blank>Lotusphere in Orlando</a> (90 minutes instead of only 60), so I could present all of the 10+x demos that we had developed. In Orlando, we had to skip a few of them. <br />The demos will be published one by one here in the blog. The first one is already posted: it's the <a href="http://blog.mindoo.com/web/blog.nsf/dx//web/blog.nsf/dx/30.01.2010154312KLEKA4.htm?opendocument&amp;comments" target=_blank>bookmark tools plugin</a> that adds context menus to the client's Open List. <br /> <br />So here are the slides in German language: <div align=center> <br /><a href="http://blog.mindoo.com/web/blog.nsf/dx/EC10_Mindoo_T2S5-session.pdf/$file/EC10_Mindoo_T2S5-session.pdf" title="Entwicklercamp 2010 slides (German)"><img  alt="Image:Entwickercamp 2010: our slides about add-ons for Notes Client and Domino Designer 8.5.1" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010124229KLEFR6.htm/content/M2?OpenElement" /></a></div> <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/11.03.2010124229KLEFR6.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/11.03.2010124229KLEFR6.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>LS10/EC10 session sample #1: Notes Bookmark tools</title>
<pubDate>Sat, 30 Jan 2010 15:43:12 +0200</pubDate>
<description>
<![CDATA[ 
This is the first sample that we developed for our Lotusphere session about the Java APIs of Lotus Notes 8.5.1. And it's already the first one that we did not  actually show at Lotusphere, because we ran out of session time in our rehearsals and felt the need to reduce the amount of live demos.

The sample plugin is called "com.mindoo.bookmarktools". It adds two actions to the Open List of Lotus Notes: "Locate on workspace" and "Open as workspace" ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/30.01.2010154312KLEKA4.htm</link>
<category>Entwicklercamp 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/30.01.2010154312KLEKA4.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/30.01.2010154312KLEKA4.htm</guid>
<content:encoded><![CDATA[ This is the first sample that we developed for our <a href="http://blog.mindoo.com/web/blog.nsf/dx/25.01.2010004124KLEVSF.htm" target="_blank">Lotusphere session about the Java APIs of Lotus Notes 8.5.1</a>. And it's already the first one that we did <em>not</em> &nbsp;actually show at Lotusphere, because we ran out of session time in our rehearsals and felt the need to reduce the amount of live demos. <br /> <br /> The sample plugin is called "com.mindoo.bookmarktools". It adds two actions to the Open List of Lotus Notes:  <div align=center> <br /><img  alt="Image:LS10/EC10 session sample #1: Notes Bookmark tools" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/30.01.2010154312KLEKA4.htm/content/M2?OpenElement" /></div> <br /><strong>Locate on workspace</strong> <br /> This action uses the methods <code>NotesUIWorkspace.addDatabase(NotesDatabaseData)</code> of the new UI API, but instead of adding databases to the client's workspace, it actually only leverages the fact that <code>addDatabase</code> selects already existing databases and opens the right workspace tab. <br /> As you may know, we are the developers of the <a href=/web/web.nsf/id/pa_products_mindplan_en.html target=_blank>MindPlan</a> application (mindmapping and project management based on Lotus Notes). That's why my Open List looks like this when I'm searching for the keyword "mindplan" in my bookmarks:  <div align=center> <br /><img  alt="Image:LS10/EC10 session sample #1: Notes Bookmark tools" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/30.01.2010154312KLEKA4.htm/content/M3?OpenElement" /></div> <br />Sometimes you want to know where a specific database is located on your workspace. One way is to open the database in the client and then switch to the workspace, where in most cases the right database chicklet is selected. That takes a lot of time in case the database needs to be loaded from a server. And sometimes opening the database does not really help to find it on the workspace, for example if the database opens a frameset that displays a view of your mail database. In that case, it's the mail database that is selected on the workspace, not the database with the frameset. <br /> <br /> This new action helps in this case. <strong><br /> <br /> Open as workspace</strong> <br /> The second action "Open as workspace" is something that you might know from older Notes Clients, e.g. from version R7. You could right click on a bookmark and select "Open as workspace". This would open a new tab that displays the bookmark folder content as chicklets like this:  <div align=center> <br /><img  alt="Image:LS10/EC10 session sample #1: Notes Bookmark tools" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/30.01.2010154312KLEKA4.htm/content/M4?OpenElement" /></div> <br />Well, although this feature <a href="http://www-01.ibm.com/support/docview.wss?rs=475&amp;context=SSKTWP&amp;dc&Ucirc;520&amp;dc&Ucirc;560&amp;uid=swg21296580&amp;loc=en_US&amp;cs=UTF-8&amp;lang=en&amp;rss=ct475lotus" target=_blank>has not been officially implemented in the 8.x Standard Client</a> (the was some <a href="http://www.notesdesignblog.com/notesdesignblog/ndblog.nsf/dx/do-you-miss-the-open-as-workspace-feature.htm" target=_blank>discussion</a> whether it should return in 8.5.2, but IBM decided to <a href="http://www.notesdesignblog.com/notesdesignblog/ndblog.nsf/dx/our-decision-regarding-open-as-workspace.htm" target=_blank>keep it out</a> of the Standard Client), there <em>is</em> a way to open the workspace view for a bookmark folder. <br /> <br /> Actually, it's pretty simple: <br /> You may know that the Notes URL "<strong>notes:///ClientBookmark?OpenWorkspace</strong>" opens the normal workspace tab. <br /> All you have to do is add a query parameter "id" to that URL: "<strong>notes:///ClientBookmark?OpenWorkspace&amp;id=0</strong>". That ID is the internal bookmark folder id. The id 0 tells the workspace viewpart to display the first level of your open list (e.g. with your mail, calendar and a chicklet to start Domino Designer). <br /> I haven't found out so far where the other id's come from (just checked the design of the bookmark.nsf, but it's no obvious ID of the folders design elements). But by using some internal Notes functions, we are able to grab the folder id when you right click on an Open List entry and launch the corresponding Notes URL. <br /> <br /> So, what to do with this second action? I don't know. :-) <br /> My first thought was to use this special Notes URL in a Composite Application, something like my personal start page for the Notes Client. You can for example use the Notes Document Container to display this URL and send URL changes to the "SetNotesDocumentURL" action to switch between several workspace folders. In my first tests, quickly changing this URL did not appear very stable (the client crashed) and I did not look into this any further. <br /> <br /> Anyway, here are the source code for this sample and an update site for the installation (please refer to <a href="http://blog.mindoo.com/web/blog.nsf/dx/09.07.2009160821KLEJLA.htm" target="_blank">this article</a> if you don't know how to install from an update site).  <ul> <li><a href="http://blog.mindoo.com/web/blog.nsf/dx/ls10-com.mindoo.bookmarktools.zip/$file/ls10-com.mindoo.bookmarktools.zip" title="ls10-com.mindoo.bookmarktools.zip"ls10-com.mindoo.bookmarktools.zip/>ls10-com.mindoo.bookmarktools.zip</a>  </li><li><a href="http://blog.mindoo.com/web/blog.nsf/dx/ls10-com.mindoo.bookmarktools-updatesite.zip/$file/ls10-com.mindoo.bookmarktools-updatesite.zip" title="ls10-com.mindoo.bookmarktools-updatesite.zip"ls10-com.mindoo.bookmarktools-updatesite.zip/>ls10-com.mindoo.bookmarktools-updatesite.zip</a></li></ul>  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/30.01.2010154312KLEKA4.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/30.01.2010154312KLEKA4.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>I will be presenting a session about the new Java APIs of Lotus Notes 8.5.1 at the German Entwicklercamp conference (Developer camp)</title>
<pubDate>Thu, 28 Jan 2010 07:30:23 +0200</pubDate>
<description>
<![CDATA[ 
Now that Lotusphere is over, we are already preparing for our next session, this time for the German Entwicklercamp conference. 
The topic is Add-ons for Notes Client/Domino Designer based on new Java APIs of Lotus Notes 8.5.1 (track 4, session 5 in the session list). 
It's similar to our Lotusphere session, so if you missed it at Lotusphere, make sure to not miss it again. :-) 

The Entwicklercamp is an annual conference taking place from 8th to 10th of March in Gelsenkirchen, Germany, with a well known list of both national and international speakers and a lot of high-quality developer sessions. 
You can find more information on the Entwicklercamp website. Unfortunately it's only available in German language, but maybe Google translator will help you out if your German needs some training.  ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/28.01.2010073023KLE9N3.htm</link>
<category>Entwicklercamp 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/28.01.2010073023KLE9N3.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/28.01.2010073023KLE9N3.htm</guid>
<content:encoded><![CDATA[ Now that Lotusphere is over, we are already preparing for our next session, this time for the German Entwicklercamp conference. <br /> The topic is <a href=http://www.entwicklercamp.de/EntwicklerCamp/Themen target=_blank><span style="text-decoration:underline">Add-ons for Notes Client/Domino Designer based on new Java APIs of Lotus Notes 8.5.1</span></a> (track 4, session 5 in the session list). <br /> It's similar to our Lotusphere session, so if you missed it at Lotusphere, make sure to not miss it again. :-) <br /> <br /> The Entwicklercamp is an annual conference taking place from 8th to 10th of March in Gelsenkirchen, Germany, with a well known list of both national and international speakers and a lot of high-quality developer sessions. <br /> You can find more information on the <a href=http://www.entwicklercamp.de/ target=_blank><span style="text-decoration:underline">Entwicklercamp website</span></a>. Unfortunately it's only available in German language, but maybe Google translator will help you out if your German needs some training.   ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/28.01.2010073023KLE9N3.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/28.01.2010073023KLE9N3.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Our Lotusphere 2010 slides: BP203 - Leverage the New Java APIs in IBM Lotus Notes 8.5.1!</title>
<pubDate>Mon, 25 Jan 2010 00:41:24 +0200</pubDate>
<description>
<![CDATA[ 
We had a very positive response to our session about the Notes Client and Domino Designer extensibility Java APIs in Lotus Notes 8.5.1 at Lotusphere. All the feedback evaluations where either "Excelle ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/25.01.2010004124KLEVSF.htm</link>
<category>Lotusphere 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/25.01.2010004124KLEVSF.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/25.01.2010004124KLEVSF.htm</guid>
<content:encoded><![CDATA[ We had a very positive response to our session about the Notes Client and Domino Designer extensibility Java APIs in Lotus Notes 8.5.1 at Lotusphere. <br />All the feedback evaluations where either "Excellent" or "Good" and in addition, we also got personal feedback from 4-5 participants (even in the bus to the Hollywood studios on Wednesday) who especially liked the fact that we showed so many demos. <br /> <br />Well, to be honest, we even planned and developed more demos than we actually could show. We decided to remove some of them when we were doing a test run in the hotel room and easily exceeded the session limit of 60 minutes. :-) <br />If you look at the original BP203 slides that we submitted back in December and compare them to the presented slides, you will notice the missing pieces. <br /> <br />Since removing some of the demos was a last minute decision, all of them were already developed and running. So we plan to publish them in this blog in the next few weeks. Simply publishing the code would not help you much to learn about the Eclipse/Expeditor platform. That's why we will explain them in detail, each demo in its own blog article. <br /> <br />Let's start this demo article series with the session slides. Click on the image to download the PDF file: <div align=center> <br /><a href="http://blog.mindoo.com/web/blog.nsf/dx/BP203_LS10.pdf/$file/BP203_LS10.pdf" title="BP203 slides"><img  alt="Image:Our Lotusphere 2010 slides: BP203 - Leverage the New Java APIs in IBM Lotus Notes 8.5.1!" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/25.01.2010004124KLEVSF.htm/content/M2?OpenElement" /></a></div> <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/25.01.2010004124KLEVSF.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/25.01.2010004124KLEVSF.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Our LS10 session offering on Wednesday: BP203 - new Java APIs in 8.5.1 with up to 10 demos, 2 undocumented Notes functions and Lotusscript like you have never seen it before</title>
<pubDate>Wed, 20 Jan 2010 00:26:26 -0400</pubDate>
<description>
<![CDATA[ 
Our session "BP203 Leverage the New Java APIs in IBM Lotus Notes 8.5.1!" will provide a high-level overview of two new Java APIs in Lotus Notes 8.5.1 - the UI API and the Domino Designer API. Instead ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/20.01.2010002624KLE8E3.htm</link>
<category>Lotusphere 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/20.01.2010002624KLE8E3.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/20.01.2010002624KLE8E3.htm</guid>
<content:encoded><![CDATA[ Our session "BP203 Leverage the New Java APIs in IBM Lotus Notes 8.5.1!" will provide a high-level overview of two new Java APIs in Lotus Notes 8.5.1 - the UI API and the Domino Designer API. <br />Instead of showing too many technical details, our plan is to focus on real-life scenarios for the new APIs. <br /> <br />We have created a collection of up to 10 demos for both APIs, including <ul> <li>a universal help system for the Notes sidebar that provides information for the current database, form and field </li><li>an integration of <a href=http://blog.lsdoc.org/ target=_blank>Mikkel Heisterberg's LotusScript.doc</a> into Domino Designer </li><li>an alternative picture based address selection dialog for emails that can be used without modifying the mail template</li></ul> <br />and we'll demonstrate ways how LotusScript code can communicate with the Eclipse framework to leverage the new API functionality as well. <br />This will include an application that uses multithreaded LotusScript - a new technology to move your long running LotusScript tasks into the background in order to make your Notes applications snappier. <br /> <br />Come and join us on <strong>Wednesday from 3:00pm - 4:00pm in DL S. Hemisphere III</strong> ! <br /> <br />And please also join us on <strong>Thursday from 7:00am - 8:00am in SW Toucan 1</strong> to share our experiences with <strong>Application Architecture based on Composite Application</strong> (BOF206). <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/20.01.2010002624KLE8E3.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/20.01.2010002624KLE8E3.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Lotusphere announcement: LS2Eclipse - Leverage Eclipse/Expeditor features in your Lotusscript code!</title>
<pubDate>Mon, 11 Jan 2010 13:53:17 +0200</pubDate>
<description>
<![CDATA[ 
If one of the following questions sound familiar to you, this blog article may be interesting for you:
-You have Notes applications and want to bring them to the 21st century without rewriting everything in Java/JavaScript?
-Your users often sit at their desk waiting for your Notes application because of a long running Lotusscript operation?
-Composite Application technology looks interesting, but the Lotusscript APIs are not dynamic / powerful enough?
-As a Lotusscript developer, you always hated it to hear those Java guys saying "That's easy. All you have to do is call this Eclipse API..." :-)  ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/11.01.2010135317KLEH5D.htm</link>
<category>Lotusphere 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/11.01.2010135317KLEH5D.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/11.01.2010135317KLEH5D.htm</guid>
<content:encoded><![CDATA[ If one of the following questions sound familiar, this blog article may be interesting for you: <ul> <li>You have Notes applications and want to bring them to the 21st century without rewriting everything in Java/JavaScript? </li><li>Your users often sit at their desk waiting for your Notes application because of a long running Lotusscript operation? </li><li>Composite Application technology looks interesting, but the Lotusscript APIs are not dynamic / powerful enough? </li><li>As a Lotusscript developer, you always hated it to hear those Java guys saying "That's easy. All you have to do is call this Eclipse API..." :-) </li></ul>During our own Notes/Domino development in the past years, we often needed Eclipse API functionality in places where it was not available, like a classic view action, a form or an agent. <br />New features always got added to the "outside world", the Eclipse/Expeditor framework, but the classic Notes client and the Lotusscript language nearly stayed the same over the years. <br />While Java development for Eclipse/Expeditor has many advantages compared to classic form/view development of Lotus Notes, it surely makes development more complex and you loose the rapid application development approach that Lotus Notes made so successful. <br />In addition, long-time Notes users have an existing code base of thousands of lines of code, that they cannot simply rewrite in Java/JavaScript to create a new Java UI or XPages based application. <br /> <br /> <br />We think that there is a missing piece between classic Notes and the Expeditor framework of Lotus Notes R8.x. This is our main use case for <strong>Mindoo LS2Eclipse</strong>. <br /> <br /><strong>Mindoo LS2Eclipse is a bridging technology that makes Eclipse APIs accessible from Lotusscript code.</strong> <br /> <br />The following image is a rough overview of the LS2Eclipse architecture: <br /> <div align=center> <br /><img  alt="Image:Lotusphere announcement: LS2Eclipse - Leverage Eclipse/Expeditor features in your Lotusscript code!" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/11.01.2010135317KLEH5D.htm/content/M2?OpenElement" /></div> <br />The installation kit contains an Eclipse plugin (packaged as a widget for easy deployment) and a set of Lotusscript libraries. <br />Those libraries with a rich set of about 50 object-oriented Lotusscript classes give you access to many powerful Eclipse features, divided into the following 7 areas:  <br /> <br /><span style="text-decoration:underline">JobTools</span> <br />The JobTools area is a key feature of the LS2Eclipse API. It is the key to running your application code in multiple threads, thus making it possible to keep the user interface responsive even if a long-running operation (e.g. storing an email in a CRM system on a Domino server) is active. <br />Your Lotusscript code runs as a so called Eclipse Job, a background process that can optionally display a progress dialog with status/progress information.  <br /> <br />Feature overview: <ul> <li>Bridge between the Eclipse job framework and Notes agents </li><li>schedule the execution of an agent as an Eclipse background job </li><li>pass parameters to the job </li><li>jobs can report progress and can be cancelled on user request </li><li>Notes UI is responsive when job is running, job may change the UI during execution (e.g. to present the result)</li></ul><span style="text-decoration:underline">PlatformUI</span> <br />The PlatformUI area let's you read and interact with the Eclipse workbench, which is the graphical framework that is displaying the Lotus Notes client.  <br /> <br />Feature overview: <ul> <li>Read the structure of open windows, tabs and their contents (Eclipse views) </li><li>focus tabs, show/hide/minimize/maximize views </li><li>Access the side shelf, show/hide shelf views and toggle the shelf between collapsed, thin and expanded </li><li>show text in the status bar of the Notes client and show message boxes (e.g. to display information from a background agent job)</li></ul><span style="text-decoration:underline">ComponentTools</span> <br />The ComponentTools contain a set of tool classes to make Composite Applications more dynamic. <br /> <br />Feature overview: <ul> <li>call Composite Application actions of components manually without a CA wire </li><li>dynamically create and show content like Notes data or a web browser view  </li><li>modify the properties of components </li><li>read and modify the structure of a Composite Application (component/page preferences) </li><li>toggle between CA pages in your code (e.g. to create a custom navigator) </li><li>locate open views in the workbench based on their internal ids</li></ul><span style="text-decoration:underline">NotesUITools</span> <br />This area contains features of the new Java UI API in Lotus Notes 8.5.1. With it you can interact with the Notes client user interface, even if your code is running in a background job, where the standard NotesUIWorkspace is not available. In addition, you are no longer restricted to the active area of the screen to read/write data from/to a view or a document.  <br /> <br />Feature overview: <ul> <li>gives you access to the Notes UI even when your code is running in a background job </li><li>get a NotesUIDocument/NotesUIView handle for any area (IWorkbenchPart) of the screen, not just the active one </li><li>modify the NotesUIDocument's content, read the current selection from a NotesUIView </li><li>activate a view/document in the current page</li></ul><span style="text-decoration:underline">PerspectiveTools</span> <br />In the Notes client, an Eclipse perspective is the content of a main tab. The perspective tools give you access to all registered tabs in the system and they even allow for the creation of completely new tab layouts. <br /> <br />Feature overview <ul> <li>get list of registered Eclipse perspectives (IPerspectiveRegistry) </li><li>clone existing perspectives </li><li>create and display your own Eclipse tab layouts (IPerspectiveFactory/IPageLayout etc.) on the fly</li></ul><span style="text-decoration:underline">ProgramTools</span> <br />The program tools contain platform independent APIs to registered file extensions in the OS. <br /> <br />Feature overview <ul> <li>find associated programs by file extension </li><li>get list of registered file extensions in the system </li><li>launch files and urls</li></ul><span style="text-decoration:underline">ExtensionRegistryTools</span> <br />Experts can use the ExtensionRegistryTools to add new Eclipse extensions to the IExtensionRegistry of the Eclipse framework. <br /> <br /><strong>How does the code look like?</strong> <br /> <br />We tried to name the Lotusscript objects similar to their corresponding Eclipse API objects. That way, you already know most of the important Eclipse APIs if you start coding in Java later on and searching for code snippets on the internet is made easier. <br />To get a feeling for the API, here is a small code snippet: <br /> <br />To create a new API connection, you use this syntax: <br /> <br /><tt>Dim connection As EclipseConnection</tt> <br /><tt>Set connection=EclipseConnectionManager.createConnection()</tt> <br /> <br />To access the PlatformUI, type in this: <br /> <br /><tt>Dim platfUI As PlatformUI</tt> <br /><tt>Set platfUI=PlatformUIFactory.getInstance(connection)</tt> <br /> <br />The IPartService is a class to get the currently active area (IWorkbenchPart) of the screen: <br /> <br /><tt>Dim partService As IPartService</tt> <br /><tt>Dim part As IWorkbenchPart</tt> <br /><tt>Dim vpart as IViewPart</tt> <br /><tt>Dim classes as EclipseAPIClasses</tt> <br /><tt>Dim partTitle as String</tt> <br /><tt>Dim partId as String</tt> <br /><tt>Dim partSecondaryId as String</tt> <br /> <br /><tt>Set classes=connection.EclipseAPIClasses <font color="#008000">'helper to cast an object to another API object</font></tt> <br /><tt>Set partService=platfUI.getWorkbench().getActiveWorkbenchWindow().getPartService()</tt> <br /><tt>Set part=partService.getActivePart()</tt> <br /><tt>If classes.IViewPart.isInstance(part) then</tt> <br /><tt>&nbsp; &nbsp; &nbsp; &nbsp; <font color="#008000">'part is a IViewPart; this gives us additional properties</font></tt> <br /><tt>&nbsp; &nbsp; &nbsp; &nbsp; Set vpart=classes.IViewPart.cast(part)</tt> <br /><tt>&nbsp; &nbsp; &nbsp; &nbsp; partTitle=vpart.getTitle() &nbsp; &nbsp; &nbsp; &nbsp;</tt> <br /><tt>&nbsp; &nbsp; &nbsp; &nbsp; partId=vpart.getId()</tt> <br /><tt>&nbsp; &nbsp; &nbsp; &nbsp; partSecondaryId=vpart.getViewSite().getSecondaryId()</tt> <br /><tt>End If</tt> <br /> <br /> <br /><strong>Where to get the API</strong> <br /> <br />The API is feature complete, but we still have some documentation to write. For example, I'm currently working on a database with test cases that may be handy to learn about the new features. <br />It currently contains the following 12 cases: <ul> <li>Case 1 - Workbench information </li><li>Case 2 - PartService, get information about the active viewpart </li><li>Case 3 - Viewparts in the current page </li><li>Case 4 - Schedule background agent jobs </li><li>Case 5 - Change the UIDocument in another viewpart </li><li>Case 6 - Get the selection from a Notes view in another viewpart </li><li>Case 7 - Create new NSF viewparts in the current page </li><li>Case 8 - Create new NSF viewparts in a different tab </li><li>Case 9 - Manually call actions of CA components (change content of a document container) </li><li>Case 10 - Create a new Eclipse perspective layout with placeholders for new views </li><li>Case 11 - Compare selected documents in a new Eclipse perspective </li><li>Case 12 - Toggle the sidebar mode between collapsed/expanded/thin</li></ul>If you are interested and will be attending Lotusphere next week, <strong>come to our session about the new Java APIs of Lotus Notes 8.5.1 (BP203)</strong> on Wednesday from 3:00 until 4:00 pm or wake up early on Thursday to <strong>join us in our birds-of-a-feature session about "Application Architecture based on Composite Application technology" (BOF206)</strong> from 7:00 until 8:00 am. <br /> <br />I will post an info in this blog, when a trial version of LS2Eclipse is available. <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/11.01.2010135317KLEH5D.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/11.01.2010135317KLEH5D.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Our Birds-of-a-Feather session has been selected by the Lotusphere attendees!</title>
<pubDate>Thu, 10 Dec 2009 16:32:54 +0200</pubDate>
<description>
<![CDATA[ 
Good news from IBM today: Our BoF has been approved for Lotusphere 2010. That's our second approved session and particularly great because the BoF sessions were voted by the Lotusphere attendees.
Our session is one of those that they would most like to see on the agenda.

This is IBM's description for this kind of session:

Audience: Any and all Lotusphere attendees
Description: Come one, come all! Birds-of-a-Feather sessions are a popular feature of Lotusphere, bringing together communities and individuals with similar interests. These sessions are informal, interactive discussion groups for like-minded attendees to share ideas and experiences in an small group, open forum setting.


And here is our session abstract:

Application Architecture based on Composite Application technology

Composite Application technology builds a bridge between several worlds. With it you can transfer information between programming languages like Java and Lotusscript, fill Symphony spreadsheets with the contents of a Notes view, sent commands to host applications and even automate Windows applications.
With the introduction of XPages for the Notes client, CA technology gains additional momentum, because they are the way to go, if you need interaction between your XPages application and the surrounding Notes client platform.
We would like to share our experiences with Composite Application technology and discuss how an application architecture based on Composite Application technology could look like if you start designing it from scratch.

We are really looking forward to Lotusphere and are heavily working on cool demos for our session about the new Java API's of Lotus Notes 8.5.1. ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/10.12.2009163254KLEL95.htm</link>
<category>Lotusphere 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/10.12.2009163254KLEL95.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/10.12.2009163254KLEL95.htm</guid>
<content:encoded><![CDATA[ Good news from IBM today: Our BoF has been approved for Lotusphere 2010. That's our second approved session and particularly great because the BoF sessions were voted by the Lotusphere attendees. <br />Our session is one of those that they would most like to see on the agenda. <br /> <br />This is IBM's description for this kind of session: <br /> <br /><span style="text-decoration:underline">Audience:</span> Any and all Lotusphere attendees <br /><span style="text-decoration:underline">Description:</span> Come one, come all! Birds-of-a-Feather sessions are a popular feature of Lotusphere, bringing together communities and individuals with similar interests. These sessions are informal, interactive discussion groups for like-minded attendees to share ideas and experiences in an small group, open forum setting. <br /> <br /> <br />And here is our session abstract: <br /> <div align=center> <br /><strong>Application Architecture based on Composite Application technology</strong></div> <br /> <br />Composite Application technology builds a bridge between several worlds. With it you can transfer information between programming languages like Java and Lotusscript, fill Symphony spreadsheets with the contents of a Notes view, sent commands to host applications and even automate Windows applications. <br />With the introduction of XPages for the Notes client, CA technology gains additional momentum, because they are the way to go, if you need interaction between your XPages application and the surrounding Notes client platform. <br />We would like to share our experiences with Composite Application technology and discuss how an application architecture based on Composite Application technology could look like if you start designing it from scratch. <br /> <br />We are really looking forward to Lotusphere and are heavily working on cool demos for our <a href="http://blog.mindoo.com/web/blog.nsf/dx/17.11.2009203805KLER2D.htm" title="Add-ons for Client/Designer leveraging new Java APIs of Lotus Notes 8.5.1" target="_blank">session about the new Java API's of Lotus Notes 8.5.1</a>.  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/10.12.2009163254KLEL95.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/10.12.2009163254KLEL95.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>One Lotusphere 2010 session approved!</title>
<pubDate>Tue, 17 Nov 2009 20:38:06 +0200</pubDate>
<description>
<![CDATA[ 
We just received an email from IBM telling us that one of our session submissions for Lotusphere 2010 has been approved.
The title is:

Add-ons for Client/Designer leveraging new Java APIs of Lotus Notes 8.5.1

This is really cool, because it's our favorite topic. Those new APIs can be used for many small useful Notes and DDE add-ons and I'm sure we will have some nice giveaways for the session.

See you in Orlando!
 ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/17.11.2009203805KLER2D.htm</link>
<category>Lotusphere 2010</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/17.11.2009203805KLER2D.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/17.11.2009203805KLER2D.htm</guid>
<content:encoded><![CDATA[ We just received an email from IBM telling us that one of our session submissions for Lotusphere 2010 has been approved. <br />The title is: <br /> <div align=center> <br /><strong>Add-ons for Client/Designer leveraging new Java APIs of Lotus Notes 8.5.1</strong></div> <br /> <br />This is really cool, because it's our favorite topic. Those <a href="http://blog.mindoo.com/web/blog.nsf/dx//web/blog.nsf/dx/11.10.2009174606KLELHE.htm?opendocument&amp;comments" target=_blank>new APIs</a> can be used for many small useful Notes and DDE add-ons and I'm sure we will have some nice giveaways for the session. <br /> <br />See you in Orlando! <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/17.11.2009203805KLER2D.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/17.11.2009203805KLER2D.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>XPages series #8: Dynamically creating the UI of an XPage in Java</title>
<pubDate>Tue, 10 Nov 2009 23:11:23 +0200</pubDate>
<description>
<![CDATA[ 
This 8th part of the XPages series is more or less a link to a great blog posting that was just published my Tommy Valand.

It demonstrates how you can create a dynamic web user interface by leveraging JSF features in your XPages application. ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/10.11.2009231122KLEU27.htm</link>
<category>XPages</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/10.11.2009231122KLEU27.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/10.11.2009231122KLEU27.htm</guid>
<content:encoded><![CDATA[ This 8th part of the <a href="http://blog.mindoo.com/web/blog.nsf/dx//web/blog.nsf/archive?openview&amp;title=XPages&amp;type=cat&amp;cat=XPages" target=_blank>XPages series</a> is more or less a link to a great blog posting that was just published my Tommy Valand. <br /> <br /> It demonstrates how you can create a dynamic web user interface by leveraging JSF features in your XPages application. <br /> In his example, Tommy produces a data table UIComponent with a snippet of Java code that is executed with the click on a button. <div align=center> <br /><img  alt="Image:XPages series #8: Dynamically creating the UI of an XPage in Java" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/10.11.2009231122KLEU27.htm/content/M2?OpenElement" /></div> <br />I'm currently working on something similar for a customer project, but unfortunately I cannot say much about technical details at the moment. <br /> Basically, it's about dynamic application UI creation based on an abstract UI description. The system produces a dual-output: it dynamically creates the UI of an XPage, but it also creates a Java UI (e.g. a set of Swing components) with a similar form layout. <br /> Write once, run anywhere. :-) <br /> <br /> The concept includes its own data layer that works independent from Lotus Notes and has some fancy features like transaction logging (even for storing in Lotus Notes databases). <br /> <br /> I recommend that you take a look at <a href="http://dontpanic82.blogspot.com/2009/11/xpages-creating-data-table.html" target=_blank>Tommys posting</a> and start thinking about your personal use case for this. Anything is possible. <br /> <br /> In my next blog series posting I'm going to write about my own bean manager for managed beans that I needed as a workaround for <a href="http://blog.mindoo.com/web/blog.nsf/dx//web/blog.nsf/dx/21.10.2009142550KLEGL7.htm?opendocument&amp;comments" target=_blank>security limitations when running an XPages application in the Lotus Notes client</a>.   ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/10.11.2009231122KLEU27.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/10.11.2009231122KLEU27.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Today Mindoo joined IBM&#8217;s Design Partner program for Quickr 8.5</title>
<pubDate>Wed, 4 Nov 2009 13:42:02 +0200</pubDate>
<description>
<![CDATA[ 
We are now active participants in IBM's Design Partner programs for Notes/Domino and for Quickr 8.5. I'm currently installing the first Quickr 8.5 code drop on one of our development servers. 

We would like to thank IBM for letting us participate!  ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/04.11.2009134201KLEGWC.htm</link>
<category>Quickr</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/04.11.2009134201KLEGWC.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/04.11.2009134201KLEGWC.htm</guid>
<content:encoded><![CDATA[ We are now active participants in IBM's Design Partner programs for Notes/Domino and for Quickr 8.5. I'm currently installing the first Quickr 8.5 code drop on one of our development servers. <br /> <br /> We would like to thank IBM for letting us participate!   ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/04.11.2009134201KLEGWC.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/04.11.2009134201KLEGWC.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Speaking at Notesusertage 2009 (Notes user days, German conference) on the 5th of November - register until the 25th of October!</title>
<pubDate>Thu, 22 Oct 2009 21:49:23 +0200</pubDate>
<description>
<![CDATA[ 
Actually I'm not part of the main program, but demoing two applications that we are developing for our partner Haus Weilgut in a parallel customer track.
The first one is a pretty large XPages application framework (about 10 Java projects combined into one NSF). Let's call it an "UI generator", but it's actually a lot more than that.
The second application is a quite powerful relational reporting engine for Lotus Notes data. Something like "NotesSQL^2". :-) ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/22.10.2009214922KLER9E.htm</link>
<category>Notesusertage 2009</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/22.10.2009214922KLER9E.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/22.10.2009214922KLER9E.htm</guid>
<content:encoded><![CDATA[ Actually I'm not part of the main program, but demoing two applications that we are developing for our partner <a href="http://www.weilgut.de" target="_blank">Haus Weilgut</a> in a parallel customer track. <br />The first one is a pretty large XPages application framework (about 10 Java projects combined into one NSF). Let's call it a "UI generator", but it's actually a lot more than that. <br />The second application is a quite powerful relational reporting engine for Lotus Notes data. Something like "NotesSQL<sup>2</sup>". :-) <br /> <br />The Notesusertage conference is an annual German Notes conference located in Karlsruhe, Germany. <br /> <br />Registration is open until the 25th of October. Conference fee is 69 Euro. <br /> <br />Here is the German conference description from the <a href="http://www.notesusertage.de" target="_blank">Notesusertage website</a>: <br /> <br /><hr>Warum in die Ferne schweifen, wo das Gute doch so nah. <br /> <br />Erfahren Sie, wie Sie konsequent Ihre Lotus Notes- und Domino-Plattform im Unternehmen ausbauen und tauschen Sie sich mit Gleichgesinnten aus. <br /> <br />Die Notes Usertage treffen den Nerv der Zeit: <br />Anhand praktischer Beispiele aus großen und mittelständischen Unternehmen lernen Sie neue Erweiterungsmöglichkeiten kennen, mit denen Sie Investitionen in neue Systeme und Schnittstellen vermeiden. Dabei bringen Sie Ihre Infrastruktur auf den Stand, den die aktuelle Rechtslage erfordert. <br /> <br />Mehrwert mit Lotus Notes, das bedeutet: <ul> <li>unternehmensweites CRM </li><li>Wissens- und Projektmanagement </li><li>wirtschaftliche und rechtskonforme Archivierung von E-Mails </li><li>Kopplung mit ERP-Systemen </li><li>Ressourcenplanung </li><li>Optimierung mit Blackberry </li><li>schneller Zugriff auf Informationen </li><li>Reporting, Business Intelligence </li><li>... und vieles mehr!</li></ul>Neue Funktionen, Module und moderne Technologien machen Ihr Unternehmen leistungsfähiger und helfen Ihnen, vorhandene Ressourcen besser zu nutzen.  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/22.10.2009214922KLER9E.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/22.10.2009214922KLER9E.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>XPages series #7: Running under a restricted Java context - or: Why doesn&#8217;t my XPages application work in the Notes Client?!</title>
<pubDate>Wed, 21 Oct 2009 14:25:51 +0200</pubDate>
<description>
<![CDATA[ 
As an experienced XPages developer, Lotus Notes 8.5.1 user and reader of this XPages blog series, you may already have tried to use your XPages applications in the new Lotus Notes Client. 
As long as they only contain program code in JavaScript and a few simple Java routines, you will probably have succeeded. This article helps you for the other cases.
 ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/21.10.2009142550KLEGL7.htm</link>
<category>XPages</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/21.10.2009142550KLEGL7.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/21.10.2009142550KLEGL7.htm</guid>
<content:encoded><![CDATA[ As an experienced XPages developer, Lotus Notes 8.5.1 user and reader of this XPages blog series, you may already have tried to use your XPages applications in the new Lotus Notes Client. <br /> As long as they only contain program code in JavaScript and a few simple Java routines, you will probably have succeeded. Your application looks quite the same as on the web and you can now begin to tweak the UI with a client-specific theme and enhance the application features by <a href="http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm" title="XPages in the client: How to use XPages as components in Composite Applications" target="_blank"/>integrating it into a Composite Application</a>. <br /> <strong><br /> Any visual issues?</strong> <br /> If there are any visual issues (for instance I heard about dojo dialog boxes not resizing as expected, but haven't tested yet), keep in mind that the 8.5.1 Notes Client uses <strong>Xulrunner version 1.8.1.3</strong> to display the XPages, which is the <strong>render engine of Firefox 1.5</strong> as far as I know. So make sure to have everything you do compatible with that "nearly recent" Firefox version. ;-) <br /> (the Xulrunner executable is located in the folder <notesdir>\framework\rcp\eclipse\plugins\com.ibm.rcp.xulrunner.runtime.win32.x86_6.2.1.20090925-1604\xulrunner) <br /> It should be possible to do that (1.5 was already quite powerful), although I'm a bit confused because <a href="http://www.dojotoolkit.org/tags/browser-compatibility" target="_blank">this page</a> says that the dijit widgets are only supported in Firefox 2+x. But I saw at least the dijit tabbedpane work without problems in one of my apps. <br /> <strong><br /> Java execution errors?</strong> <br /> Let's say that you followed this blog series and did your homework. You have tried to use JSF managed beans in your application, understood the concept and like it. <br /> Well, then you may have already seen this Java exception thrown in a few methods, for example in those that call our JSF managed bean helper class: <br /> <br /> <code>javax.faces.FacesException: java.lang.SecurityException: ECL Permission Denied <br />  &nbsp; &nbsp;com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(Unknown Source) <br />  &nbsp; &nbsp;com.sun.faces.el.VariableResolverImpl.resolveVariable(Unknown Source) <br />  &nbsp; &nbsp;com.ibm.xsp.el.VariableResolverImpl.resolveVariable(Unknown Source) <br />  &nbsp; &nbsp;com.sun.faces.el.impl.NamedValue.evaluate(Unknown Source) <br />  &nbsp; &nbsp;com.sun.faces.el.impl.ExpressionEvaluatorImpl.evaluate(Unknown Source) <br />  &nbsp; &nbsp;com.sun.faces.el.ValueBindingImpl.getValue(Unknown Source) <br />  &nbsp; &nbsp;com.sun.faces.el.ValueBindingImpl.getValue(Unknown Source) <br />  &nbsp; &nbsp;com.acme.tools.JSFUtil.getBindingValue(Unknown Source)</code> <br /> <br /> When I first saw this, I yelled something comparable to "Interesting! How fascinating! A welcome challenge for me!". Ok, maybe less polite ;-). <br /> <br /> That was 2-3 days ago. Since then, I did some research and testing to find out what is causing this problem and how to deal with it. <br /> I'd like to share it with you. <br /> <strong><br /> The Domino Server - a secure environment</strong> <br /> So far, we did our Xpages development on a Domino server. We were allowed to do this, because our administrator granted us developer rights on a database on the server, and he gave us the power to execute our code on that machine. He does not allow anybody to do this. He knows us and trusts us. <br /> <strong><br /> Controlling access in the Notes Client</strong> <br /> It's a slightly different situation for the Notes client. A Notes user could download a Notes database with malicious code from anywhere on the internet. <br /> That's the reason why there is an <strong>Execution Control List</strong> (ECL) in the client to restrict what applications may do on the user's workstation. Critical operations like accessing the machine's filesystem need to be confirmed (trusted) by the user - and the administrator can prevent Notes users from easily trusting anyone. <br /> The ECL is not a new invention. It's been in the client for many years and controlled the program code of forms, views, agents and other design elements. <br /> <br /> For Eclipse plugins extending the Lotus Notes Standard client, there is no such thing as an ECL (because Eclipse does not have it), only the installation of plugins can be controlled by policy. <br /> This has produced a lot of discussion about the security of Eclipse plugins. <br /> <strong><br /> Security for local Xpages</strong> <br /> For the first implementation of XPages in the Notes client, IBM chose a more conservative security model. The Java programming language has a built-in security system, called the SecurityManager, that IBM connected to the ECL system of Lotus Notes. <strong>Everything that is not connected to the ECL system of Lotus Notes, is considered insecure and is therefore denied</strong>. <br /> <br /> Java developers may already know the impact of the SecurityManager when they try to do restricted operations (like accessing files) in Java applets. They just don't work. <br /> <br /> So that's what happens behind the scenes in our method "JSFUtil.getBindingValue(String)". It calls JSF functions and deep in the calling tree, there is a restricted method and the JVM says "no". <br /> <strong><br /> The good news</strong> <br /> The administrator does not have to worry about end users that download and open XPages applications from the web. <br /> <strong><br /> The bad news</strong> <br /> The developers and ISVs have to worry about what their application code is allowed to do and how to deal with the restrictions. <br /> <strong><br /> What is allowed?</strong> <br /> Here is a table with the available classes of allowed Java operations and their equivalent ECL levels in Notes 8.5.1: <br /> <br /> <table border="1"><tr><th>Java Permission</th><th>Note Client ECL Access (Workstation)</th></tr><tr><td>java.util.PropertyPermission</td><td>Environment variables</td></tr><tr><td>java.io.FilePermission</td><td>File system</td></tr><tr><td>java.net.SocketPermission</td><td>Network</td></tr></table><br>(plus using the Notes Java API) <br /> <br /> Calling a Java operation that needs one of these permissions results in a Notes ECL confirmation dialog if the XPage's signer is not trusted. <strong>Any other restricted Java operation that is not listed in the table will fail for Xpages in the Notes Client 8.5.1.</strong> <br /> <strong><br /> What is not allowed?</strong> <br /> Ok, this is the "not so funny" part of this blog posting. I did a few tests. I don't have a complete list, but I have some of the things that hurt the most:  <ul> <li>using java.net.URLConnection, e.g. to easily connect to a web server  </li><li>XML parsing with javax.xml.parsers.DocumentBuilder  </li><li>Loading Java resources with Class.getResourceAsStream()</li></ul>All three are prohibited because java.net.NetPermission is not connected to the ECL system. <br /> Regarding the URLConnection: Please note that you <em>can</em> use networking. I have a working demo of an XPages application in the client that downloads a HTML file from a web server (by using Java's <a href="http://java.sun.com/javase/6/docs/api/java/net/Socket.html" target="_blank">Socket</a> class and the HTTP protocol) and analyzes it in an XPages application in the client. Actually, at the moment, it's not 100% working any more, because I just upgraded to a new version of <a href="http://jtidy.sourceforge.net/" target="_blank">JTidy</a> which now internally loads Java resources with <em>Class.getResourceAsStream()</em>. Ouch... ;-) <br /> <strong><br /> Workaround for developers</strong> <br /> Add the grant command shown below to the java.policy file under the Notes directory and restart the client. <br /> <br /> <code>grant { <br />  &nbsp; &nbsp; &nbsp;permission java.security.AllPermission; <br /> };</code> <br /> <br /> This completely disables the security restrictions of the platform. That's why it's <strong><em><span style="text-decoration:underline">an extremely bad idea to do this on a user's machine</span></em></strong>. :-) <br /> But it makes it easy for you to work on your Java code and test it in the client. <br /> <strong><br /> Workaround for customer installations</strong> <br /> This is not really a workaround. <span style="text-decoration:underline">It's the only thing we have</span>. ;-) <br /> <br /> You can put all your restricted code in a JAR file and store it in the jvm/lib/ext directory of the Notes Client. That code then has the right to run with a higher security level and may do the things that your XPages Java code is not allowed to. <br /> Please note that you need a special syntax in your code to ask Java for that higher privilege level: <br /> <br /> <code>public class ExternalWorkaroundClass { <br />  &nbsp; &nbsp;public String tryWorkaround(final String anArgument) throws Exception { <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;String result = AccessController.doPrivileged( <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;new PrivilegedExceptionAction<String>() { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public String run() throws Exception { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;String result=null; <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//do some restricted operations here to compute result <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return result, <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;); <br />  &nbsp; &nbsp; &nbsp; &nbsp;return result; <br />  &nbsp; &nbsp;}</code> <br /> <strong><br /> How should I automatically deploy this to a few hundred customers???</strong> <br /> Don't ask me. Be creative. ;-). IBM dev is working on a better solution and more supported Java permissions in a future version (<strong><span style="text-decoration:underline">hopefully 8.5.2 or some kind of 8.5.1 fix pack</span></strong>). <br /> Looks like they thought that most of the XPages developers do not use those restricted (or any) Java classes at all. So the impact of this would not be too big. <br /> <br /> And they were probably right. But for us, this really hurts. <br /> <strong><br /> What about managed Java beans?</strong> <br /> I guess the JSF method that produces the Java exception shown at the beginning of this article either wants to load the JSF configuration XML file faces-config.xml as a Java resource or it wants to parse it using the JVM's XML parser. <br /> But hey, remember I said something similar to "A welcome challenge for me!"? :-) <br /> <br /> I'm currently writing my own bean manager. The whole bean concept is about creating a bean, feeding it with default values and storing it in the right scope. Who needs the JSF bean manager for that? :-)   ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/21.10.2009142550KLEGL7.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/21.10.2009142550KLEGL7.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Notes 8.5.1: The new Java UI classes and Domino Designer extensibility API</title>
<pubDate>Sun, 11 Oct 2009 17:46:06 +0200</pubDate>
<description>
<![CDATA[ 
I haven't read any blog articles yet about the new extensibility APIs that come with Lotus Notes 8.5.1. Since we participated in the discussion with IBM (at Lotusphere 2009 and later on in the Design Partner Program) about what needs to be part of a first official API version, I would like to give you some hints where to find these new APIs and what they are about. ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/11.10.2009174606KLELHE.htm</link>
<category>Lotus Notes 8.5.1</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/11.10.2009174606KLELHE.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/11.10.2009174606KLELHE.htm</guid>
<content:encoded><![CDATA[ <em>Disclaimer: IBM Lotus Notes/Domino 8.5.1 is prerelease code and there are no guarantees from IBM that the functionality presented or discussed will be in the final shipping product.</em> <br />  <br /> <br />I haven't read any blog articles yet about the new extensibility APIs that come with Lotus Notes 8.5.1. Since we participated in the discussion with IBM (at Lotusphere 2009 and later on in the Design Partner Program) about what needs to be part of a first official API version, I would like to give you some hints where to find these new APIs and what they are about. <br /> <br />Two new extensibility APIs will ship with Lotus Notes 8.5.1: <br /> <br /><strong><span style="text-decoration:underline">Domino Designer Extensibility API</span></strong> <br />With this API, an experienced Eclipse Java developer is able to track the user's selection in DDE (e.g. the Note ID/Notes URL of the selected design elements) in order to apply his own design modifications (e.g. via DXL import) and let DDE catch up with the modified design elements afterwards. <br />It contains functions to convert a standard Eclipse <tt>IProject</tt> into something called <tt>DesignerProject</tt> that provides additional information for a NSF database project in DDE. You get the basic NSF data like server/filepath/replica-id, some design related infos (template names, design hidden flag) and a few interaction methods, for example to open a database in DDE and to initialize/refresh the whole NSF project or single design elements in case you applied some changes to the backend Notes database. <br /> <br /><strong><span style="text-decoration:underline">Notes Client Java UI API</span></strong> <br />The Java UI API lets you get a handle on the currently opened UI document and UI view, called <tt>NotesUIDocument</tt> / <tt>NotesUIView</tt>: <br /> <br /><code>NotesUIWorkspace ws=new NotesUIWorkspace(); <br />NotesUIDocument uidoc=ws.getCurrentDocument(); <br />NotesUIView uiview=ws.getCurrentView();</code> <br /> <br />You do not have all the methods in Java yet that you know from the Lotusscript NotesUIDocument/NotesUIView, so don't expect too much for round nr 1. <font color="#ff0000">(<em>But read on until the last paragraph to see why this is not a real problem</em>)</font> <br /> <br /><span style="text-decoration:underline">NotesUIDocument</span> <br />With the Java based <tt>NotesUIDocument</tt> you are able to<em> modify fields</em> in the backend document. It provides refresh methods to make those changes visible in the front end. <br />Please note, that I said "<em>modify fields</em>", not "<em>get the backend document</em>". There are technical reasons (for example running in different threads and the Client's memory management) that make it impossible to get a full handle on the backend document, but the functionality of the API should be enough for most of the use cases. <br /> <br />You can get information about the currently focused field (including tracking focus changes with a <tt>DocumentFieldListener</tt>), toggle edit mode on/off, cut/copy/paste/insert text in the UI and detect that a document has been modified. <br /> <br /><span style="text-decoration:underline">NotesUIView</span> <br />The NotesUIView class gives you access to the view's name/UNID/URL. There is a method to print the view. <br /> <br />That not much for the NotesUIView, but by using the available Eclipse selection APIs you were already able to grab the selected documents in earlier Lotus Notes versions. <br /> <br /><span style="text-decoration:underline">NotesUIWorkspace</span> <br />In addition to the methods <tt>getCurrentDocument()</tt> and <tt>getCurrentView()</tt>, NotesUIWorkspace contains various methods to open Notes contents, like views, framesets or pages. There are also a few <tt>compose(...)</tt> methods that open a form to create a document in the Notes client. You can optionally specify a <tt>Document</tt> as an argument that contains fields that should be set as default field values in the form (this document can be a temporary document created with <tt>NotesUIWorkspace.getTemporaryDocument(Session)</tt>that is automatically deleted when the Notes client shuts down). <br /><tt>NotesUIWorkspace.addDatabase(...)</tt> adds a database to the workspace of the Notes client. <br />And finally, there is a <tt>NotesUIWorkspace.prompt(...)</tt> method that works like the corresponding method in Lotusscript. That means it displays different forms of selection dialogs with the style of the Notes client.  <br /> <br /><strong><span style="text-decoration:underline">Need more information?</span></strong> <br />So, how do you know the exact syntax of the available classes and methods?  <br />You can find the complete Javadoc documentation for the two new APIs in the help system of the Lotus Notes client: <div align=center> <br /><img  alt="Image:Notes 8.5.1: The new Java UI classes and Domino Designer extensibility API" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/11.10.2009174606KLELHE.htm/content/M2?OpenElement" /></div> <br /><strong><span style="text-decoration:underline">There is one more thing :-)</span></strong> <br />Oh wait, I forgot one method. Actually, it's my favorit one. <br />When we saw the first draft of the Java UI API at the end of last year, we thought of many things that we would like to add. <br />But you know, you quickly realize that you can only concentrate on a few features or even a single one, that is the most important to you and needs to be available for round nr 1. <br /> <br />Together with a few other design partners, we <em>desperately</em> asked/begged IBM to add one method, that is mission critical for the success of the API release. <br /> <br />The basic question was: What would you do if a feature is not available in Java, but you know that it's there in Lotusscript? You write a Lotusscript agent and call it from Java. <br />Something like <br /> <br /><code>Database db=session.getDatabase(server, filepath); <br />Agent myAgent=db.getAgent("MyLotusscriptAgent"); <br />myAgent.run();</code> <br /> <br />That's nothing new. A standard function in the Notes Java API sind R5 or R6. <br /> <br />Ever tried that with an agent that should do something in the UI, like changing a form's field values or open a selection dialog? <br />It does not work. <br /> <br />That's because Lotus Notes only executes that code in the backend, you do not have any UI access. <br /> <br /><strong>Here is the solution:</strong> <br /> <br /><tt><code><strong>public void runAgent(NotesAgentData agentData, NotesDocumentDataCallback callback, boolean runOnUIContext)</code></strong></tt> <br /><span style="font-size:10px;">From the javadoc: <br />Runs the agent represented by the agent data. Pass in false for runOnUIContext to run your agent on a temporary document. Pass in true for runOnUIContext to run your agent on the current selected document in the UI. Values added to the NotesAgentData object, using the addItem method, will be added to the temporary document. Also note with this method you can run an agent from one database on a completely different database. In other words, the agent you are running does not have to run on documents from the same database. While this gives the user more flexibility it also may break some assumptions of the agent, for example what fields are on the document.  <br /> <br />When running an agent on a temporary document it is recommended that you set the Target in the properties dialog of the agent to be 'None'. You can do this while editing the agent in Domino Designer. This allows you to run the agent without having anything selected in the UI. To access the temporary document from your agent, you can use Session.DocumentContext in LotusScript, or Session.getAgentContext().getDocumentContext() in Java. The note id of the temporary document is returned to you in the NotesDocumentDataCallback object.  <br />&#91;...&#93; <br />Parameters: <br />agentData - data about the agent to run <br />callback - callback to run when agent is done running <br />runOnUIContext - true to run the agent on the current UI context false to run the agent on the temporary document</span> <br /> <div align=center> <br />This new method is <font color="#ff0000"><strong>incredibly great<span style="text-decoration:underline"></font></span></strong>.</div> <br />It means that you can put all the code that is missing in this first Java UI API release into a Lotusscript or formula agent and use <tt>NotesUIWorkspace.runAgent()</tt> to execute it - <em>&nbsp;</em>in <em>any </em>database. And even better, there is a <em>callback mechanism</em> that you can use to get notified when the code is done to grab some results from a parameter document or the Notes.ini. <br /> <br /> <br /><strong>Tomorrow is Notes 8.5.1 release day. Have fun playing with the new APIs!</strong> <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/11.10.2009174606KLELHE.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/11.10.2009174606KLELHE.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>XPages in the client: How to use XPages as components in Composite Applications</title>
<pubDate>Mon, 14 Sep 2009 17:55:08 +0200</pubDate>
<description>
<![CDATA[ 
Today two interesting videos have been posted to the Domino Designer wiki that demonstrate how XPages in the Lotus Notes client 8.5.1 can be integrated with other components by using them as components of a Composite Application. ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm</link>
<category>Composite Application</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm</guid>
<content:encoded><![CDATA[ <em>Disclaimer: IBM Lotus Notes/Domino 8.5.1 is prerelease code and there are no guarantees from IBM that the functionality presented or discussed will be in the final shipping product.</em> <br /> <br /> <br />Today two interesting videos have been posted to the <a href="http://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPage_Components_in_Notes_851_Videos.htm" target=_blank>Domino Designer wiki</a> that demonstrate how XPages in the Lotus Notes client 8.5.1 can be integrated with other components by using them as components of a Composite Application. <br /> <br /><strong><span style="text-decoration:underline">Component definition for XPages</span></strong> <br />The first video shows how to transform an XPage into a new design element type called <em>Component</em>, that can then be used in a Composite Application. For a <em>Component</em>, you can define your own properties in order to configure the referenced XPage for a specific use case. <br />In the video, this is used to alter the theme of the XPage and to show and hide elements within the XPage's UI depending on the property value. By defining component properties, your XPages become much more reusable and configurable. The purpose is to reuse the same XPage in many different contexts (inside Composite Applications) without the need to change a line of code. <div align=center> <br /><a href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/lotus/XPages/Components/XPage_Components_in_Notes_851_Part1.html" target="_blank"><img  alt="Image:XPages in the client: How to use XPages as components in Composite Applications" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm/content/M2?OpenElement" /> <br />XPage of the discussion database as a component in a Composite Application (click to watch the video)</a></div> <br /> <br /><strong><span style="text-decoration:underline">Wiring XPages components to other components</span></strong> <br />In the second video, the XPage is wired to a mail database component and a web browser component. They communicate in both directions by sending Composite Application properties: <br />Clicking on links in the XPage changes the search query on the web and generates a new email with pre-filled fields. In the other direction, clicking on an email in the inbox opens the mail sender's article list in the XPage discussion database. <div align=center> <br /><a href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/lotus/XPages/Components/XPage_Components_in_Notes_851_Part2.html" target="_blank"><img  alt="Image:XPages in the client: How to use XPages as components in Composite Applications" border="0" src="http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm/content/M3?OpenElement" /> <br />Composite Application of an XPage, a Notes Java view and a browser component (click to watch the video)</a></div> <br />The video contains pretty simple examples, but when you understand the idea behind the whole concept, a lot more can be achieved with this technology. It's a great opportunity to extend the functionality of "XPages in the client". <br />In Lotus Notes 8.5.1, the pure XPages runtime will only provide basically the same as in the web browser. But by using Composite Application technology, you can easily add features to your application that are not yet available for XPages. <br /> <br />Let's take a look at another use case: <br />You could produce a formatted text in the code of your CRM XPages application (e.g. your own XML format from the user's selection) and publish it through a CA wire. Either you or any other developer can then build a CA component to receive and process this content. <br />They could e.g. develop it in Lotusscript to produce some fancy Notes richtext output or write an Eclipse plugin in Java to automate the Symphony office suite that is build inside Lotus Notes to create a new document, like a letter or even a complete report spreadsheet. <br />In this use case, the components that take care of the content output to richtext/Symphony, could also be hidden helper components without UI contribution to the Composite Application. <br /> <br /><strong><span style="text-decoration:underline">Summary</span></strong> <br />Although the first XPages implementation for the Lotus Notes client 8.5.1 is basically more or less a portable web application container, you can use Composite Application technology to add more functionality. <br /> <br />The benefit of the Composite Application architecture is to mix a lot of technologies for the purpose of a business use case without the need to redevelop cross-technology interfaces over and over again. Composite Applications have a simple data exchange system: The CA components use simple strings to send and receive data to other components. Components are connected through so called Composite Application wires to exchange this data. <br /> <br />Hopefully, the integration into the Notes client will be further improved in later Lotus Notes releases. The JSF technology that the XPages runtime is build upon, provides a technology called <a href=http://java.sun.com/javaee/javaserverfaces/reference/docs/customRenderKit.html target=_blank><em>custom render kits</em></a>. They can be used to create alternative output formats of a JSF application, e.g. native Java rendering in SWT or Swing or maybe solutions for mobile phone. <br />Although developing a custom render kit is a lot of work, this <em>might </em>be a way to enrich the XPages experience with native controls (like Java views and the native Notes richtext editor) in a later Lotus Notes version. Another approach could be to extend the <a href=https://developer.mozilla.org/en/XULRunner target=_blank>XULRunner</a> that the XPages runtime uses in the client to render the UI. <br />  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/14.09.2009175508KLELNZ.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/14.09.2009175508KLELNZ.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Augmented reality on the iPhone - a cool new concept with great potential</title>
<pubDate>Mon, 31 Aug 2009 13:52:02 +0200</pubDate>
<description>
<![CDATA[ 
A little sign of life, one week after the last vacation and one week before the next one. :-)

Our main work at the moment has to do with a completely new MindPlan version for our partner Haus Weilgut. There already is a standalone MindPlan application on the market that stores its data in Lotus Notes and one version that is directly integrated into the Lotus Notes 8.x client as a Composite Application component.
This new version is somehow different. Still using Notes/Domino technologies, but with a very innovative approach. Watch the MindPlan blog for announcements in the next weeks.

I will continue the XPages development and blogging after the next vacation (had to concentrate on MindPlan to produce an alpha test version).

For now, I've just come across a very cool new concept, called "Augmented reality" for the iPhone that I would like to share with you.

Here is an article about a sample application that integrates tourist information into the camera image of an iPhone:
The future is now? Augmented reality comes to the iPhone

I think the technology has a great potential, not only for tourist information. I think of very funny geo caching and virtual reality shooter games when I the demo video.
For example something like this on the iPhone: http://www.youtube.com/watch?v=Cix3Ws2sOsU  :-) ...
 ]]>
</description>
<link>http://blog.mindoo.com/web/blog.nsf/dx/31.08.2009135201KLEFX3.htm</link>
<category>iPhone</category>
<dc:creator>Karsten Lehmann</dc:creator>
<comments>http://blog.mindoo.com/web/blog.nsf/dx/31.08.2009135201KLEFX3.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://blog.mindoo.com/web/blog.nsf/dx/31.08.2009135201KLEFX3.htm</guid>
<content:encoded><![CDATA[ A little sign of life, one week after the last vacation and one week before the next one. :-) <br /> <br />Our main work at the moment has to do with a completely new <a href=http://www.mindplan.com target=_blank>MindPlan</a> version for our partner Haus Weilgut. There already is a standalone MindPlan application on the market that stores its data in Lotus Notes and one version that is directly integrated into the Lotus Notes 8.x client as a Composite Application component. <br />This new version is somehow different. Still using Notes/Domino technologies, but with a very innovative approach. Watch the <a href=http://blog.mindplan.com target=_blank>MindPlan blog</a> for announcements in the next weeks. <br /> <br />I will continue the XPages development and blogging after the next vacation (had to concentrate on MindPlan to produce an alpha test version). <br /> <br />For now, I've just come across a very cool new concept, called "Augmented reality" for the iPhone that I would like to share with you. <br /> <br />Here is an article about a sample application that integrates tourist information into the camera image of an iPhone: <br /><a href=http://www.macworld.com/article/142503/2009/08/augmented_reality.html target=_blank>The future is now? Augmented reality comes to the iPhone</a> <br /> <br />I think the technology has a great potential, not only for tourist information. I think of very funny geo caching and virtual reality shooter games when I the demo video. <br />For example something like this on the iPhone: <a href="http://www.youtube.com/watch?v=Cix3Ws2sOsU" target=_blank>http://www.youtube.com/watch?v=Cix3Ws2sOsU</a> &nbsp;:-)  ]]></content:encoded>
<wfw:commentRss> http://blog.mindoo.com/web/blog.nsf/dxcomments/31.08.2009135201KLEFX3.htm</wfw:commentRss>
<wfw:comment> http://blog.mindoo.com/web/blog.nsf/dx/31.08.2009135201KLEFX3.htm?opendocument&amp;comments</wfw:comment>
</item>
</channel></rss>
