Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://hasselba.ch/blog/?feed=rss2

  1. <?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://hasselba.ch/blog/wp-content/plugins/xslt/template.xsl"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. >
  9.  
  10. <channel>
  11. <title>[email protected]</title>
  12. <atom:link href="http://hasselba.ch/blog/?feed=rss2" rel="self" type="application/rss+xml" />
  13. <link>http://hasselba.ch/blog</link>
  14. <description></description>
  15. <lastBuildDate>Mon, 09 Apr 2018 15:44:05 +0000</lastBuildDate>
  16. <language>de-DE</language>
  17. <sy:updatePeriod>hourly</sy:updatePeriod>
  18. <sy:updateFrequency>1</sy:updateFrequency>
  19. <generator>https://wordpress.org/?v=4.9.5</generator>
  20. <item>
  21. <title>java.security.AccessControlException kills productivity</title>
  22. <link>http://hasselba.ch/blog/?p=2548</link>
  23. <comments>http://hasselba.ch/blog/?p=2548#respond</comments>
  24. <pubDate>Mon, 09 Apr 2018 15:39:29 +0000</pubDate>
  25. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  26. <category><![CDATA[Java]]></category>
  27. <category><![CDATA[Security]]></category>
  28. <category><![CDATA[Domino]]></category>
  29.  
  30. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2548</guid>
  31. <description><![CDATA[Dear IBM, can you please remove the totally useless java policy restrictions? Especially for agents running on the server? I can&#8217;t imagine how much life time and customers money was spent during the last decades just to find a workaround &#8230; <a href="http://hasselba.ch/blog/?p=2548">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  32. <content:encoded><![CDATA[<p>Dear IBM, can you please remove the totally useless java policy restrictions? Especially for agents running on the server?</p>
  33. <p>I can&#8217;t imagine how much life time and customers money was spent during the last decades just to find a workaround for these limitations. The Q&amp;A sites are full of questions about problems with this topic, and I never met someone who found the restriction usefull.</p>
  34. <p>It&#8217;s 2018, and writing something in Lotus Script just to &#8222;solve&#8220; this issue makes absolutly no sense. The whole &#8222;Let&#8217;s restrict Java as much as we can&#8220; is pita &#8211; everyone knows how to ship around these restrictions. The &#8222;bad guys&#8220; are not stopped, only the &#8222;good developers&#8220; will be limited.</p>
  35. <p>By the way: Are these limitations planned for <a href="https://nodejs.org/en/" target="_blank" rel="noopener">notes.js</a> integration? If so, please drop it immediatly.</p>
  36. ]]></content:encoded>
  37. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2548</wfw:commentRss>
  38. <slash:comments>0</slash:comments>
  39. </item>
  40. <item>
  41. <title>The anatomy of a LTPA token</title>
  42. <link>http://hasselba.ch/blog/?p=2525</link>
  43. <comments>http://hasselba.ch/blog/?p=2525#comments</comments>
  44. <pubDate>Tue, 27 Mar 2018 14:49:01 +0000</pubDate>
  45. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  46. <category><![CDATA[Security]]></category>
  47. <category><![CDATA[Server]]></category>
  48. <category><![CDATA[Domino]]></category>
  49. <category><![CDATA[Web]]></category>
  50.  
  51. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2525</guid>
  52. <description><![CDATA[LTPA Token LTPA token are widely used in the IBM world for authentication between different physical machines, also known as WebSSO. There are two three types available, LTPA1, LTPA2 and a Domino format. LTPA1 and LTPA2 are commonly used with &#8230; <a href="http://hasselba.ch/blog/?p=2525">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  53. <content:encoded><![CDATA[<h1>LTPA Token</h1>
  54. <p>LTPA token are widely used in the IBM world for authentication between different physical machines, also known as WebSSO. There are <del datetime="2018-03-27T15:48:34+00:00">two</del> three types available, LTPA1, LTPA2 and a Domino format.</p>
  55. <p>LTPA1 and LTPA2 are commonly used with WebSphere, and Domino can import the keys to work with this kind of token. The Domino version of LTPA is normally used in the Domino world, and that&#8217;s the token I will write about.</p>
  56. <p>First, what is a Domino LTPA token in general? It is a BASE64 encoded String containing the information about the user, including some timestamps. To avoid a security problem, the token is hashed and then encrypted (see here: <a href="https://www.ibm.com/support/knowledgecenter/en/SS9H2Y_7.2.0/com.ibm.dp.doc/ltpa_versionsandtokenformats.html">LTPA versions and token formats</a>).</p>
  57. <p>So let&#8217;s look into a real world example. Here is a LTPA Domino token from my server*:</p>
  58. <pre><code>77+9AQIDNUFCMTJBNjk1QUIxMzg3OUNOPVN2ZW4gSGFzc2VsYmFjaC9PPUhhc3NlbGJhL089Q0gwezcFKix7Fy00cg==</code></pre>
  59. <p>Now here comes the BASE64 decoded version:<br />
  60. <a href="http://hasselba.ch/blog/wp-content/uploads/2018/03/LTPA-Token.png"><img class="alignnone size-full wp-image-2530" src="http://hasselba.ch/blog/wp-content/uploads/2018/03/LTPA-Token.png" alt="" width="1288" height="142" srcset="http://hasselba.ch/blog/wp-content/uploads/2018/03/LTPA-Token.png 1288w, http://hasselba.ch/blog/wp-content/uploads/2018/03/LTPA-Token-300x33.png 300w, http://hasselba.ch/blog/wp-content/uploads/2018/03/LTPA-Token-768x85.png 768w, http://hasselba.ch/blog/wp-content/uploads/2018/03/LTPA-Token-1024x113.png 1024w" sizes="(max-width: 1288px) 100vw, 1288px" /></a></p>
  61. <p>As you can see, there is my username insinde of the token. And at this point I am a little bit confused, because the IBM writes in the linked article above:</p>
  62. <blockquote><p>Domino uses a shared key and SHA-1 to calculate a MAC over the content. After the MAC is attached, the user data and MAC are encrypted with a 3DES key obtained from the LTPA key file.</p></blockquote>
  63. <p>Maybe it is because I have super powers which allow me to decrypt the 3DES encrypted userdata in my brain. But I think it is just a wrong information, and the userdata are not encrypted with 3DES.</p>
  64. <p>This does not make the LTPA token unsafe, there is still a SHA-1 hash which protects the userdata from beeing changed in a text editor. Let&#8217;s look how the token is build up:</p>
  65. <h1>Anatomy of LTPA Domino Token</h1>
  66. <table>
  67. <tbody>
  68. <tr>
  69. <td style="text-align: center;"><strong>Byte</strong></td>
  70. <td style="text-align: center;"><strong>0-3</strong></td>
  71. <td style="text-align: center;"><strong>4-11</strong></td>
  72. <td style="text-align: center;"><strong>12-19</strong></td>
  73. <td style="text-align: center;"><strong>20 &#8211; ?</strong></td>
  74. <td style="text-align: center;"><strong>? &#8211; ? + 20</strong></td>
  75. <td></td>
  76. </tr>
  77. <tr>
  78. <td style="text-align: center;"><strong>Content</strong></td>
  79. <td style="text-align: center;">Header</td>
  80. <td style="text-align: center;">Creation</td>
  81. <td style="text-align: center;">Expiration</td>
  82. <td style="text-align: center;">Username</td>
  83. <td style="text-align: center;">Hash</td>
  84. <td></td>
  85. </tr>
  86. </tbody>
  87. </table>
  88. <h2>Header (4 Bytes)</h2>
  89. <table>
  90. <tbody>
  91. <tr>
  92. <td style="text-align: center;"><strong>Byte</strong></td>
  93. <td style="text-align: center;"><strong>01</strong></td>
  94. <td style="text-align: center;"><strong>02</strong></td>
  95. <td style="text-align: center;"><strong>03</strong></td>
  96. <td style="text-align: center;"><strong>04</strong></td>
  97. </tr>
  98. <tr>
  99. <td style="text-align: center;"><strong>Value</strong></td>
  100. <td style="text-align: center;">0</td>
  101. <td style="text-align: center;">1</td>
  102. <td style="text-align: center;">2</td>
  103. <td style="text-align: center;">3</td>
  104. </tr>
  105. </tbody>
  106. </table>
  107. <h2>Creation &amp; Expiration (each 8 Bytes)</h2>
  108. <p>These values are Java Dates stored as Long value.</p>
  109. <h2>Username (Length different)</h2>
  110. <p>A string containing the abbreviated form of the current username. The length varies.</p>
  111. <h2>Hash (20 Bytes)</h2>
  112. <p>A SHA-1 hash, 160 Bits long. The hash is generated by adding the LTPA secret at the end of the userdata; the result is added to the end of the LTPA token.</p>
  113. <h1>The Problem</h1>
  114. <p>The problem with LTPA Domino token is the use <a href="https://shattered.it/" target="_blank" rel="noopener">of an insecure hash algorithm.</a> We had to change all SSL certificates because of it, the NIST has deprecated it in 2011. And the 3DES encryption is a myth.</p>
  115. <p>But we are still protecting our infrastructure with this weak algorithm&#8230;</p>
  116. <p><sub>*: no, it&#8217;s not <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f609.png" alt="ūüėČ" class="wp-smiley" style="height: 1em; max-height: 1em;" /></sub></p>
  117. ]]></content:encoded>
  118. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2525</wfw:commentRss>
  119. <slash:comments>1</slash:comments>
  120. </item>
  121. <item>
  122. <title>Datenschutz in Hessen: Wen interessieren schon behinderte Kinder?</title>
  123. <link>http://hasselba.ch/blog/?p=2507</link>
  124. <comments>http://hasselba.ch/blog/?p=2507#comments</comments>
  125. <pubDate>Mon, 12 Mar 2018 21:48:26 +0000</pubDate>
  126. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  127. <category><![CDATA[Allgemein]]></category>
  128.  
  129. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2507</guid>
  130. <description><![CDATA[Ab Mai dieses Jahres wird es ernst: Das neue Datenschutzgesetzt tritt in Kraft, mit h√§rteren Anforderungen an die Datensammler, und noch h√§rteren Strafen bei Verst√∂√üen gegen die neuen Vorschriften. Zumindest gilt das f√ľr die Privatwirtschaft. Und f√ľr Privatpersonen. Beh√∂rden und &#8230; <a href="http://hasselba.ch/blog/?p=2507">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  131. <content:encoded><![CDATA[<p>Ab Mai dieses Jahres wird es ernst: Das neue Datenschutzgesetzt tritt in Kraft, mit h√§rteren Anforderungen an die Datensammler, und noch h√§rteren Strafen bei Verst√∂√üen gegen die neuen Vorschriften. Zumindest gilt das f√ľr die Privatwirtschaft. Und f√ľr Privatpersonen.</p>
  132. <p>Beh√∂rden und √Ąmter in Wiesbaden k√∂nnen n√§mlich machen was sie wollen, und auch zuk√ľnftig wird sich da wohl nicht viel √§ndern. Denn als ich am 22. Februar den hessischen Datenschutzbeauftragten informiert habe, da√ü das Schulamt Wiesbaden im Zuge einer Ausschreibung die Adressdaten von 97 beeintr√§chtigten Kindern einer F√∂rderschule im Netz ver√∂ffentlicht hat, war mir nicht bewusst, was dann geschehen w√ľrde: Nichts.</p>
  133. <p><a href="http://hasselba.ch/blog/wp-content/uploads/2018/03/Greenshot-2018-03-12-22.38.14.png"><img class="alignnone size-full wp-image-2508" src="http://hasselba.ch/blog/wp-content/uploads/2018/03/Greenshot-2018-03-12-22.38.14.png" alt="" width="832" height="760" srcset="http://hasselba.ch/blog/wp-content/uploads/2018/03/Greenshot-2018-03-12-22.38.14.png 832w, http://hasselba.ch/blog/wp-content/uploads/2018/03/Greenshot-2018-03-12-22.38.14-300x274.png 300w, http://hasselba.ch/blog/wp-content/uploads/2018/03/Greenshot-2018-03-12-22.38.14-768x702.png 768w" sizes="(max-width: 832px) 100vw, 832px" /></a></p>
  134. <p>OK, &#8222;Nichts&#8220; ist nicht ganz richtig, denn immerhin habe ich heute, auf mehrfache Nachfrage eine Stellungnahme erhalten, deren Kernsatz folgender ist:</p>
  135. <blockquote><p>&#8222;Zweifellos stehen ihre berechtigten Interessen dem eines inhaltvollen Ausschreibeverfahrens entgegen. Eine wie auch immer geartete Ver√§nderung des Ausschreibeverfahrens h√§tte mit einiger Wahrscheinlichkeit zur Folge, dass die Ausschreibung, da nicht mehr mit den allgemeinen Grunds√§tzen f√ľr ein derartiges Verfahren konform, von Dritten beanstandet werden k√∂nnte mit der Konsequenz, dass die Ausschreibung neu aufgesetzt werden m√ľsste.&#8220;</p>
  136. <ul>
  137. <li>Der Hessische Datenschutzbeauftragte</li>
  138. </ul>
  139. </blockquote>
  140. <p>Die Daten wieder l√∂schen geht nicht, weil da m√ľsste ja die Auschreibung vielleicht neu gemacht werden. Und das ist voll bl√∂d, weil das ist ja voll die Arbeit f√ľr die Kollegen im Schulamt. Sagt der hessische Datenschutzbeauftragte!</p>
  141. <p>Mir fehlen echt die Worte&#8230;</p>
  142. ]]></content:encoded>
  143. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2507</wfw:commentRss>
  144. <slash:comments>4</slash:comments>
  145. </item>
  146. <item>
  147. <title>Gemeinsame Erklärung der Eltern: Inklusion umsetzen!</title>
  148. <link>http://hasselba.ch/blog/?p=2502</link>
  149. <comments>http://hasselba.ch/blog/?p=2502#respond</comments>
  150. <pubDate>Thu, 01 Mar 2018 12:43:20 +0000</pubDate>
  151. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  152. <category><![CDATA[Allgemein]]></category>
  153.  
  154. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2502</guid>
  155. <description><![CDATA[Inklusion ist machbar. Wir kennen viele gute Beispiele. Deshalb danken wir all jenen, die Inklusion an hessischen Schulen schon jeden Tag leben. Wir sind entsetzt, dass Inklusion in Presse und √Ėffentlichkeit immer wieder aufs Neue infrage gestellt wird, anstatt konstruktive &#8230; <a href="http://hasselba.ch/blog/?p=2502">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  156. <content:encoded><![CDATA[<p>Inklusion ist machbar. Wir kennen viele gute Beispiele. Deshalb danken wir all jenen, die Inklusion an hessischen Schulen schon jeden Tag leben.</p>
  157. <p>Wir sind entsetzt, dass Inklusion in Presse und √Ėffentlichkeit immer wieder aufs Neue infrage gestellt wird, anstatt konstruktive Vorschl√§ge zu machen und Konzepte zu entwickeln, um das gemeinsame Lernen von Kindern mit und ohne Behinderung endlich konsequent und z√ľgig umzusetzen.</p>
  158. <p>Denn Inklusion ist keine Sache der Freiwilligkeit:</p>
  159. <p>Der UN-Fachausschuss erinnert in seinem Kommentar zu Artikel 24 UN-BRK daran, ‚Äědass Artikel 4 Absatz 5 von Bundesstaaten verlangt, dass Artikel 24 ohne Einschr√§nkung oder Ausnahmen f√ľr alle Teile des Vertragsstaats umgesetzt wird.&#8220;</p>
  160. <p>Die gemeinsame Erklärung der Eltern findet sich auf der Homepage von IGEL-WI:<br />
  161. <a href="http://www.igel-wi.de/?page_id=149" target="_blank" rel="noopener">Gemeinsame Erklärung der Eltern: Inklusion umsetzen!</a></p>
  162. ]]></content:encoded>
  163. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2502</wfw:commentRss>
  164. <slash:comments>0</slash:comments>
  165. </item>
  166. <item>
  167. <title>Quick-n-Dirty: Hotfix for DateTimeHelper</title>
  168. <link>http://hasselba.ch/blog/?p=2429</link>
  169. <comments>http://hasselba.ch/blog/?p=2429#comments</comments>
  170. <pubDate>Mon, 12 Jun 2017 15:04:40 +0000</pubDate>
  171. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  172. <category><![CDATA[Java]]></category>
  173. <category><![CDATA[JSF]]></category>
  174. <category><![CDATA[XPages]]></category>
  175. <category><![CDATA[9.0]]></category>
  176. <category><![CDATA[Bug]]></category>
  177. <category><![CDATA[Domino]]></category>
  178.  
  179. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2429</guid>
  180. <description><![CDATA[This weekend I stumbled over a bug of the DateTimeHelper: If the value of the field is empty, no actions and/or action listeners connected with a managed bean will be executed anymore. Here is an example of a small XPage &#8230; <a href="http://hasselba.ch/blog/?p=2429">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  181. <content:encoded><![CDATA[<p>This weekend I stumbled over a bug of the <em>DateTimeHelper</em>: If the value of the field is empty, no actions and/or action listeners connected with a managed bean will be executed anymore.</p>
  182. <p>Here is an example of a small XPage to illustrate the problem:</p>
  183. <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  184. &lt;xp:view xmlns:xp="http://www.ibm.com/xsp/core"&gt;
  185.    &lt;xp:label
  186.        value="#{javascript:java.lang.System.currentTimeMillis()}" id="labelNow" /&gt;
  187.  
  188.     &lt;xp:inputText id="inputTextDT" value="#{myBean.valueDT}"&gt;
  189.         &lt;xp:this.converter&gt;
  190.             &lt;xp:convertDateTime type="date" /&gt;
  191.         &lt;/xp:this.converter&gt;
  192.         &lt;xp:dateTimeHelper /&gt;
  193.     &lt;/xp:inputText&gt;
  194.  
  195.    &lt;xp:button id="button" value="OK"&gt;
  196.        &lt;xp:eventHandler
  197.            event="onclick"
  198.            submit="true"
  199.            refreshMode="partial"
  200.            refreshId="labelNow"
  201.            actionListener="#{myBean.action}" /&gt;
  202.     &lt;/xp:button&gt;
  203.  
  204. &lt;/xp:view&gt;</code></pre>
  205. <p>It does not matter if you set the <em>disableValidators</em> property for the text field to <em>true</em>, even an <em>immediate=true</em> won&#8217;t help here. The reason for the problem is that the renderer of the <em>dateTimeHelper </em>always uses the attached converter and fails with a null pointer exception if the value is empty (this infringes the JSF specification, but IBM has implemented it this way).</p>
  206. <p>The workaround for this problem is to overwrite the existing renderer class and handle the NPE by yourself:</p>
  207. <pre><code>package ch.hasselba.xpages.renderer;
  208.  
  209. import javax.faces.component.UIComponent;
  210. import javax.faces.context.FacesContext;
  211. import javax.faces.convert.ConverterException;
  212. public class DateTimeHelperRenderer
  213.    extends com.ibm.xsp.renderkit.dojo.DateTimeHelperRenderer{
  214.  
  215.     public Object getConvertedValue(FacesContext fc, UIComponent uiComponent, Object obj)
  216.    ¬† ¬† throws ConverterException¬† {
  217.  
  218.         ¬†Object result = super.getConvertedValue(fc, uiComponent, obj);
  219.  
  220.         ¬†if( result == null )
  221.           ¬†return new Object();
  222.  
  223.       ¬† ¬†return result;
  224.  ¬† }
  225. }</code></pre>
  226. <p>The renderer must now be registered in <em>faces-config.xml</em>:</p>
  227. <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  228. &lt;faces-config&gt;
  229.  &lt;render-kit&gt;
  230.    &lt;renderer&gt;
  231.      &lt;component-family&gt;javax.faces.Input&lt;/component-family&gt;
  232.      &lt;renderer-type&gt;com.ibm.xsp.DateTimeHelper&lt;/renderer-type&gt;
  233.      &lt;renderer-class&gt;ch.hasselba.xpages.renderer.DateTimeHelperRenderer&lt;/renderer-class&gt;
  234.    &lt;/renderer&gt;
  235.  &lt;/render-kit&gt;
  236. &lt;/faces-config&gt;
  237. </code></pre>
  238. <p>Now the problem is solved, the managed bean&#8217;s action get executed even if the value is empty.</p>
  239. ]]></content:encoded>
  240. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2429</wfw:commentRss>
  241. <slash:comments>1</slash:comments>
  242. </item>
  243. <item>
  244. <title>High Performance REST Applications (4) ‚Äď Looking into OSGi</title>
  245. <link>http://hasselba.ch/blog/?p=2413</link>
  246. <comments>http://hasselba.ch/blog/?p=2413#comments</comments>
  247. <pubDate>Thu, 04 May 2017 09:41:43 +0000</pubDate>
  248. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  249. <category><![CDATA[Apache Wink]]></category>
  250. <category><![CDATA[Java]]></category>
  251. <category><![CDATA[JEE]]></category>
  252. <category><![CDATA[OSGi]]></category>
  253. <category><![CDATA[REST]]></category>
  254. <category><![CDATA[Server]]></category>
  255. <category><![CDATA[Web]]></category>
  256. <category><![CDATA[Domino]]></category>
  257.  
  258. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2413</guid>
  259. <description><![CDATA[Before going any deeper into the the servlet project, let&#8217;s have a look at the imported projects and talk about some OSGi basics. First you will notice that for every cloned repository three Eclipse projects have been imported: A plugin &#8230; <a href="http://hasselba.ch/blog/?p=2413">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  260. <content:encoded><![CDATA[<p>Before going any deeper into the the servlet project, let&#8217;s have a look at the imported projects and talk about some OSGi basics.</p>
  261. <p>First you will notice that for every cloned repository three Eclipse projects have been imported:</p>
  262. <ol>
  263. <li>A plugin project</li>
  264. <li>A feature project</li>
  265. <li>An updatesite project</li>
  266. </ol>
  267. <p>The plugin project contains the code and all the relevant resources of the servlet. It defines extension points provided or describes which extension points are used by the plugin.<br />
  268. A feature project is basically a list of plugins and other features which can be understood as a logical separate unit. And an updatesite contains all features you need.</p>
  269. <p>Using an UpdateSite is the preferred way to deploy plugins to Domino. It has a &#8222;<em>Build All</em>&#8222;-Button which builds all plugins from all features in your updatesite project, and creates the JARs to import into an UpdateSite in Domino.</p>
  270. <div id="attachment_2417" style="width: 486px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/05/01-updatesite_site.xml_-2.png"><img class="size-full wp-image-2417" src="http://hasselba.ch/blog/wp-content/uploads/2017/05/01-updatesite_site.xml_-2.png" alt="" width="476" height="293" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/05/01-updatesite_site.xml_-2.png 476w, http://hasselba.ch/blog/wp-content/uploads/2017/05/01-updatesite_site.xml_-2-300x185.png 300w" sizes="(max-width: 476px) 100vw, 476px" /></a><p class="wp-caption-text">Update Site &#8222;Build All&#8220;-Button</p></div>
  271. <p>A plugin is mainly described by two files: the <em>MANIFEST.MF</em> (stored in the <em>/META-INF</em> folder) and a <em>plugin.xml</em> in the root.</p>
  272. <div id="attachment_2418" style="width: 415px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/05/02-Plugin.XML-MANIFEST.MF_-1.png"><img class="size-full wp-image-2418" src="http://hasselba.ch/blog/wp-content/uploads/2017/05/02-Plugin.XML-MANIFEST.MF_-1.png" alt="" width="405" height="182" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/05/02-Plugin.XML-MANIFEST.MF_-1.png 405w, http://hasselba.ch/blog/wp-content/uploads/2017/05/02-Plugin.XML-MANIFEST.MF_-1-300x135.png 300w" sizes="(max-width: 405px) 100vw, 405px" /></a><p class="wp-caption-text">plugin.xml &amp; MANIFEST.MF</p></div>
  273. <p>The <em>MANIFEST.MF</em> contains meta informations about the Plugin, like the name, imports and exports, other required bundles, the Activator class, the Execution environment and many more.</p>
  274. <p>For example the <em>Domino REST servlet plugin</em> requires the <em>concurrent plugin</em>:</p>
  275. <div id="attachment_2419" style="width: 494px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/05/03-Required-Bundles.png"><img class="size-full wp-image-2419" src="http://hasselba.ch/blog/wp-content/uploads/2017/05/03-Required-Bundles.png" alt="" width="484" height="375" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/05/03-Required-Bundles.png 484w, http://hasselba.ch/blog/wp-content/uploads/2017/05/03-Required-Bundles-300x232.png 300w" sizes="(max-width: 484px) 100vw, 484px" /></a><p class="wp-caption-text">Required Bundles: &#8222;ch.hasselba.concurrent.plugin&#8220;</p></div>
  276. <p>If the bundle is loaded, but the requirements are not fullyfied, the bundle won&#8217;t start.</p>
  277. <p>The <em>plugin.xml</em> is optional for OSGI bundles, but we need this file, because it describes the extension point used by our plugin:</p>
  278. <div id="attachment_2420" style="width: 425px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/05/04-Plugin.xml_.png"><img class="size-full wp-image-2420" src="http://hasselba.ch/blog/wp-content/uploads/2017/05/04-Plugin.xml_.png" alt="" width="415" height="235" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/05/04-Plugin.xml_.png 415w, http://hasselba.ch/blog/wp-content/uploads/2017/05/04-Plugin.xml_-300x170.png 300w" sizes="(max-width: 415px) 100vw, 415px" /></a><p class="wp-caption-text">plugin.xml &#8211; Extension Point</p></div>
  279. <p>Our servlet plugin uses the <em>com.ibm.pvc.webcontainer.application</em> extension point to run a JEE application. The parameter <em>contextRoot</em> is the path our servlet listens (which means it will be reachable at <em>http://example.com/ec2017</em>), and the <em>contentLocation</em> parameter is the path to the static files of the plugin and our <em>web.xml</em>.</p>
  280. <div id="attachment_2421" style="width: 411px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/05/05-WebContent.png"><img class="size-full wp-image-2421" src="http://hasselba.ch/blog/wp-content/uploads/2017/05/05-WebContent.png" alt="" width="401" height="237" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/05/05-WebContent.png 401w, http://hasselba.ch/blog/wp-content/uploads/2017/05/05-WebContent-300x177.png 300w" sizes="(max-width: 401px) 100vw, 401px" /></a><p class="wp-caption-text">WebContent folder</p></div>
  281. <p>An Activator class is the class executed when a bundle is started or stopped (or the other possibilities a <a href="https://en.wikipedia.org/wiki/OSGi#Life-cycle" target="_blank" rel="noopener noreferrer">lifecyle of a bundle</a> can have). It is also a good idea to store the <em>BundleContext</em> in the Activator to communicate with the OSGi environment.</p>
  282. <p>Last but not least, there is a <em>build.properties</em> file: This file is for Eclipse and contains all relevant information to build the bundle. This means that if you add a JAR file the plugin requires, you have to add the JAR to both &#8211; the <em>MANIFEST.MF</em> and the <em>build.properties </em>(if the classes of the JAR file are used in the project).</p>
  283. <p>In the Domino REST Servlet project, the <em>spymemcached.jar</em> is used, that&#8217;s why it is added to the build path and the manifest:</p>
  284. <div id="attachment_2423" style="width: 606px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/05/07-build.properties.png"><img class="size-full wp-image-2423" src="http://hasselba.ch/blog/wp-content/uploads/2017/05/07-build.properties.png" alt="" width="596" height="227" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/05/07-build.properties.png 596w, http://hasselba.ch/blog/wp-content/uploads/2017/05/07-build.properties-300x114.png 300w" sizes="(max-width: 596px) 100vw, 596px" /></a><p class="wp-caption-text">build.properties &#8211; spymemcached JAR</p></div>
  285. <div id="attachment_2422" style="width: 525px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/05/06-MANIFEST.MF_.png"><img class="size-full wp-image-2422" src="http://hasselba.ch/blog/wp-content/uploads/2017/05/06-MANIFEST.MF_.png" alt="" width="515" height="143" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/05/06-MANIFEST.MF_.png 515w, http://hasselba.ch/blog/wp-content/uploads/2017/05/06-MANIFEST.MF_-300x83.png 300w" sizes="(max-width: 515px) 100vw, 515px" /></a><p class="wp-caption-text">MANTIFEST.MF &#8211; spymemcached JAR</p></div>
  286. <p>You have to keep this in your mind, because if you write some code, it is not enough just to add the required JAR to the build path, it also has to be exported in your bundle / plugin.</p>
  287. <p>In the next post, let&#8217;s have a look into <em>web.xml</em>, and then go into the real &#8222;<em>High Performance</em>&#8220; solution.</p>
  288. ]]></content:encoded>
  289. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2413</wfw:commentRss>
  290. <slash:comments>2</slash:comments>
  291. </item>
  292. <item>
  293. <title>High Performance REST Applications (3) ‚Äď Importing the Starter Project</title>
  294. <link>http://hasselba.ch/blog/?p=2397</link>
  295. <comments>http://hasselba.ch/blog/?p=2397#comments</comments>
  296. <pubDate>Mon, 24 Apr 2017 09:03:24 +0000</pubDate>
  297. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  298. <category><![CDATA[Java]]></category>
  299. <category><![CDATA[JEE]]></category>
  300. <category><![CDATA[OSGi]]></category>
  301. <category><![CDATA[Performance]]></category>
  302. <category><![CDATA[REST]]></category>
  303. <category><![CDATA[Server]]></category>
  304. <category><![CDATA[Web]]></category>
  305. <category><![CDATA[Domino]]></category>
  306.  
  307. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2397</guid>
  308. <description><![CDATA[Now you can import the projects required from Git. First, go to &#8222;File &#62; Import&#8230;&#8220; Then select &#8222;Projects from Git&#8220; and &#8222;Clone URI&#8220; to clone an existing repository: To get the URI, you have to open https://github.com/hasselbach/ and select the &#8230; <a href="http://hasselba.ch/blog/?p=2397">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  309. <content:encoded><![CDATA[<p>Now you can import the projects required from Git.</p>
  310. <p>First, go to &#8222;<em>File &gt; Import&#8230;</em>&#8220;</p>
  311. <div id="attachment_2398" style="width: 359px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Import.png"><img class="size-full wp-image-2398" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Import.png" alt="" width="349" height="566" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Import.png 349w, http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Import-185x300.png 185w" sizes="(max-width: 349px) 100vw, 349px" /></a><p class="wp-caption-text">Import Project</p></div>
  312. <p>Then select &#8222;<em>Projects from Git&#8220;</em></p>
  313. <div id="attachment_2399" style="width: 535px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Project-from-GIT.png"><img class="size-full wp-image-2399" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Project-from-GIT.png" alt="" width="525" height="551" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Project-from-GIT.png 525w, http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Project-from-GIT-286x300.png 286w" sizes="(max-width: 525px) 100vw, 525px" /></a><p class="wp-caption-text">Projects from Git</p></div>
  314. <p>and &#8222;<em>Clone URI</em>&#8220; to clone an existing repository:</p>
  315. <div id="attachment_2400" style="width: 539px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/03-Clone-URI.png"><img class="size-full wp-image-2400" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/03-Clone-URI.png" alt="" width="529" height="556" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/03-Clone-URI.png 529w, http://hasselba.ch/blog/wp-content/uploads/2017/04/03-Clone-URI-285x300.png 285w" sizes="(max-width: 529px) 100vw, 529px" /></a><p class="wp-caption-text">Clone existing respository</p></div>
  316. <p>To get the URI, you have to open <a href="https://github.com/hasselbach/" target="_blank" rel="noopener noreferrer">https://github.com/hasselbach/</a> and select the repository &#8222;<em>ch.hasselba.concurrent</em>&#8222;. Click the &#8222;<em>Clone or download</em>&#8222;-Button and copy the URI from the opening box:</p>
  317. <div id="attachment_2401" style="width: 1004px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Repository-URI.png"><img class="size-full wp-image-2401" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Repository-URI.png" alt="" width="994" height="506" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Repository-URI.png 994w, http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Repository-URI-300x153.png 300w, http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Repository-URI-768x391.png 768w" sizes="(max-width: 994px) 100vw, 994px" /></a><p class="wp-caption-text">Get the repository URI</p></div>
  318. <p>Paste the URI into the location in Eclipse</p>
  319. <div id="attachment_2402" style="width: 541px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/05-URI-to-clone.png"><img class="size-full wp-image-2402" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/05-URI-to-clone.png" alt="" width="531" height="557" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/05-URI-to-clone.png 531w, http://hasselba.ch/blog/wp-content/uploads/2017/04/05-URI-to-clone-286x300.png 286w" sizes="(max-width: 531px) 100vw, 531px" /></a><p class="wp-caption-text">Add the URI to Eclipse</p></div>
  320. <p>In the next dialog, you can choose the branch to import. In this case, only &#8222;<em>master</em>&#8220; exists</p>
  321. <div id="attachment_2403" style="width: 542px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/06-Select-Branch.png"><img class="size-full wp-image-2403" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/06-Select-Branch.png" alt="" width="532" height="557" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/06-Select-Branch.png 532w, http://hasselba.ch/blog/wp-content/uploads/2017/04/06-Select-Branch-287x300.png 287w" sizes="(max-width: 532px) 100vw, 532px" /></a><p class="wp-caption-text">Select the branch to import</p></div>
  322. <p>Now you have to choose a local destination where the cloned repository will be stored</p>
  323. <div id="attachment_2404" style="width: 538px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Local-Destination.png"><img class="size-full wp-image-2404" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Local-Destination.png" alt="" width="528" height="552" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Local-Destination.png 528w, http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Local-Destination-287x300.png 287w" sizes="(max-width: 528px) 100vw, 528px" /></a><p class="wp-caption-text">Select the local destination</p></div>
  324. <p>Select &#8222;<em>Import existing Eclipse projects</em>&#8222;&#8230;</p>
  325. <div id="attachment_2405" style="width: 541px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/08-Existing-Projects.png"><img class="size-full wp-image-2405" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/08-Existing-Projects.png" alt="" width="531" height="555" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/08-Existing-Projects.png 531w, http://hasselba.ch/blog/wp-content/uploads/2017/04/08-Existing-Projects-287x300.png 287w" sizes="(max-width: 531px) 100vw, 531px" /></a><p class="wp-caption-text">Import existing projects</p></div>
  326. <p>&#8230; and select all projects of the repository:</p>
  327. <div id="attachment_2406" style="width: 538px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Projects-to-import.png"><img class="size-full wp-image-2406" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Projects-to-import.png" alt="" width="528" height="558" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Projects-to-import.png 528w, http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Projects-to-import-284x300.png 284w" sizes="(max-width: 528px) 100vw, 528px" /></a><p class="wp-caption-text">Select all projects</p></div>
  328. <p>With &#8222;<em>Finish</em>&#8222;, the sources are downloaded. In the &#8222;<em>Project Explorer</em>&#8222;, you can see the three imported projects. And you can see the original repository name and the current branch you are working on:</p>
  329. <div id="attachment_2407" style="width: 452px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/10-GIT-and-Branch.png"><img class="size-full wp-image-2407" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/10-GIT-and-Branch.png" alt="" width="442" height="212" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/10-GIT-and-Branch.png 442w, http://hasselba.ch/blog/wp-content/uploads/2017/04/10-GIT-and-Branch-300x144.png 300w" sizes="(max-width: 442px) 100vw, 442px" /></a><p class="wp-caption-text">Repository &amp; Branch</p></div>
  330. <p>The JRE used for the project can be seen if you expand one of the projects. &#8222;Sometimes&#8220; this changes magically, and the build will fail &#8211; that is one of the first things you have to check if you have errors in a OSGi project.</p>
  331. <div id="attachment_2408" style="width: 432px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/11-Plugin-Sourcecode.png"><img class="size-full wp-image-2408" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/11-Plugin-Sourcecode.png" alt="" width="422" height="261" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/11-Plugin-Sourcecode.png 422w, http://hasselba.ch/blog/wp-content/uploads/2017/04/11-Plugin-Sourcecode-300x186.png 300w" sizes="(max-width: 422px) 100vw, 422px" /></a><p class="wp-caption-text">JRE / Target used for this project</p></div>
  332. <p>Now, do the same for the &#8222;<em>domino-rest-servlet</em>&#8220; repository. But instead importing the &#8222;<em>master</em>&#8220; branch, select the &#8222;<em>highperformance</em>&#8220; branch only.</p>
  333. <div id="attachment_2409" style="width: 565px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/12-HP-Branch.png"><img class="size-full wp-image-2409" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/12-HP-Branch.png" alt="" width="555" height="556" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/12-HP-Branch.png 555w, http://hasselba.ch/blog/wp-content/uploads/2017/04/12-HP-Branch-150x150.png 150w, http://hasselba.ch/blog/wp-content/uploads/2017/04/12-HP-Branch-300x300.png 300w" sizes="(max-width: 555px) 100vw, 555px" /></a><p class="wp-caption-text">Import HighPerformance Branch</p></div>
  334. <p>That&#8217;s it. In the next post, we have take a look in what you have downloaded.</p>
  335. ]]></content:encoded>
  336. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2397</wfw:commentRss>
  337. <slash:comments>4</slash:comments>
  338. </item>
  339. <item>
  340. <title>High Performance REST Applications (2) ‚Äď Dev Environment</title>
  341. <link>http://hasselba.ch/blog/?p=2376</link>
  342. <comments>http://hasselba.ch/blog/?p=2376#comments</comments>
  343. <pubDate>Sun, 23 Apr 2017 08:55:52 +0000</pubDate>
  344. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  345. <category><![CDATA[Java]]></category>
  346. <category><![CDATA[JEE]]></category>
  347. <category><![CDATA[Performance]]></category>
  348. <category><![CDATA[REST]]></category>
  349. <category><![CDATA[Web]]></category>
  350. <category><![CDATA[Domino]]></category>
  351. <category><![CDATA[HTTP]]></category>
  352. <category><![CDATA[OSGi]]></category>
  353. <category><![CDATA[Server]]></category>
  354.  
  355. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2376</guid>
  356. <description><![CDATA[Before you can start developing a Servlet as an OSGi Plugins, you must set up a development environment first. To do this, download Eclipse IDE (Eclipse IDE for Java EE Developers) and XPages SDK from OpenNTF (The XPages SDK is &#8230; <a href="http://hasselba.ch/blog/?p=2376">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  357. <content:encoded><![CDATA[<p>Before you can start developing a Servlet as an OSGi Plugins, you must set up a development environment first. To do this, download Eclipse IDE (<a title="Tools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn, EGit and others." href="http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neon3">Eclipse IDE for Java EE Developers</a>) and <a href="https://www.openntf.org/main.nsf/project.xsp?r=project/XPages%20SDK%20for%20Eclipse%20RCP" target="_blank" rel="noopener noreferrer">XPages SDK</a> from OpenNTF (The XPages SDK is a helper to create the JRE environment and the Target Platform). For development it is the best to have a (local) development server, because during development you might want to restart and/or modify it, and debugging is a lot easier if have control over the whole server.</p>
  358. <p>After unpacking Eclipse and the XPages SDK, you have to install it and set up the JRE and the Target Platform. Go to &#8222;Help &gt; Install New Software&#8220;. With &#8222;Add&#8230;&#8220;, you can add the UpdateSite of the XPages SDK to Eclipse:</p>
  359. <div id="attachment_2379" style="width: 321px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Install.png"><img class="size-full wp-image-2379" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Install.png" alt="" width="311" height="371" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Install.png 311w, http://hasselba.ch/blog/wp-content/uploads/2017/04/01-Install-251x300.png 251w" sizes="(max-width: 311px) 100vw, 311px" /></a><p class="wp-caption-text">Install New Software</p></div>
  360. <div id="attachment_2380" style="width: 895px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Add-UpdateSite.png"><img class="size-full wp-image-2380" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Add-UpdateSite.png" alt="" width="885" height="344" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Add-UpdateSite.png 885w, http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Add-UpdateSite-300x117.png 300w, http://hasselba.ch/blog/wp-content/uploads/2017/04/02-Add-UpdateSite-768x299.png 768w" sizes="(max-width: 885px) 100vw, 885px" /></a><p class="wp-caption-text">Add Update Site</p></div>
  361. <p>Click on &#8222;Local&#8230;&#8220;, and choose the folder &#8222;org.openntf.xsp.sdk.updatesite&#8220; from the unpacked archive. Then give it a name for identification. You can choose whatever you want.</p>
  362. <div id="attachment_2381" style="width: 490px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/03-UpdateSite.png"><img class="size-full wp-image-2381" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/03-UpdateSite.png" alt="" width="480" height="180" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/03-UpdateSite.png 480w, http://hasselba.ch/blog/wp-content/uploads/2017/04/03-UpdateSite-300x113.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></a><p class="wp-caption-text">Choose the XPages SDK UpdateSite</p></div>
  363. <p>Now, choose the plugin, click &#8222;OK&#8220;, accept the license, allow the installation from unsigned content and restart Eclipse after installation is complete.</p>
  364. <div id="attachment_2382" style="width: 894px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Install-Plugin.png"><img class="size-full wp-image-2382" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Install-Plugin.png" alt="" width="884" height="695" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Install-Plugin.png 884w, http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Install-Plugin-300x236.png 300w, http://hasselba.ch/blog/wp-content/uploads/2017/04/04-Install-Plugin-768x604.png 768w" sizes="(max-width: 884px) 100vw, 884px" /></a><p class="wp-caption-text">Install the Plugin</p></div>
  365. <p>Next step ist to configure the JRE: Go to &#8222;Window &gt; Preferences&#8220;, &#8222;XPages SDK&#8220;, and choose the pathes were your Domino Server is installed. Also choose &#8222;Automatically create JRE for Domino&#8220;:</p>
  366. <p><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/05-Preferences.png"><img class="alignnone size-full wp-image-2383" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/05-Preferences.png" alt="" width="171" height="231" /></a></p>
  367. <p><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/06-JRE-Generation.png"><img class="alignnone size-full wp-image-2384" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/06-JRE-Generation.png" alt="" width="638" height="642" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/06-JRE-Generation.png 638w, http://hasselba.ch/blog/wp-content/uploads/2017/04/06-JRE-Generation-150x150.png 150w, http://hasselba.ch/blog/wp-content/uploads/2017/04/06-JRE-Generation-298x300.png 298w" sizes="(max-width: 638px) 100vw, 638px" /></a></p>
  368. <p>Then apply it.</p>
  369. <p>If you have FP8 installed, you don&#8217;t need the next step: Change the Complier compliance level to 1.6. Again, apply the setting and allow a full rebuild of the Workspace.</p>
  370. <div id="attachment_2385" style="width: 708px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Compliance.png"><img class="size-full wp-image-2385" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Compliance.png" alt="" width="698" height="643" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Compliance.png 698w, http://hasselba.ch/blog/wp-content/uploads/2017/04/07-Compliance-300x276.png 300w" sizes="(max-width: 698px) 100vw, 698px" /></a><p class="wp-caption-text">Change the compliance level</p></div>
  371. <p>Switch the default JRE to the newly created XPages Domino JRE:</p>
  372. <p><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/08-JRE-Default.png"><img class="alignnone size-full wp-image-2386" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/08-JRE-Default.png" alt="" width="699" height="643" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/08-JRE-Default.png 699w, http://hasselba.ch/blog/wp-content/uploads/2017/04/08-JRE-Default-300x276.png 300w" sizes="(max-width: 699px) 100vw, 699px" /></a></p>
  373. <p>Now you have to add the target platform: Enter &#8222;target&#8220; in the search field, select the &#8222;Target Platform&#8220;, and click on &#8222;Add&#8220;. Choose the &#8222;Domino Install Target&#8220;, create it and choose it as active platform.</p>
  374. <div id="attachment_2388" style="width: 731px" class="wp-caption alignnone"><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/10-Target-Platform.png"><img class="size-full wp-image-2388" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/10-Target-Platform.png" alt="" width="721" height="681" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/10-Target-Platform.png 721w, http://hasselba.ch/blog/wp-content/uploads/2017/04/10-Target-Platform-300x283.png 300w" sizes="(max-width: 721px) 100vw, 721px" /></a><p class="wp-caption-text">Target Definition: &#8222;Domino Install Target&#8220;</p></div>
  375. <p><a href="http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Target-Platform.png"><img class="alignnone size-full wp-image-2387" src="http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Target-Platform.png" alt="" width="700" height="646" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Target-Platform.png 700w, http://hasselba.ch/blog/wp-content/uploads/2017/04/09-Target-Platform-300x277.png 300w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>
  376. <p>OK, that&#8217;s it. You have a working IDE and you are ready to import the starter project from GitHub.</p>
  377. ]]></content:encoded>
  378. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2376</wfw:commentRss>
  379. <slash:comments>1</slash:comments>
  380. </item>
  381. <item>
  382. <title>High Performance REST Applications (1) &#8211; Intro</title>
  383. <link>http://hasselba.ch/blog/?p=2370</link>
  384. <comments>http://hasselba.ch/blog/?p=2370#comments</comments>
  385. <pubDate>Fri, 21 Apr 2017 09:33:58 +0000</pubDate>
  386. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  387. <category><![CDATA[Java]]></category>
  388. <category><![CDATA[JEE]]></category>
  389. <category><![CDATA[Performance]]></category>
  390. <category><![CDATA[REST]]></category>
  391. <category><![CDATA[Domino]]></category>
  392. <category><![CDATA[OSGi]]></category>
  393. <category><![CDATA[Server]]></category>
  394. <category><![CDATA[Web]]></category>
  395.  
  396. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2370</guid>
  397. <description><![CDATA[This is a new serie about developing high performance REST applications on top of Domino. It will contain my presentations from SNoUG and EntwicklerCamp this year and describes all required steps to develop, build and deploy these servlets on a &#8230; <a href="http://hasselba.ch/blog/?p=2370">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  398. <content:encoded><![CDATA[<p>This is a new serie about developing high performance REST applications on top of Domino. It will contain my presentations from <a href="http://snoug.ch" target="_blank" rel="noopener noreferrer">SNoUG</a> and <a href="http://entwicklercamp.de" target="_blank" rel="noopener noreferrer">EntwicklerCamp</a> this year and describes all required steps to develop, build and deploy these servlets on a basic level.</p>
  399. <p>The code used in this serie is already available at GitHub:</p>
  400. <ul>
  401. <li><a href="https://github.com/hasselbach/domino-rest-servlet/tree/highperformance" target="_blank" rel="noopener noreferrer">https://github.com/hasselbach/domino-rest-servlet/tree/highperformance</a></li>
  402. <li><a href="https://github.com/hasselbach/ch.hasselba.concurrent" target="_blank" rel="noopener noreferrer">https://github.com/hasselbach/ch.hasselba.concurrent</a></li>
  403. </ul>
  404. <p>(The high performance part is in a branch of my example Domino REST Servlet described <a href="http://hasselba.ch/blog/?p=2307" target="_blank" rel="noopener noreferrer">earlier</a> in this blog.)</p>
  405. <p>The serie will start with setting up the development environment, explaining OSGi plugin basics and will then go over how to implement the REST API. Some details about concurrency developments and their problems will also be included. Hopefully it is easy to understand.</p>
  406. <p>Don&#8217;t hold back to ask a question in the comments or to contact me directly. I have kicked out the buggy comment plugin last month, so you should be able to post them even when I have updated my wordpress installation.</p>
  407. <p>Relax and enjoy the upcoming posts.</p>
  408. ]]></content:encoded>
  409. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2370</wfw:commentRss>
  410. <slash:comments>1</slash:comments>
  411. </item>
  412. <item>
  413. <title>Re: Domino REST performance analysis</title>
  414. <link>http://hasselba.ch/blog/?p=2364</link>
  415. <comments>http://hasselba.ch/blog/?p=2364#comments</comments>
  416. <pubDate>Thu, 16 Mar 2017 20:51:54 +0000</pubDate>
  417. <dc:creator><![CDATA[Sven Hasselbach]]></dc:creator>
  418. <category><![CDATA[REST]]></category>
  419. <category><![CDATA[Domino]]></category>
  420. <category><![CDATA[Performance]]></category>
  421. <category><![CDATA[Web]]></category>
  422.  
  423. <guid isPermaLink="false">http://hasselba.ch/blog/?p=2364</guid>
  424. <description><![CDATA[I have created a Quick-n-Dirty performance test for Csaba&#8217;s &#8222;10K record test&#8220;: Loading time 200 ms overall, 60 ms TTFB. Do you want to know how this works? Feel free to come to SNoUG next week or to Rudi&#8217;s EntwicklerCamp and &#8230; <a href="http://hasselba.ch/blog/?p=2364">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
  425. <content:encoded><![CDATA[<p>I have created a Quick-n-Dirty performance test for <a href="http://xpagexplorer.org/domino-rest-performance-analysis/" target="_blank">Csaba&#8217;s &#8222;10K record test&#8220;</a>:</p>
  426. <p><a href="http://hasselba.ch/blog/wp-content/uploads/2017/03/2017-03-16-21_36_54-Mozilla-Firefox.png"><img class="alignnone size-full wp-image-2365" src="http://hasselba.ch/blog/wp-content/uploads/2017/03/2017-03-16-21_36_54-Mozilla-Firefox.png" alt="" width="1361" height="369" srcset="http://hasselba.ch/blog/wp-content/uploads/2017/03/2017-03-16-21_36_54-Mozilla-Firefox.png 1361w, http://hasselba.ch/blog/wp-content/uploads/2017/03/2017-03-16-21_36_54-Mozilla-Firefox-300x81.png 300w, http://hasselba.ch/blog/wp-content/uploads/2017/03/2017-03-16-21_36_54-Mozilla-Firefox-768x208.png 768w, http://hasselba.ch/blog/wp-content/uploads/2017/03/2017-03-16-21_36_54-Mozilla-Firefox-1024x278.png 1024w" sizes="(max-width: 1361px) 100vw, 1361px" /></a></p>
  427. <p>Loading time 200 ms overall, 60 ms TTFB.</p>
  428. <p>Do you want to know how this works? Feel free to come to <a href="http://snoug.ch/SNOUG/webX-New.nsf/home.xsp" target="_blank">SNoUG</a> next week or to Rudi&#8217;s <a href="http://entwicklercamp.de/" target="_blank">EntwicklerCamp</a> and join my sessions about &#8222;High Performance REST Applications&#8220;.</p>
  429. ]]></content:encoded>
  430. <wfw:commentRss>http://hasselba.ch/blog/?feed=rss2&#038;p=2364</wfw:commentRss>
  431. <slash:comments>6</slash:comments>
  432. </item>
  433. </channel>
  434. </rss>
  435.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//hasselba.ch/blog/%3Ffeed%3Drss2

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda