5. 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
6. Introduction of OSGi
OSGi and IBM Notes/Domino 9+
– Since 8.5.2
– Extension points
– Extension Library
– DOTS (Domino OSGi Tasklet Service)
– OpenSocial Container
8.5.3
8.5.2
7. 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
9. Introduction of DOTS
DOTS Tasklets outperforms over Java Agents!
AMGR Prepare Java
JVM Load Agent
Java Agent: launches a
Initializes
and JNI
Bytecode
Run!
Thread interfaces
Run!
DOTS tasklet:
Everything is ready to run
> tell amgr run "testXPagescrash.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 'testXPagescrash.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 'testXPagescrash.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...
10. 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
12. 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+
13. Setup your environment
Create some folders inside your Domino folder
– [Domino Program Files]osgi-dotsrcpeclipseplugins
– [Domino Program Files]osgi-dotssharedeclipseplugins
Copy files from Eclipse install directory
These plugins will be
copied from Eclipse
installation
[Eclipse]plugins
14. 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-dotssharedeclipseplugins
Copy to
[Domino]osgi-dots
15. 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
16. Setup the Domino Debug Plugin
Accept all next steps
Restart Eclipse
17. Setup the Domino Debug Plugin
Check Prefences,if Domino Debug Plugin is installed
18. Setup the target platform
[Domino Program Files]osgi-dotsrcpeclipse
[Domino Program Files]osgi-dotssharedeclipse
23. 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.
26. My First DOTS tasklet
Add some code.In this case a log statement, which will printed to the console.
27. My First DOTS tasklet
Modify the plugin.xml
name of the class
tasklet id
28. 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
29. My First DOTS tasklet
Create a “run configuration”
30. My First DOTS tasklet
PDE Configuration file should be created, the first time
PDE file is created in the dots workspace
37. 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)
38. Deploy the DOTS Tasklet
Create a jar file from the plugin
̶ Right Click Export Deployable plug-ins and fragments...
39. Deploy the DOTS Tasklet
Select the plugin and destination
Place exported JAR file into plugins folder, then restart DOTS task
[Domino Program Files]osgi-dotssharedeclipseplugins
40. 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”
41. 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
42. Deploy the DOTS Tasklet
Create a Feature project in Eclipse
43. Deploy the DOTS Tasklet
Create the update site project in Eclipse
48. 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
49. 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");
}
50. Multiple profiles
You may create more than one profiles.
– For testing
– Tasklets that you use occasionally
– Tasklets with different security needs
– Heavily loaded Tasklets
51. 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.
52. 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
53. 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 Vector<?> views = db.getViews();
methods. monitor.beginTask( "List the views",
views.size() ); Init with # of steps
– Very useful for tasklets running long time.
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
}