I’m a 2020 HCL Ambassador!

January 10th, 2020

I am proud to be recognized by HCL Technologies as an HCL Ambassador for 2020!

HCL Ambassador 2020

Awarded: Jan 1, 2020

VERIFY

Domino 11.0 does not support java.pol

January 2nd, 2020

When running Java and XPages on Domino it is sometimes required to loosen up the Java security restrictions by editing the jvm/lib/security/java.policy file or by adding a java.pol file with the required changes.

But on HCL Domino 11.0 it is no longer supported to use a java.pol file since the java.security file in Domino 11.0 on longer includes a reference to a java.pol file. This (unfortunate) change is related to the move from the IBM JRE to the AdoptOpenJDK JRE.

In a future release of HCL Domino this could be re-introduced if HCL adds support for it in the java.security file. I have created an idea on re-adding support for it.

Thanks to Daniele Vistalli for pointing out that you can use the option to add a modified java.policy file to the home directory of the user running the Domino instance since the java.security file still includes this option:

policy.url.2=file:${user.home}/.java.policy

On my Windows Server the Domino service runs under the local system account and the home directory of the local system account is C:\Windows\System32\config\systemprofile. So by adding a modified .java.policy file to this directory, it does indeed work (notice that the file must be called .java.policy according to policy.url.2 in java.security).

HCL Notes 11 and HCL Domino 11 have been released

January 2nd, 2020

HCL released Notes 11 and Domino 11 on December 20, 2019. This is the first HCL branded Notes & Domino release!

You can download the release on HCLs FlexNet.

You can find the documentation online:

HCL Notes & Domino 11 Beta

September 11th, 2019

The beta program for the upcoming HCL Notes 11 and HCL Domino 11 release has started!

Sign up and add your feedback in the Domino V11 beta forum.

The following is available in the beta:

  • HCL Notes and Domino v11.0.0 Release Notes English
  • HCL Notes v11.0.0 Basic Configuration Windows English
  • HCL Notes v11.0.0 Windows English
  • HCL Notes v11.0.0 Mac 64 bit English
  • HCL Notes, Domino Designer and Admin v11.0.0 Windows English
  • HCL Domino Server v11.0.0 Windows 64 bit English
  • HCL Domino Server v11.0.0 Linux 64 bit English
  • HCL Sametime v11.0.0 Multilingual

IBM Domino and IBM Notes/Domino Designer 9.0.1 FP10 has been released: major update to the platform!

January 31st, 2018

IBM Domino and IBM Notes/Domino Designer 9.0.1 Feature Pack 10 has been released today and is available for download on IBM Fix Central. This is a major update to the platform.

The most important updates for developers include:

  • Upgrade from Java 1.6 to Java 1.8 for both Domino Designer and the server
  • The Domino Designer Eclipse platform is now running version 4.6.2 (a major upgrade from Eclipse 3.4.2)
  • OSGi is upgraded

More details of changes are available at developerWorks. Details of all fixes will be available later in the usual Fix List database.

I’m a five-time IBM Champion!

December 14th, 2016

The 2017 IBM Champions for IBM Collaboration Solutions was just announced and it makes me proud to see that I continue as an IBM Champion.

Congratulations to the 123 IBM Champions!

I’m a 2016 IBM Champion!

December 1st, 2015

It has been a great year with focus on the 2 businesses that I am involved in: Sherlock Web and fmcg solutions.

I have not been involved with public speaking this year but still try to help the XPages developer community on Stack Overflow as much as I can.

It came as a pleasant surprise that I was elected as IBM Champion for 2016. I'm once again honored to be part of this amazing group of people!

I’m a 2015 IBM Champion

December 21st, 2014

I am very proud of being elected a 2015 IBM Champion for IBM Collaboration Solutions along with 95 other champions!

IBM Champions - They're experts. They're leaders.

 

I am going to the 52nd DanNotes conference

October 30th, 2014

The 52nd DanNotes conference takes place on November 19 and 20.

The conference starts off with a keynote by Kramer Reeves. After the keynote the developers can then look forward to Christian Güedemann, Nathan T. FreemanJohn Dalsgaard and others. The administrators can look forward to Mikkel Heisterberg, Ben Menesi and others.

See you there?

XPages: Optimized partial refreshes for event handlers

September 20th, 2014

Sven Hasselbach has created an optimized version of the XSP.partialRefreshPost() method. This works great to reduce the number of form fields that are included in the request for a partialRefreshPost.

But his version does not include support for running server-side actions because the the form fields included in the POST doesn't include the server-side event handler.

So I have created an optimized version of his optimized version that supports this 🙂
My versions adds a 'submitid' parameter that should point to the id of the event handler that you want to execute on the server.

XSP.partialRefreshPost(
    '#{id:somePart}',
    {
      clearForm: true,
      submitid: '#{id:submitEventHandler}'
    }
);

Here's an example of using the optimized partial refresh for an eventhandler:

<xp:button id="button1">
    <xp:eventHandler event="onclick" submit="false" id="submitEventHandler" refreshMode="partial" refreshId="somePart">
        <xp:this.action><![CDATA[#{javascript:someServerSideAction();}]]></xp:this.action>
        <xp:this.script><![CDATA[
            XSP.partialRefreshPost(
                '#{id:somePart}',
                {
                    clearForm: true,
                    submitid: '#{id:submitEventHandler}'
                }
            );
        ]]></xp:this.script>
    </xp:eventHandler>
</xp:button>

Here's the complete code snippet (available as an OpenNTF XSnippets too):

	<xp:scriptBlock id="scriptBlockPROptimized">
        <xp:this.value><![CDATA[
			XSP.addOnLoad(function(){

			    // hijack the existing partial refresh method
			    if( !XSP.__partialRefresh ){
			        XSP.__partialRefresh = XSP._partialRefresh;
			    }

			    // add the new one to the XSP object
			    XSP._partialRefresh = function x_prfh(method, form, refreshId, options){

			        // clear the form?
			        if( options.clearForm ){

			            // create a new HTML form...
			            var newForm = document.createElement( "form" );
			            newForm.setAttribute( "method", form.method );
			            newForm.setAttribute( "action", form.action );

			            // ... and loop all existing fields
			            for( var i = 0; i<form.length; i++ ){
			                var field = form[i];
			                var fieldName = field.name;
			                var includeField = false;

			                try{

			                    // check for addition fields
			                    if( options.additionalFields ){
			                        includeField = dojo.indexOf(options.additionalFields, fieldName)!=(-1)?true:false;
			                    }

			                    // only add XPages relevant fields and addtional fields
			                    if( fieldName == form.id || fieldName.substr(0,2) == '$$' || includeField ){

			                        var newField = null;
			                        if( field.options ){
			                            // special handling for fields with options
			                            for( var j=0; j<field.length; j++ ){
			                                if( field.options[j].selected ){
			                                    newField = document.createElement( "input" );
			                                    newField.setAttribute( "type", "hidden" );
			                                    newField.setAttribute( "name", fieldName );
			                                    newField.setAttribute( "value", field.options[j].value );
			                                    newForm.appendChild( newField );
			                                }
			                            }
			                        }else{
			                            // default field handling: just clone the DOM element

			                            // check for $$xspsubmitid option
							            if( options.submitid && fieldName == "$$xspsubmitid"){
							                newField = document.createElement( "input" );
							                newField.setAttribute( "type", "hidden" );
							                newField.setAttribute( "name", "$$xspsubmitid" );
							                newField.setAttribute( "value", options.submitid );
							                newForm.appendChild( newField );
							            } else {
				                            newField = field.cloneNode( true );
				                            newForm.appendChild( newField );
				                        }
			                        }
			                    }
			                }catch(e){
			                    console.log(e);
			                }
			            }

			            // call the original refresh method with the new form
			            return XSP.__partialRefresh(method, newForm, refreshId, options);
			        }

			        XSP.__partialRefresh(method, form, refreshId, options);
			    };
			});
		]]></xp:this.value>
    </xp:scriptBlock>

Keep in mind that to optimize a partial refresh you need to focus on more than just the size of the POST request. You should also look at partial execution mode (execMode="partial") in order to reduce the amount of work that the server has to do.