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]