First of all, thanks a lot to Calvin Varney who has provided inputs on the JOnAS users mailing list, which helped us to write this How-to Guide.
The purpose of this document is to describe how to run JOnAS as a NT service, using the open source software jsrvany available on the SourceForge.net web site. The instructions on this site are very easy to follow.
This chapter contains the instructions dedicated to JOnAS.
The following instructions have been tested with the jsrvany
version alpha-4 and the JOnAS version 2.4.
In the following, it is supposed that the JOnAS installation directory is
c:\jonas
, and that the JOnAS ORB is RMI.
Download
jsrvany
and unzip the package to your filesystem. Let us suppose for
this example, that it is into the directory c:\jsrvany
.
Make jvm.dll
accessible from your system path.
In this example, c:\Java\jdk1.3\jre\bin\hotspot
has been added to the
system path. Note that you have to reboot in order for this to be effective.
Create a wrapper class as described at
jsrvany site.
An example of a such class is given in the
following chapter.
This example may be used as it is.
Compile this class with an updated classpath including the JOnAS jar file
(c:\jonas\lib\RMI_jonas.jar
)
and the jsrvany jar file (c:\jsrvany\lib\jsrvany.jar
).
Create a jar file containing this class and copy it in the
c:\jsrvany\lib
directory.
In this example, the name of this jar file is jonaswrp.jar
.
From the c:\jsrvany\bin
directory, run the installer
instsrv.exe
to install the JOnAS service:
instsrv -n JOnAS -c JonasWrapperForSrvNT -i c:\jsrvany\bin\jsrvany.exe -p c:\jsrvany\lib\jonaswrp.jar;c:\jsrvany\lib\jsrvany.jar;c:\jonas\config;c:\jonas\lib\RMI_jonas.jar
What you see above is one command, i.e. entered on a single line.
Do not forget to add any needed jar files (such as the JDBC driver classes if you
are using a database).
The -p
option parameter contains at least:
c:\jsrvany\lib\jonaswrp.jar
: jsrvany wrapper class for JOnAS,
c:\jsrvany\lib\jsrvany.jar
: jsrvany package,
c:\jonas\config
: configuration for JOnAS,
c:\jonas\lib\RMI_jonas.jar
: JOnAS package,
You should see a message like: JOnAS installed successfully
Run Regedt32
and edit the key
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControllSet\Services\JOnAS\Parameters\JVMOptions
by adding the two following lines:
-Djava.security.policy=c:\jonas\config\java.policy -Dinstall.root=C:\jonas
Run the JOnAS service from the Service Control Panel.
To deploy Enterprise Java Beans on the JOnAS service, you must build the
ejb-jar files as it is described in the
Deployer's Guide
and copy them in the %JONAS_ROOT%\ejbjars
directory.
Then, there are three different ways to deploy these ejb-jar files
(let's say for example app1.jar
and app2.jar
)
on the JOnAS service:
JonasAdmin
or
Jadmin
to load those beans. -Djonas.service.ejb.descriptors=app1.jar,app2.jar
to the
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControllSet\Services\JOnAS\Parameters\JVMOptions
registry entry. jonas.service.ejb.descriptors
to
app1.jar,app2.jar
in the
%JONAS_ROOT%\config\jonas.properties
file. If you need to debug, there is a jsrvany command-line executable that can
read the JOnAS service's registry entries and execute the JOnAS service in the same
way that jsrvany running as a service would, but which
displays any error messages that are normally written to stdout or stderr
(and consequently hidden when invoked as a service) on the console where it is launched.
To run jsrvany in this debug mode,
ensure first that the JOnAS service is stopped,
then from the c:\jsrvany\bin
directory, enter the following
command:
jsrvany_debug JOnAS
Error messages produced should now be visible in the console and should help you
to debug the service configuration.
import javax.naming.InitialContext; import net.sourceforge.jsrvany.ServiceControlException; import net.sourceforge.jsrvany.ServiceControlManager; import net.sourceforge.jsrvany.SimpleListener; import net.sourceforge.jsrvany.StopServiceControlEvent; import net.sourceforge.jsrvany.TerminateServiceControlEvent; import org.objectweb.jonas.server.Server; /** * jsrvany wrapper class for JOnAS * @author Calvin Varney, JOnAS team */ public class JonasWrapperForSrvNT extends SimpleListener { private static ServiceControlManager manager = null; public static void main(String[] args) { // jsrvany doesn't set the main threads class loader so do so here Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader()); // get the ServiceControlManager manager = ServiceControlManager.getInstance(); // register this class as a listener manager.addServiceControlListener(new JonasWrapperForSrvNT()); // start JOnAS try { Server.getInstance().start(); } catch (Exception e) { System.err.println("JonasWrapperForSrvNT ERROR when starting JOnAS ("+e+")"); } } public void handleServiceControlEvent(StopServiceControlEvent e) throws ServiceControlException { stopJonas(); } public void handleServiceControlEvent(TerminateServiceControlEvent e) throws ServiceControlException { stopJonas(); } public static void stopJonas() { // stop jonas from a new thread giving this method a chance to complete // before the main thread. Thread stoper = new Thread(){ public void run() { try { Server.getInstance().stop(); } catch (Exception e) { System.err.println("JonasWrapperForSrvNT ERROR when stopping JOnAS ("+e+")"); } } }; stoper.start(); } }