Transcript BLUG_DOTS

The power of DOTS
Frank van der Linden, e-office
Frank van der Linden & e-office
@flinden68
http://www.domino-weblog.nl
nl.linkedin.com/in/flinden68
[email protected]
Roadmap






Introduction
Setup your environment
My first DOTS tasklet
Debug the DOTS tasklet
Deploy the DOTS tasklet
Tips and tricks
Introduction
Introduction of OSGi
 Open Services Gateway initiative
– Started in 1999
– Still improved
– module system and service platform
 OSGi bundles
– Can be installed remotely.
– No reboot required
– Lifecycle
Introduction of OSGi
9+
 OSGi and IBM Notes/Domino
–
–
–
–
–
Since 8.5.2
Extension points
Extension Library
DOTS (Domino OSGi Tasklet Service)
OpenSocial Container
8.5.3
8.5.2
Introduction of DOTS
 Domino OSGi Tasklet Service
– Easy development
– Outside in Eclipse IDE
– Tasklets can run: scheduled, manual
 Next generation agents for Domino
 OpenNTF project by IBM since April, 2011 (replaced JAVADDIN project)
 Included in IBM Domino 9 Social Edition
Introduction of DOTS
Introduction of DOTS
 DOTS Tasklets outperforms over Java Agents!
Java Agent:
DOTS tasklet:
AMGR
launches a
Thread
JVM
Initializes
Prepare Java
and JNI
interfaces
Load Agent
Bytecode
Run!
Run!
Everything is ready to run
> tell amgr run "test\XPagescrash.nsf" 'LongJobAgent'
09.11.2012 19:38:39 JVM: Java Virtual Machine initialized.
09.11.2012 19:38:39 AMgr: Start executing agent 'LongJobAgent' in 'test\XPagescrash.nsf'
09.11.2012 19:38:39 Agent Manager: Agent printing: 181349
09.11.2012 19:41:02 Agent Manager: Agent printing: 2227
09.11.2012 19:41:02 Agent Manager: Agent printing: Finished in 143 secs... 09.11.2012 19:41:02 AMgr: Agent 'LongJobAgent' in 'test\XPagescrash.nsf' completed execution
> load dots
> Listening for transport dt_socket at address: 8001
09.11.2012 19:42:40 Domino OSGi Tasklet Container started ( profile DOTS )
> 181349
> 2227
09.11.2012 19:43:22 [DOTS] (annotated) Finished in 41 secs...
Introduction of DOTS
 DOTS versus Agents
– AMGR is old and complicated
– Range
̶ Agents are database depended
̶ DOTS run server wide
– DOTS are more flexible
̶ Precise timing
Setup your environment
Setup your environment
 DOTS should be installed into a local IBM Domino server
– For IBM Domino 9 Social Edition Public Beta, you don’t need to do anything.
– For versions 8.5.2 and 8.5.3,
̶ Download DOTS package from OpenNTF
̶ You will also need some Eclipse plugins from Eclipse 3.6.2+
Setup your environment
 Create some folders inside your Domino folder
– [Domino Program Files]\osgi-dots\rcp\eclipse\plugins
– [Domino Program Files]\osgi-dots\shared\eclipse\plugins
 Copy files from Eclipse install directory
These plugins will be
copied from Eclipse
installation
[Eclipse]\plugins
Setup your environment
 The DOTS package contains the executables
– The jar files in the newly created directories
– The executables in the Domino program directory
Copy to
[Domino]\osgi-dots\shared\eclipse\plugins
Copy to
[Domino]\osgi-dots
Setup your environment
 Download Eclipse
– http://www.eclipse.org/downloads
– Eclipse >3.6.2(Eclipse IDE for Java EE Developers)
 Download projects from OpenNTF
– Domino Debug Plug-in from XPages SDK for Eclipse RCP:
http://tiny.cc/XPagesSDK
Setup the Domino Debug Plugin


Accept all next steps
Restart Eclipse
Setup the Domino Debug Plugin
 Check Prefences,if Domino Debug Plugin is installed
Setup the target platform
[Domino Program Files]\osgi-dots\rcp\eclipse
[Domino Program Files]\osgi-dots\shared\eclipse
Setup the Notes Java Api reference
My first DOTS tasklet
My First DOTS tasklet
 Create a new Plug-in Project
– File  New  Plug-in Project
My First DOTS tasklet
 Prepare the DOTS extensions
My First DOTS tasklet
 Import DOTS extensions
– Deselect «Show only extension points from the required plug-ins»
– Find & pick «com.ibm.dots.task» extension from the list
– Correct the warning in the Manifest.mf tab, then Save & Close Manifest
view.
My First DOTS tasklet
 Import Domino package
My First DOTS tasklet
 Create the Java class
My First DOTS tasklet
 Add some code.In this case a log statement, which will printed to the console.
My First DOTS tasklet
 Modify the plugin.xml
name of the class
tasklet id
My First DOTS tasklet
 Now we can run our tasklet
 DOTS will run on the Domino server.
 There are two ways to run from Eclipse IDE
– Run
– Run and debug
My First DOTS tasklet
 Create a “run configuration”
My First DOTS tasklet
 PDE Configuration file should be created, the first time
 PDE file is created in the dots workspace
My First DOTS tasklet
 Now, lets run the tasklet
Debug the DOTS Tasklet
Debug the DOTS Tasklet
 Stop DOTS task
– Tell dots quit
 Adding debug parameters to notes.ini
–
–
DOTS_DEBUGADDRESS=8001
DOTS_DEBUGSUSPEND=y
 Reload DOTS task
– Load dots
– Dots task will start only when debugger connects
Debug the DOTS Tasklet
 Server needs to know what to debug
Debug the DOTS Tasklet
 Adding breakpoint to debug the code
Deploy the DOTS tasklet
Deploy your tasklet
 DOTS plugins can be deployed as OSGi bundle
– As jar file in OSGi plugins folder
– As update site
 Disable debug parameters
– Delete PDE runtime configuration (pde.launch.ini)
– Disable suspend feature in debugging (DOTS_DEBUGSUSPEND)
Deploy the DOTS Tasklet
 Create a jar file from the plugin
̶
Right Click  Export  Deployable plug-ins and fragments...
Deploy the DOTS Tasklet
 Select the plugin and destination
 Place exported JAR file into plugins folder, then restart DOTS task
[Domino Program Files]\osgi-dots\shared\eclipse\plugins
Deploy the DOTS Tasklet
 Another deploy method, DOTS profiles
–
–
–
–
It can stored inside a Notes database
Can run in is own profile container
With his own security settings
Can started seperatly “tell profilename run abc”
Deploy the DOTS Tasklet
 Creating Profile Repository as NSF
– Create an empty Notes database, set ACL as required
– Configure DOTS to use profiles database
̶
̶
̶
̶
–
tell dots quit
set config OSGI_CONFIGURATION_DB=dotsprofiles.nsf
load dots
tell dots profileCreate dots
DOTS profile is created
– You can import an updatesite in the profile
Deploy the DOTS Tasklet
 Create a Feature project in Eclipse
Deploy the DOTS Tasklet
 Create the update site project in Eclipse
Deploy the DOTS Tasklet
 Build the update site project
Deploy the DOTS Tasklet
 Create an Update Site Database
Deploy the DOTS Tasklet
 Open OSGi profile db
– Add update site database into Sites section
 Restart DOTS task
Tips and tricks
Tips and tricks
 Some tips
– Schedule tasks
– OSGi allows you to refresh bundles without restart, here is how:
̶ Find out the «bundle-id» for the plug-in
̶ Refresh the bundle
Tips and tricks
 More tips...Annotations
– Annotations is supported in DOTS.
– Powerfull way of specify for each method, what to do
@RunOnStart
public void runOnStart( IProgressMonitor monitor ){
logMessage("Annotated onStart method");
}
@Run( id="manual")
public void runManual( String[] args, IProgressMonitor monitor ){
logMessage("Annotated run method with id=manual");
}
@RunOnStart
@RunEvery( every=60, unit=RunUnit.second )
@HungPossibleAfter( timeInMinutes=1 )
public void runEvery60seconds( IProgressMonitor monitor ){
logMessage( "Called from annotated method every 60 seconds");
}
Multiple profiles
 You may create more than one profiles.
–
–
–
–
For testing
Tasklets that you use occasionally
Tasklets with different security needs
Heavily loaded Tasklets
Life-cycle for a scheduled Tasklet

When a tasklet runs on schedule, DOTS class loader will create an instance from your tasklet class. This
instance will not be disposed until DOTS process stops.
Multiple purpose Tasklet
 Same Tasklet, different Java instances
 In multiple scheduled runs
– persistent objects, stays in memory
 In multiple manual runs
– unloaded from memory afterwards
Tips and tricks
 Logging
– Try not to use System.out.println. (No output to
log.nsf)
– Instead, use logMessage(...) and
logException(...)
 Progress Monitoring
– IProgressMonitor monitor argument passed on tasklet
methods.
– Very useful for tasklets running long time.
Vector<?> views = db.getViews();
monitor.beginTask( "List the views",
views.size() ); Init with # of steps
for ( Object view : views ){
if ( monitor.isCanceled() ){
break;

Break if canceled.
}
logMessage("\t" +
((View)view).getName() );
try {
Thread.sleep( 1000
);
} catch (InterruptedException e)
{
e.printStackTrace();
}
monitor.worked( 1 );
 One step
completed
}
Questions
Contact details
@flinden68
http://www.domino-weblog.nl
nl.linkedin.com/in/flinden68
[email protected]