Author: jsdelfino
Date: Sun Mar 30 23:23:14 2008
New Revision: 642894
URL: http://svn.apache.org/viewvc?rev=642894&view=rev
Log:
Partial fix for TUSCANY-2166. Changed Eclipse Tuscany library to only include
the API and launcher JARs. Changes to the launcher to adjust to that and allow
test programs for example to get an SCA node instance from the launcher.
Added:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java
(with props)
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemonLauncher.java
(contents, props changed)
- copied, changed from r640314,
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemon.java
Removed:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemon.java
Modified:
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationDaemonBootstrap.java
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationLauncherBootstrap.java
incubator/tuscany/java/sca/modules/node2-api/src/main/java/org/apache/tuscany/sca/node/SCANode2Factory.java
incubator/tuscany/java/sca/modules/node2-launcher/pom.xml
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainManagerLauncher.java
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncher.java
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeMain.java
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java
incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/CalculatorDistributedTestCase.java
incubator/tuscany/java/sca/tools/eclipse/plugins/core/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java
Modified:
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationDaemonBootstrap.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationDaemonBootstrap.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationDaemonBootstrap.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationDaemonBootstrap.java
Sun Mar 30 23:23:14 2008
@@ -20,28 +20,62 @@
package org.apache.tuscany.sca.implementation.node.launcher;
import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.node.Node2Exception;
+import org.apache.tuscany.sca.node.SCANode2;
/**
- * Bootstrap class for standalone SCA nodes, used by NodeImplementationLauncher
- * to launch SCA nodes.
+ * Bootstrap class for the SCA node daemon.
*
* @version $Rev$ $Date$
*/
public class NodeImplementationDaemonBootstrap {
+ private SCANode2 node;
- private SCADomain daemon;
+ /**
+ * A node wrappering an instance of a node daemon.
+ */
+ public static class NodeFacade implements SCANode2 {
+ private ClassLoader runtimeClassLoader;
+ private SCADomain daemon;
+
+ private NodeFacade() {
+ runtimeClassLoader =
Thread.currentThread().getContextClassLoader();
+ }
+
+ public void start() throws Node2Exception {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ daemon = SCADomain.newInstance("NodeDaemon.composite");
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+
+ public void stop() throws Node2Exception {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ daemon.close();
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+ }
/**
- * Constructs a new node bootstrap.
+ * Constructs a new daemon bootstrap.
*/
public NodeImplementationDaemonBootstrap() throws Exception {
- }
-
- public void start() throws Exception {
- daemon = SCADomain.newInstance("NodeDaemon.composite");
+ node = new NodeFacade();
}
- public void stop() throws Exception {
- daemon.close();
+ /**
+ * Returns the node representing the daemon.
+ * @return
+ */
+ public SCANode2 getNode() {
+ return node;
}
+
}
Modified:
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationLauncherBootstrap.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationLauncherBootstrap.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationLauncherBootstrap.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-node-runtime/src/main/java/org/apache/tuscany/sca/implementation/node/launcher/NodeImplementationLauncherBootstrap.java
Sun Mar 30 23:23:14 2008
@@ -19,32 +19,101 @@
package org.apache.tuscany.sca.implementation.node.launcher;
+import org.apache.tuscany.sca.node.Node2Exception;
+import org.apache.tuscany.sca.node.SCAClient;
import org.apache.tuscany.sca.node.SCANode2;
import org.apache.tuscany.sca.node.SCANode2Factory;
+import org.apache.tuscany.sca.node.SCANode2Factory.SCAContribution;
+import org.osoa.sca.CallableReference;
+import org.osoa.sca.ServiceReference;
/**
- * Bootstrap class for standalone SCA nodes, used by NodeImplementationLauncher
- * to launch SCA nodes.
+ * Bootstrap class for standalone SCA nodes.
*
* @version $Rev$ $Date$
*/
public class NodeImplementationLauncherBootstrap {
private SCANode2 node;
+
+ /**
+ * A node facade.
+ */
+ public static class NodeFacade implements SCANode2, SCAClient {
+ private ClassLoader runtimeClassLoader;
+ private SCANode2 delegate;
+
+ private NodeFacade(SCANode2 delegate) {
+ runtimeClassLoader =
Thread.currentThread().getContextClassLoader();
+ this.delegate = delegate;
+ }
+
+ public void start() throws Node2Exception {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ delegate.start();
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+
+ public void stop() throws Node2Exception {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ delegate.stop();
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+
+ public <B, R extends CallableReference<B>> R cast(B target) throws
IllegalArgumentException {
+ return (R)((SCAClient)delegate).cast(target);
+ }
+
+ public <B> B getService(Class<B> businessInterface, String
serviceName) {
+ return (B)((SCAClient)delegate).getService(businessInterface,
serviceName);
+ }
+
+ public <B> ServiceReference<B> getServiceReference(Class<B>
businessInterface, String referenceName) {
+ return
(ServiceReference<B>)((SCAClient)delegate).getServiceReference(businessInterface,
referenceName);
+ }
+ }
/**
- * Constructs a new node bootstrap.
+ * Bootstrap a new SCA node.
+ *
+ * @param configurationURI
*/
- public NodeImplementationLauncherBootstrap(String nodeImageURI) throws
Exception {
+ public NodeImplementationLauncherBootstrap(String configurationURI) throws
Exception {
SCANode2Factory nodeFactory = SCANode2Factory.newInstance();
- node = nodeFactory.createSCANode(nodeImageURI);
+ node = new NodeFacade(nodeFactory.createSCANode(configurationURI));
}
- public void start() throws Exception {
- node.start();
+ /**
+ * Bootstrap a new SCA node.
+ *
+ * @param compositeURI
+ * @param uris
+ * @param locations
+ */
+ public NodeImplementationLauncherBootstrap(String compositeURI, String[]
uris, String[] locations) throws Exception {
+ SCANode2Factory nodeFactory = SCANode2Factory.newInstance();
+ SCAContribution[] contributions = new SCAContribution[uris.length];
+ for (int i = 0; i < uris.length; i++) {
+ contributions[i] = new SCAContribution(uris[i], locations[i]);
+ }
+ node = new NodeFacade(nodeFactory.createSCANode(compositeURI,
contributions));
}
-
- public void stop() throws Exception {
- node.stop();
+
+ /**
+ * Returns the SCA node.
+ *
+ * @return
+ */
+ public SCANode2 getNode() {
+ return node;
}
+
}
Modified:
incubator/tuscany/java/sca/modules/node2-api/src/main/java/org/apache/tuscany/sca/node/SCANode2Factory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-api/src/main/java/org/apache/tuscany/sca/node/SCANode2Factory.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/node2-api/src/main/java/org/apache/tuscany/sca/node/SCANode2Factory.java
(original)
+++
incubator/tuscany/java/sca/modules/node2-api/src/main/java/org/apache/tuscany/sca/node/SCANode2Factory.java
Sun Mar 30 23:23:14 2008
@@ -85,7 +85,7 @@
/**
* Represents an SCA contribution uri + location.
*/
- public final class SCAContribution {
+ public final static class SCAContribution {
private String uri;
private String location;
Modified: incubator/tuscany/java/sca/modules/node2-launcher/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/pom.xml?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node2-launcher/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/node2-launcher/pom.xml Sun Mar 30
23:23:14 2008
@@ -32,19 +32,11 @@
<dependencies>
<dependency>
- <groupId>org.apache.tuscany.sca</groupId>
- <artifactId>tuscany-sca-api</artifactId>
- <version>2.0-incubating-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version> <!-- to keep compatible with older servlet
containers -->
<scope>provided</scope>
</dependency>
-
</dependencies>
<build>
Modified:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainManagerLauncher.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainManagerLauncher.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainManagerLauncher.java
(original)
+++
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/DomainManagerLauncher.java
Sun Mar 30 23:23:14 2008
@@ -19,12 +19,14 @@
package org.apache.tuscany.sca.node.launcher;
+import static
org.apache.tuscany.sca.node.launcher.NodeLauncherUtil.domainManager;
+
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
- * Simple launcher for the SCA domain administration application.
+ * Simple launcher for the SCA domain manager.
*
* @version $Rev$ $Date$
*/
@@ -32,51 +34,58 @@
private final static Logger logger =
Logger.getLogger(DomainManagerLauncher.class.getName());
+ /**
+ * Constructs a new DomainManagerLauncher.
+ */
+ private DomainManagerLauncher() {
+ }
+
+ /**
+ * Returns a new launcher instance.
+ *
+ * @return a new launcher instance
+ */
+ public static DomainManagerLauncher newInstance() {
+ return new DomainManagerLauncher();
+ }
+
+ /**
+ * Creates a new DomainManager.
+ *
+ * @return a new DomainManager
+ * @throws LauncherException
+ */
+ public <T> T createDomainManager() throws LauncherException {
+ return (T)domainManager();
+ }
+
public static void main(String[] args) throws Exception {
logger.info("Apache Tuscany SCA Domain Manager starting...");
- Class<?> adminClass;
- Object admin;
+ // Create a domain manager
+ DomainManagerLauncher launcher = newInstance();
+ Object domainManager = launcher.createDomainManager();
+
+ // Start the domain manager
try {
- // Set up runtime ClassLoader
- ClassLoader runtimeClassLoader =
NodeLauncherUtil.runtimeClassLoader(Thread.currentThread().getContextClassLoader());
- if (runtimeClassLoader != null) {
-
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
- }
-
- // Create the daemon
-
- // We use Java reflection here as only the runtime class
- // loader knows the runtime classes required by the manager
- String className =
"org.apache.tuscany.sca.workspace.admin.launcher.DomainManagerLauncherBootstrap";
- if (runtimeClassLoader != null) {
- adminClass = Class.forName(className, true,
runtimeClassLoader);
- } else {
- adminClass = Class.forName(className);
- }
- admin = adminClass.getConstructor().newInstance();
-
- // Start the daemon
- adminClass.getMethod("start").invoke(admin);
-
+ domainManager.getClass().getMethod("start").invoke(domainManager);
} catch (Exception e) {
logger.log(Level.SEVERE, "SCA Domain Manager could not be
started", e);
throw e;
}
-
logger.info("SCA Domain Manager started.");
+
logger.info("Press enter to shutdown.");
try {
System.in.read();
} catch (IOException e) {}
- // Stop the daemon
+ // Stop the domain manager
try {
- adminClass.getMethod("stop").invoke(admin);
+ domainManager.getClass().getMethod("stop").invoke(domainManager);
} catch (Exception e) {
logger.log(Level.SEVERE, "SCA Domain Manager could not be
stopped", e);
throw e;
}
}
-
}
Added:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java?rev=642894&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java
(added)
+++
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java
Sun Mar 30 23:23:14 2008
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.node.launcher;
+
+
+/**
+ * Denotes an error launching an SCA domain manager or node.
+ *
+ * @version $Rev$ $Date$
+ */
+public class LauncherException extends Exception {
+ private static final long serialVersionUID = 4581189418849190567L;
+
+ public LauncherException() {
+ super();
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public LauncherException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * @param message
+ */
+ public LauncherException(String message) {
+ super(message);
+ }
+
+ /**
+ * @param cause
+ */
+ public LauncherException(Throwable cause) {
+ super(cause);
+ }
+}
Propchange:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/LauncherException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemonLauncher.java
(from r640314,
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemon.java)
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemonLauncher.java?p2=incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemonLauncher.java&p1=incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemon.java&r1=640314&r2=642894&rev=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemon.java
(original)
+++
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemonLauncher.java
Sun Mar 30 23:23:14 2008
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.node.launcher;
+import static org.apache.tuscany.sca.node.launcher.NodeLauncherUtil.nodeDaemon;
+
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -28,55 +30,64 @@
*
* @version $Rev$ $Date$
*/
-public class NodeDaemon {
+public class NodeDaemonLauncher {
+
+ private final static Logger logger =
Logger.getLogger(NodeDaemonLauncher.class.getName());
+
+ /**
+ * Constructs a new node daemon launcher.
+ */
+ private NodeDaemonLauncher() {
+ }
+
+ /**
+ * Returns a new launcher instance.
+ *
+ * @return a new launcher instance
+ */
+ public static NodeDaemonLauncher newInstance() {
+ return new NodeDaemonLauncher();
+ }
- private final static Logger logger =
Logger.getLogger(NodeDaemon.class.getName());
+ /**
+ * Creates a new node daemon.
+ *
+ * @param
+ * @return a new node daemon
+ * @throws LauncherException
+ */
+ public <T> T createNodeDaemon() throws LauncherException {
+ return (T)nodeDaemon();
+ }
public static void main(String[] args) throws Exception {
logger.info("Apache Tuscany SCA Node Daemon starting...");
- Class<?> daemonClass;
- Object daemon;
+ // Create a node daemon
+ NodeDaemonLauncher launcher = newInstance();
+ Object daemon = launcher.createNodeDaemon();
+
+ // Start the node daemon
try {
- // Set up runtime ClassLoader
- ClassLoader runtimeClassLoader =
NodeLauncherUtil.runtimeClassLoader(Thread.currentThread().getContextClassLoader());
- if (runtimeClassLoader != null) {
-
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
- }
-
- // Create the daemon
-
- // We use Java reflection here as only the runtime class
- // loader knows the runtime classes required by the daemon
- String className =
"org.apache.tuscany.sca.implementation.node.launcher.NodeImplementationDaemonBootstrap";
- if (runtimeClassLoader != null) {
- daemonClass = Class.forName(className, true,
runtimeClassLoader);
- } else {
- daemonClass = Class.forName(className);
- }
- daemon = daemonClass.getConstructor().newInstance();
-
- // Start the daemon
- daemonClass.getMethod("start").invoke(daemon);
-
+ daemon.getClass().getMethod("start").invoke(daemon);
} catch (Exception e) {
logger.log(Level.SEVERE, "SCA Node Daemon could not be started",
e);
throw e;
}
-
logger.info("SCA Node Daemon started.");
+
logger.info("Press enter to shutdown.");
try {
System.in.read();
} catch (IOException e) {}
- // Stop the daemon
+ // Stop the node daemon
try {
- daemonClass.getMethod("stop").invoke(daemon);
+ daemon.getClass().getMethod("stop").invoke(daemon);
} catch (Exception e) {
logger.log(Level.SEVERE, "SCA Node Daemon could not be stopped",
e);
throw e;
}
}
-
+
}
Propchange:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemonLauncher.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeDaemonLauncher.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncher.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncher.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncher.java
(original)
+++
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncher.java
Sun Mar 30 23:23:14 2008
@@ -19,55 +19,104 @@
package org.apache.tuscany.sca.node.launcher;
+import static org.apache.tuscany.sca.node.launcher.NodeLauncherUtil.node;
+
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
- * A launcher for standalone SCA nodes.
+ * A launcher for SCA nodes.
*
* @version $Rev$ $Date$
*/
public class NodeLauncher {
- private final static Logger logger =
Logger.getLogger(NodeLauncher.class.getName());
+ final static Logger logger =
Logger.getLogger(NodeLauncher.class.getName());
+ /**
+ * Constructs a new node launcher.
+ */
+ private NodeLauncher() {
+ }
+
+ /**
+ * Returns a new launcher instance.
+ *
+ * @return a new launcher instance
+ */
+ public static NodeLauncher newInstance() {
+ return new NodeLauncher();
+ }
+
+ /**
+ * Creates a new node.
+ *
+ * @param configurationURI
+ * @return a new node
+ * @throws LauncherException
+ */
+ public <T> T createNode(String configurationURI) throws LauncherException {
+ return (T)node(configurationURI, null, null);
+ }
+
+ /**
+ * Represents an SCA contribution uri + location.
+ */
+ public final static class Contribution {
+ private String uri;
+ private String location;
+
+ /**
+ * Constructs a new SCA contribution.
+ *
+ * @param uri
+ * @param location
+ */
+ public Contribution(String uri, String location) {
+ this.uri = uri;
+ this.location = location;
+ }
+
+ public String getURI() {
+ return uri;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+ }
+
+ /**
+ * Creates a new Node.
+ *
+ * @param compositeURI
+ * @param contributions
+ * @return a new node
+ * @throws LauncherException
+ */
+ public <T> T createNode(String compositeURI, Contribution...contributions)
throws LauncherException {
+ return (T)node(null, compositeURI, contributions);
+ }
+
public static void main(String[] args) throws Exception {
logger.info("Apache Tuscany SCA Node starting...");
- Class<?> nodeClass;
- Object node;
+ // Create a node
+ NodeLauncher launcher = newInstance();
+ String configurationURI = args[0];
+ logger.info("SCA Node configuration: " + configurationURI);
+ Object node = launcher.createNode(configurationURI);
+
+ // Start the node
try {
- String configurationURI = args[0];
- logger.info("SCA Node configuration: " + configurationURI);
-
- // Set up runtime ClassLoader
- ClassLoader runtimeClassLoader =
NodeLauncherUtil.runtimeClassLoader(Thread.currentThread().getContextClassLoader());
- if (runtimeClassLoader != null) {
-
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
- }
-
- // Create the node
-
- // We use Java reflection here as only the runtime class
- // loader knows the runtime classes required by the node
- String className =
"org.apache.tuscany.sca.implementation.node.launcher.NodeImplementationLauncherBootstrap";
- if (runtimeClassLoader != null) {
- nodeClass = Class.forName(className, true, runtimeClassLoader);
- } else {
- nodeClass = Class.forName(className);
- }
- node =
nodeClass.getConstructor(String.class).newInstance(configurationURI);
-
- // Start the node
- nodeClass.getMethod("start").invoke(node);
-
+ node.getClass().getMethod("start").invoke(node);
} catch (Exception e) {
logger.log(Level.SEVERE, "SCA Node could not be started", e);
throw e;
}
-
logger.info("SCA Node started.");
+
logger.info("Press enter to shutdown.");
try {
System.in.read();
@@ -75,7 +124,7 @@
// Stop the node
try {
- nodeClass.getMethod("stop").invoke(node);
+ node.getClass().getMethod("stop").invoke(node);
} catch (Exception e) {
logger.log(Level.SEVERE, "SCA Node could not be stopped", e);
throw e;
Modified:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java
(original)
+++
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java
Sun Mar 30 23:23:14 2008
@@ -22,6 +22,7 @@
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
+import java.lang.reflect.Constructor;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -29,6 +30,7 @@
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
+import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -36,7 +38,7 @@
*
* @version $Rev$ $Date$
*/
-public final class NodeLauncherUtil {
+final class NodeLauncherUtil {
private final static Logger logger =
Logger.getLogger(NodeLauncherUtil.class.getName());
@@ -199,6 +201,134 @@
if (count != 0) {
logger.info("Runtime classpath: "+ count + " JAR" + (count >
1? "s":"")+ " from " + directory.toString());
}
+ }
+ }
+
+ /**
+ * Creates a new node.
+ *
+ * @param compositeURI
+ * @param contributions
+ * @throws LauncherException
+ */
+ static Object node(String configurationURI, String compositeURI,
NodeLauncher.Contribution[] contributions) throws LauncherException {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+ // Set up runtime ClassLoader
+ ClassLoader runtimeClassLoader =
runtimeClassLoader(Thread.currentThread().getContextClassLoader());
+ if (runtimeClassLoader != null) {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ }
+
+ // Use Java reflection to create the node as only the runtime class
+ // loader knows the runtime classes required by the node
+ String className =
"org.apache.tuscany.sca.implementation.node.launcher.NodeImplementationLauncherBootstrap";
+ Class<?> bootstrapClass;
+ if (runtimeClassLoader != null) {
+ bootstrapClass = Class.forName(className, true,
runtimeClassLoader);
+ } else {
+ bootstrapClass = Class.forName(className);
+ }
+ Object bootstrap;
+ if (configurationURI != null) {
+
+ // Construct the node with a configuration URI
+ bootstrap =
bootstrapClass.getConstructor(String.class).newInstance(configurationURI);
+
+ } else {
+
+ // Construct the node with a composite URI and the URIs and
+ // locations of a list of contributions
+ Constructor<?> constructor =
bootstrapClass.getConstructor(String.class, String[].class, String[].class);
+ String[] uris = new String[contributions.length];
+ String[] locations = new String[contributions.length];
+ for (int i = 0; i < contributions.length; i++) {
+ uris[i] = contributions[i].getURI();
+ locations[i] = contributions[i].getLocation();
+ }
+ bootstrap = constructor.newInstance(compositeURI, uris,
locations);
+ }
+
+ Object node =
bootstrapClass.getMethod("getNode").invoke(bootstrap);
+ return node;
+
+ } catch (Exception e) {
+ NodeLauncher.logger.log(Level.SEVERE, "SCA Node could not be
created", e);
+ throw new LauncherException(e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+
+ /**
+ * Creates a new node daemon.
+ *
+ * @throws LauncherException
+ */
+ static Object nodeDaemon() throws LauncherException {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+ // Set up runtime ClassLoader
+ ClassLoader runtimeClassLoader =
runtimeClassLoader(Thread.currentThread().getContextClassLoader());
+ if (runtimeClassLoader != null) {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ }
+
+ // Use Java reflection to create the node daemon as only the
runtime class
+ // loader knows the runtime classes required by the node
+ String className =
"org.apache.tuscany.sca.implementation.node.launcher.NodeImplementationDaemonBootstrap";
+ Class<?> bootstrapClass;
+ if (runtimeClassLoader != null) {
+ bootstrapClass = Class.forName(className, true,
runtimeClassLoader);
+ } else {
+ bootstrapClass = Class.forName(className);
+ }
+ Object bootstrap = bootstrapClass.getConstructor().newInstance();
+
+ Object nodeDaemon =
bootstrapClass.getMethod("getNode").invoke(bootstrap);
+ return nodeDaemon;
+
+ } catch (Exception e) {
+ NodeLauncher.logger.log(Level.SEVERE, "SCA Node Daemon could not
be created", e);
+ throw new LauncherException(e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+
+ /**
+ * Creates a new domain manager.
+ *
+ * @throws LauncherException
+ */
+ static Object domainManager() throws LauncherException {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+ // Set up runtime ClassLoader
+ ClassLoader runtimeClassLoader =
runtimeClassLoader(Thread.currentThread().getContextClassLoader());
+ if (runtimeClassLoader != null) {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ }
+
+ // Use Java reflection to create the node daemon as only the
runtime class
+ // loader knows the runtime classes required by the node
+ String className =
"org.apache.tuscany.sca.workspace.admin.launcher.DomainManagerLauncherBootstrap";
+ Class<?> bootstrapClass;
+ if (runtimeClassLoader != null) {
+ bootstrapClass = Class.forName(className, true,
runtimeClassLoader);
+ } else {
+ bootstrapClass = Class.forName(className);
+ }
+ Object bootstrap = bootstrapClass.getConstructor().newInstance();
+
+ Object domainManager =
bootstrapClass.getMethod("getNode").invoke(bootstrap);
+ return domainManager;
+
+ } catch (Exception e) {
+ NodeLauncher.logger.log(Level.SEVERE, "SCA Domain Manager could
not be created", e);
+ throw new LauncherException(e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
}
}
Modified:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeMain.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeMain.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeMain.java
(original)
+++
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeMain.java
Sun Mar 30 23:23:14 2008
@@ -38,7 +38,7 @@
NodeLauncher.main(args);
}
} else {
- NodeDaemon.main(args);
+ NodeDaemonLauncher.main(args);
}
}
}
Modified:
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java
(original)
+++
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java
Sun Mar 30 23:23:14 2008
@@ -20,27 +20,62 @@
package org.apache.tuscany.sca.workspace.admin.launcher;
import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.node.Node2Exception;
+import org.apache.tuscany.sca.node.SCANode2;
/**
- * Bootstrap class for the SCA domain admin app, used by DomainAdminLauncher.
+ * Bootstrap class for the SCA domain manager.
*
* @version $Rev$ $Date$
*/
public class DomainManagerLauncherBootstrap {
+ private SCANode2 node;
- private SCADomain admin;
+ /**
+ * A node wrappering an instance of a domain manager.
+ */
+ public static class NodeFacade implements SCANode2 {
+ private ClassLoader runtimeClassLoader;
+ private SCADomain domainManager;
+
+ private NodeFacade() {
+ runtimeClassLoader =
Thread.currentThread().getContextClassLoader();
+ }
+
+ public void start() throws Node2Exception {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ domainManager =
SCADomain.newInstance("DomainManager.composite");
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+
+ public void stop() throws Node2Exception {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+
Thread.currentThread().setContextClassLoader(runtimeClassLoader);
+ domainManager.close();
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+ }
/**
- * Constructs a new admin bootstrap.
+ * Constructs a new domain manager bootstrap.
*/
public DomainManagerLauncherBootstrap() throws Exception {
+ node = new NodeFacade();
}
- public void start() throws Exception {
- admin = SCADomain.newInstance("DomainManager.composite");
- }
-
- public void stop() throws Exception {
- admin.close();
+ /**
+ * Returns the node representing the domain manager.
+ * @return
+ */
+ public SCANode2 getNode() {
+ return node;
}
+
}
Modified:
incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/CalculatorDistributedTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/CalculatorDistributedTestCase.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/CalculatorDistributedTestCase.java
(original)
+++
incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/CalculatorDistributedTestCase.java
Sun Mar 30 23:23:14 2008
@@ -21,11 +21,10 @@
import junit.framework.Assert;
-import org.apache.tuscany.sca.host.embedded.SCADomain;
-import
org.apache.tuscany.sca.implementation.node.launcher.NodeProcessCollectionImpl;
import org.apache.tuscany.sca.node.SCAClient;
import org.apache.tuscany.sca.node.SCANode2;
import org.apache.tuscany.sca.node.SCANode2Factory;
+import org.apache.tuscany.sca.node.launcher.DomainManagerLauncher;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -35,10 +34,11 @@
* implementation of the distributed domain
*/
public class CalculatorDistributedTestCase {
-
- private static SCANode2 nodeA;
- private static SCANode2 nodeB;
- private static SCANode2 nodeC;
+
+ private static SCANode2 manager;
+ private static SCANode2 nodeA;
+ private static SCANode2 nodeB;
+ private static SCANode2 nodeC;
private static CalculatorService calculatorService;
@@ -48,8 +48,10 @@
try {
System.out.println("Setting up domain");
-
- SCADomain.newInstance("DomainManager.composite");
+
+ DomainManagerLauncher managerLauncher =
DomainManagerLauncher.newInstance();
+ manager = managerLauncher.createDomainManager();
+ manager.start();
SCANode2Factory nodeFactory = SCANode2Factory.newInstance();
nodeC =
nodeFactory.createSCANode("http://localhost:9990/node-image/NodeC");
@@ -64,7 +66,6 @@
calculatorService =
client.getService(CalculatorService.class,
"CalculatorServiceComponentA");
-
} catch(Exception ex){
System.err.println(ex.toString());
}
@@ -76,6 +77,7 @@
nodeC.stop();
nodeB.stop();
nodeA.stop();
+ manager.stop();
}
@Test
Modified:
incubator/tuscany/java/sca/tools/eclipse/plugins/core/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tools/eclipse/plugins/core/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java?rev=642894&r1=642893&r2=642894&view=diff
==============================================================================
---
incubator/tuscany/java/sca/tools/eclipse/plugins/core/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java
(original)
+++
incubator/tuscany/java/sca/tools/eclipse/plugins/core/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java
Sun Mar 30 23:23:14 2008
@@ -103,35 +103,40 @@
// Add the JARs from runtime/lib and runtime/modules as classpath
entries
if (runtimePath != null) {
- for (String directory: new String[]{"modules", "lib"}) {
- File parent = runtimePath.append(directory).toFile();
- if (parent != null && parent.exists()) {
- for (File file : parent.listFiles()) {
- IPath path = new Path(file.getPath());
- String extension = path.getFileExtension();
- if (!"jar".equals(extension)) {
- continue;
- }
+
+ // Add the JARs from runtime/lib
+ File libDirectory = runtimePath.append("lib").toFile();
+ if (libDirectory != null && libDirectory.exists()) {
+ for (File file : libDirectory.listFiles()) {
+ IPath path = new Path(file.getPath());
+ String extension = path.getFileExtension();
+ if (!"jar".equals(extension)) {
+ continue;
+ }
+ list.add(JavaCore.newLibraryEntry(path, sourcePath, null));
+ }
+ }
- // Exclude tuscany-sca-all and tuscany-sca-manifest as
they duplicate
- // code in the individual runtime module JARs
- String name = path.lastSegment();
- if (name.startsWith("tuscany-sca-all")) {
- continue;
- }
- if (name.startsWith("tuscany-sca-manifest")) {
- continue;
- }
-
- // Filter out the Jetty and Webapp hosts
- if (name.startsWith("tuscany-host-jetty") ||
- name.startsWith("tuscany-host-webapp")) {
- //FIXME This is temporary
- continue;
- }
-
- list.add(JavaCore.newLibraryEntry(path, sourcePath,
null));
+ // Add the jars from runtime/modules
+ File modulesDirectory = runtimePath.append("modules").toFile();
+ if (modulesDirectory != null && modulesDirectory.exists()) {
+ for (File file : modulesDirectory.listFiles()) {
+ IPath path = new Path(file.getPath());
+ String name = path.lastSegment();
+ String extension = path.getFileExtension();
+
+ // Only include API and launcher JARs
+ if (!"jar".equals(extension)) {
+ continue;
+ }
+ if (name.indexOf("-api-") == -1 &&
name.indexOf("-launcher-") == -1) {
+ continue;
}
+ if (name.startsWith("tuscany-node-api-")) {
+ continue;
+ }
+
+ list.add(JavaCore.newLibraryEntry(path, sourcePath, null));
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]