Skip to Content.
Sympa Menu

idok-commit - [idok-commit] idok commit r169 - in branches/rest: . java/ch/idok/service/server java/ch/idok/service/server/corba java/ch/idok/service/server/rest misc/eclipse

idok-commit AT lists.psi.ch

Subject: Commit emails of the iDok project

List archive

[idok-commit] idok commit r169 - in branches/rest: . java/ch/idok/service/server java/ch/idok/service/server/corba java/ch/idok/service/server/rest misc/eclipse


Chronological Thread 
  • From: "AFS account Roman Geus" <geus AT savannah.psi.ch>
  • To: idok-commit AT lists.psi.ch
  • Subject: [idok-commit] idok commit r169 - in branches/rest: . java/ch/idok/service/server java/ch/idok/service/server/corba java/ch/idok/service/server/rest misc/eclipse
  • Date: Tue, 12 Aug 2008 15:30:58 +0200
  • List-archive: <https://lists.web.psi.ch/pipermail/idok-commit/>
  • List-id: Commit emails of the iDok project <idok-commit.lists.psi.ch>

Author: geus
Date: Tue Aug 12 15:30:58 2008
New Revision: 169

Log:
Implemented possibility to run multiple servers in parallel, i.e. CorbaServer
and RestServer.

All servers now run in a separate thread. Server classes are specified as a
comma-separated list in the "ch.idok.service.servers" property.

Modified:
branches/rest/java/ch/idok/service/server/Daemon.java
branches/rest/java/ch/idok/service/server/Server.java
branches/rest/java/ch/idok/service/server/corba/CorbaServer.java
branches/rest/java/ch/idok/service/server/rest/RestServer.java
branches/rest/local-server.xml
branches/rest/misc/eclipse/iDok_server.launch

Modified: branches/rest/java/ch/idok/service/server/Daemon.java
==============================================================================
--- branches/rest/java/ch/idok/service/server/Daemon.java (original)
+++ branches/rest/java/ch/idok/service/server/Daemon.java Tue Aug 12
15:30:58 2008
@@ -102,18 +102,21 @@
"The property ch.idok.service.provider must
be set to the service provider class");
serviceProvider = (Provider)
Class.forName(property).newInstance();
serviceProvider.init(args);
- // Get the service server and hand over control to the server
- property = System.getProperty("ch.idok.service.server");
+ // Initialize and start server threads
+ property = System.getProperty("ch.idok.service.servers");
if (property == null)
DmsException
.throwIt(
ErrorType.MISSING_PROPERTY,
exceptionSource,
- "The property ch.idok.service.server is
missing",
- "The property ch.idok.service.server must be
set to the service server class");
- serviceServer = (Server) Class.forName(property).newInstance();
- serviceServer.init(args);
- serviceServer.run(serviceProvider);
+ "The property ch.idok.service.servers is
missing",
+ "The property ch.idok.service.servers must
be set to a comma-separated list of server class names");
+ for(String serverClassName: property.split(",")) {
+ serviceServer = (Server)
Class.forName(serverClassName).newInstance();
+ serviceServer.init(args, serviceProvider);
+ Thread serverThread = new Thread(serviceServer,
serverClassName);
+ serverThread.start();
+ }
} catch (DmsException ex) {
throw ex;
} catch (ClassNotFoundException ex) {

Modified: branches/rest/java/ch/idok/service/server/Server.java
==============================================================================
--- branches/rest/java/ch/idok/service/server/Server.java (original)
+++ branches/rest/java/ch/idok/service/server/Server.java Tue Aug 12
15:30:58 2008
@@ -23,25 +23,18 @@
import ch.idok.service.common.Provider;

/**
- * @brief Server operations for all dms interactive services.
+ * Interface that iDok servers implement
*/
-public interface Server {
- /**
- * @brief Run the server request dispatch loop.
- *
- * This method does not return.
- *
- * @param serviceProvider
- * The server side service provider.
- */
- void run(Provider serviceProvider) throws DmsException;
-
+public interface Server extends Runnable {
+
/**
* @brief Initialize the server.
* @param args
* Command line arguments.
+ * @param serviceProvider
+ * The server-side service provider.
* @throws DmsException
- * if initializytion fails.
+ * if initialization fails.
*/
- void init(String[] args) throws DmsException;
+ void init(String[] args, Provider serviceProvider) throws DmsException;
}

Modified: branches/rest/java/ch/idok/service/server/corba/CorbaServer.java
==============================================================================
--- branches/rest/java/ch/idok/service/server/corba/CorbaServer.java
(original)
+++ branches/rest/java/ch/idok/service/server/corba/CorbaServer.java Tue
Aug 12 15:30:58 2008
@@ -19,6 +19,9 @@

package ch.idok.service.server.corba;

+import java.util.logging.Level;
+import java.util.logging.Logger;
+
import org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE;
import org.omg.BiDirPolicy.BOTH;
import org.omg.BiDirPolicy.BidirectionalPolicyValueHelper;
@@ -32,6 +35,7 @@
import org.omg.PortableServer.LifespanPolicyValue;
import org.omg.PortableServer.POA;

+import ch.idok.common.config.Setup;
import ch.idok.common.errorhandling.DmsException;
import ch.idok.common.errorhandling.ErrorType;
import ch.idok.service.common.Provider;
@@ -64,13 +68,20 @@

/** @brief The service provider */
public Provider serviceProvider;
+
+ /**
+ * Logger for CORBA related info
+ */
+ public Logger logger;

/**
* @brief Initialize common variables.
*/
- public void init(String args[]) throws DmsException {
+ public void init(String args[], Provider serviceProvider)
+ throws DmsException {
try {
- System.out.println(System.getProperties());
+ logger = Setup.getInstance().getLogger("");
+ this.serviceProvider = serviceProvider;
orb = ORB.init(args, System.getProperties());
org.omg.CORBA.Object ref = orb
.resolve_initial_references("NameService");
@@ -113,15 +124,24 @@
}

/**
- * @brief
- * @see ch.idok.service.Server.run()
+ * Start all CORBA services and wait...
+ *
+ * @see java.lang.Runnable#run()
*/
- public void run(Provider provider) throws DmsException {
- serviceProvider = provider;
- new CorbaSearchServer().init(this);
- new CorbaCLIServer().init(this);
- new CorbaAdminServer().init(this);
- orb.run();
+ public void run() {
+ try {
+ // Initialize and run CORBA services
+ new CorbaSearchServer().init(this);
+ new CorbaCLIServer().init(this);
+ new CorbaAdminServer().init(this);
+ logger.info("CORBA server started");
+
+ // Wait for shutdown (which never occurs)
+ orb.run();
+ } catch (Throwable e) {
+ logger.log(Level.SEVERE,
+ "CORBA server terminated with a critical error", e);
+ }
}

}

Modified: branches/rest/java/ch/idok/service/server/rest/RestServer.java
==============================================================================
--- branches/rest/java/ch/idok/service/server/rest/RestServer.java
(original)
+++ branches/rest/java/ch/idok/service/server/rest/RestServer.java Tue
Aug 12 15:30:58 2008
@@ -1,5 +1,6 @@
package ch.idok.service.server.rest;

+import java.util.logging.Level;
import java.util.logging.Logger;

import org.restlet.Component;
@@ -19,19 +20,21 @@
*/
public class RestServer implements ch.idok.service.server.Server {
Component comp;
- Logger logger =
Setup.getInstance().getLogger("ch.idok.service.server.rest");
+ Logger logger = Setup.getInstance()
+ .getLogger("ch.idok.service.server.rest");

/** The service provider */
public Provider serviceProvider;

-
/**
* @see ch.idok.service.server.Server#init(java.lang.String[])
*/
- public void init(String[] args) throws DmsException {
- // no initialization necessary
+ public void init(String[] args, Provider serviceProvider)
+ throws DmsException {
+ this.serviceProvider = serviceProvider;
+ RestSearchServiceResource.init(this);
}
-
+
/**
* Returns Logger for logging REST specific information
*/
@@ -42,10 +45,7 @@
/**
* @see
ch.idok.service.server.Server#run(ch.idok.service.common.Provider)
*/
- public void run(Provider serviceProvider) throws DmsException {
- this.serviceProvider = serviceProvider;
- RestSearchServiceResource.init(this);
-
+ public void run() {
// create Component (as ever for Restlet)
comp = new Component();
Server server = comp.getServers().add(Protocol.HTTP, 8183);
@@ -56,29 +56,34 @@
// create a custom Guard that authenticates using JAAS
Guard guard = new JaasBasicAuthGuard(application.getContext(),
"JAX-RS example", "DmsNoCache");
-
+
// attach ApplicationConfig and Guard
application.attach(new IdokAppConfig());
- application.setGuard(guard);
+ application.setGuard(guard);

// attach the application to the component and start it
comp.getDefaultHost().attach("/v1", application);
try {
comp.start();
logger.info("REST server started on port " + server.getPort());
- while (true)
+ while (comp.isStarted())
try {
Thread.sleep(60000);
- } catch (InterruptedException e) {
+ } catch (InterruptedException e) {
}
- } catch (Exception e) {
- throw new DmsException(ErrorType.INTERNAL, null,
- "Could not start REST server", "", e);
+ } catch (Throwable e) {
+ logger.log(Level.SEVERE,
+ "REST server terminated with a critical error", e);
}

}

- public void stop(Provider serviceProvider) throws DmsException {
+ /**
+ * Stop the REST server
+ *
+ * @throws DmsException
+ */
+ public void stop() throws DmsException {
try {
comp.stop();
} catch (Exception e) {

Modified: branches/rest/local-server.xml
==============================================================================
--- branches/rest/local-server.xml (original)
+++ branches/rest/local-server.xml Tue Aug 12 15:30:58 2008
@@ -249,9 +249,9 @@
value="${server.index.root.dir}" />
<sysproperty key="privateKeyPassword"
value="VgxfhGau7WL1T4qlD1NE" />
- <sysproperty key="ch.idok.service.server"
+ <sysproperty key="ch.idok.service.servers"

value="ch.idok.service.server.rest.RestServer" />
- <!-- <sysproperty
key="ch.idok.service.server"
+ <!-- <sysproperty
key="ch.idok.service.servers"

value="ch.idok.service.server.corba.CorbaServer" />
-->
<sysproperty key="ch.idok.service.provider"
@@ -310,7 +310,7 @@
value="${server.index.root.dir}" />
<sysproperty key="privateKeyPassword"
value="VgxfhGau7WL1T4qlD1NE" />
- <sysproperty key="ch.idok.service.server"
+ <sysproperty key="ch.idok.service.servers"

value="ch.idok.service.server.corba.CorbaServer" />
<sysproperty key="ch.idok.service.provider"

value="ch.idok.service.server.ServerProvider" />

Modified: branches/rest/misc/eclipse/iDok_server.launch
==============================================================================
--- branches/rest/misc/eclipse/iDok_server.launch (original)
+++ branches/rest/misc/eclipse/iDok_server.launch Tue Aug 12 15:30:58
2008
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/dms-trunk/java/ch/idok/service/server/Daemon.java"/>
+<listEntry value="/idok/java/ch/idok/service/server/Daemon.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables"
value="true"/>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE"
value="ch.idok.service.server.Daemon"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR"
value="dms-trunk"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-server
-Xbootclasspath/p:lib/jacorb.jar:lib/logkit.jar:lib/avalon-framework.jar
-Djava.util.logging.config.file=/tmp/idok_server/log/logging.conf
-Dch.idok.server.projectRoot=/tmp/idok_server/projects
-Dderby.system.home=/tmp/idok_server/derby
-Dch.idok.service.admin.backup.dir=/tmp/idok_server/derby_backup
-Dch.idok.server.httpdConfDir=/tmp/idok_server/httpd/conf.d
-Dch.idok.service.server.search.lucene.indexdir=lucene-index
-Dch.idok.service.server.search.lucene.repodir=/tmp/idok_server/indices
-DprivateKeyPassword=VgxfhGau7WL1T4qlD1NE
-Dch.idok.service.server=ch.idok.service.server.rest.RestServer
-Dch.idok.service.provider=ch.idok.service.server.ServerProvider
-Dch.idok.service.client.provider=ch.idok.service.client.corba.ClientProvider
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton
-Dorg.omg.PortableInterceptor.ORBInitializerClass.bidir_init=org.jacorb.orb.giop.BiDirConnectionInitializer
-DORBInitRef.NameService=corbaloc::localhost:1050/NameService
-Dch.idok.service.common.keypass=P7GXtm6rPr5pT988N4Gm
-Dch.idok.privateKeyPassword=90fd3498jw03riqdgs4f
-Dch.idok.service.server.admin.masterAdminName=idokadmin"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="idok"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-server
-Xbootclasspath/p:lib/jacorb.jar:lib/logkit.jar:lib/avalon-framework.jar
-Djava.util.logging.config.file=/tmp/idok_server/log/logging.conf
-Dch.idok.server.projectRoot=/tmp/idok_server/projects
-Dderby.system.home=/tmp/idok_server/derby
-Dch.idok.service.admin.backup.dir=/tmp/idok_server/derby_backup
-Dch.idok.server.httpdConfDir=/tmp/idok_server/httpd/conf.d
-Dch.idok.service.server.search.lucene.indexdir=lucene-index
-Dch.idok.service.server.search.lucene.repodir=/tmp/idok_server/indices
-DprivateKeyPassword=VgxfhGau7WL1T4qlD1NE
-Dch.idok.service.servers=ch.idok.service.server.rest.RestServer,ch.idok.service.server.corba.CorbaServer
-Dch.idok.service.provider=ch.idok.service.server.ServerProvider
-Dch.idok.service.client.provider=ch.idok.service.client.corba.ClientProvider
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton
-Dorg.omg.PortableInterceptor.ORBInitializerClass.bidir_init=org.jacorb.orb.giop.BiDirConnectionInitializer
-DORBInitRef.NameService=corbaloc::localhost:1050/NameService
-Dch.idok.service.common.keypass=P7GXtm6rPr5pT988N4Gm
-Dch.idok.privateKeyPassword=90fd3498jw03riqdgs4f
-Dch.idok.service.server.admin.masterAdminName=idokadmin"/>
</launchConfiguration>



  • [idok-commit] idok commit r169 - in branches/rest: . java/ch/idok/service/server java/ch/idok/service/server/corba java/ch/idok/service/server/rest misc/eclipse, AFS account Roman Geus, 08/12/2008

Archive powered by MHonArc 2.6.19.

Top of Page