You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/01/09 11:51:14 UTC
svn commit: r1056911 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/test/java/org/apache/camel/
components/camel-spring/src/main/java/org/apache/camel/spring/
Author: davsclaus
Date: Sun Jan 9 10:51:14 2011
New Revision: 1056911
URL: http://svn.apache.org/viewvc?rev=1056911&view=rev
Log:
CAMEL-3339: Added Main class to camel-core. Thanks to Ben for patch.
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/Main.java
camel/trunk/camel-core/src/test/java/org/apache/camel/MainExample.java
camel/trunk/camel-core/src/test/java/org/apache/camel/MainTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/Main.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Main.java?rev=1056911&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Main.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Main.java Sun Jan 9 10:51:14 2011
@@ -0,0 +1,82 @@
+/**
+ * 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.camel;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.xml.bind.JAXBException;
+
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.MainSupport;
+import org.apache.camel.view.ModelFileGenerator;
+
+/**
+ * A command line tool for booting up a CamelContext
+ *
+ * @version $Revision: 1025866 $
+ */
+public class Main extends MainSupport {
+ protected static Main instance;
+
+ public Main() {
+ }
+
+ public static void main(String... args) throws Exception {
+ Main main = new Main();
+ instance = main;
+ main.enableHangupSupport();
+ main.run(args);
+ }
+
+ /**
+ * Returns the currently executing main
+ *
+ * @return the current running instance
+ */
+ public static Main getInstance() {
+ return instance;
+ }
+
+ // Implementation methods
+ // -------------------------------------------------------------------------
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ postProcessContext();
+ getCamelContexts().get(0).start();
+ }
+
+ protected void doStop() throws Exception {
+ super.doStop();
+ getCamelContexts().get(0).stop();
+ }
+
+ protected ProducerTemplate findOrCreateCamelTemplate() {
+ return getCamelContexts().get(0).createProducerTemplate();
+ }
+
+ protected Map<String, CamelContext> getCamelContextMap() {
+ Map<String, CamelContext> answer = new HashMap<String, CamelContext>();
+ answer.put("camel-1", new DefaultCamelContext());
+ return answer;
+ }
+
+ protected ModelFileGenerator createModelFileGenerator() throws JAXBException {
+ return null;
+ }
+}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java?rev=1056911&r1=1056910&r2=1056911&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java Sun Jan 9 10:51:14 2011
@@ -58,6 +58,28 @@ public abstract class MainSupport extend
protected final List<CamelContext> camelContexts = new ArrayList<CamelContext>();
protected ProducerTemplate camelTemplate;
+ /**
+ * A class for intercepting the hang up signal and do a graceful shutdown of the Camel.
+ */
+ private final class HangupInterceptor extends Thread {
+ Log log = LogFactory.getLog(this.getClass());
+ MainSupport mainInstance;
+
+ public HangupInterceptor(MainSupport main) {
+ mainInstance = main;
+ }
+
+ @Override
+ public void run() {
+ log.info("Received hang up - stopping the main instance.");
+ try {
+ mainInstance.stop();
+ } catch (Exception ex) {
+ log.warn(ex);
+ }
+ }
+ }
+
protected MainSupport() {
addOption(new Option("h", "help", "Displays the help screen") {
protected void doProcess(String arg, LinkedList<String> remainingArgs) {
@@ -106,7 +128,7 @@ public abstract class MainSupport extend
}
/**
- * Runs this process with the given arguments
+ * Runs this process with the given arguments, and will wait until completed, or the JVM terminates.
*/
public void run() throws Exception {
if (!completed.get()) {
@@ -125,6 +147,15 @@ public abstract class MainSupport extend
}
/**
+ * Enables the hangup support. Gracefully stops by calling stop() on a
+ * Hangup signal.
+ */
+ public void enableHangupSupport() {
+ HangupInterceptor interceptor = new HangupInterceptor(this);
+ Runtime.getRuntime().addShutdownHook(interceptor);
+ }
+
+ /**
* Callback to run custom logic after CamelContext has been started
*/
protected void afterStart() {
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/MainExample.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/MainExample.java?rev=1056911&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/MainExample.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/MainExample.java Sun Jan 9 10:51:14 2011
@@ -0,0 +1,63 @@
+/**
+ * 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.camel;
+
+import java.util.Date;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.util.Main;
+
+/**
+ * @version $Revision: 909028 $
+ */
+// START SNIPPET: e1
+public class MainExample {
+
+ private Main main;
+
+ public static void main(String[] args) throws Exception {
+ MainExample example = new MainExample();
+ example.boot();
+ }
+
+ public void boot() throws Exception {
+ // create a Main instance
+ main = new Main();
+ // enable hangup support so you can press ctrl + c to terminate the JVM
+ main.enableHangupSupport();
+ // add routes
+ main.addRouteBuilder(new MyRouteBuilder());
+
+ // run until you terminate the JVM
+ System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n");
+ main.run();
+ }
+
+ private static class MyRouteBuilder extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+ from("timer:foo?delay=2000")
+ .process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ System.out.println("Invoked timer at " + new Date());
+ }
+ });
+ }
+ }
+
+}
+// END SNIPPET: e1
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/MainTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/MainTest.java?rev=1056911&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/MainTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/MainTest.java Sun Jan 9 10:51:14 2011
@@ -0,0 +1,56 @@
+/**
+ * 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.camel;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.util.Main;
+
+/**
+ * @version $Revision: 909028 $
+ */
+public class MainTest extends TestCase {
+
+ public void testMain() throws Exception {
+ // lets make a simple route
+ Main main = new Main();
+ main.addRouteBuilder(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("mock:results");
+ }
+ });
+ main.start();
+
+ main.getCamelTemplate().sendBody("direct:start", "<message>1</message>");
+
+ List<CamelContext> contextList = main.getCamelContexts();
+ assertNotNull(contextList);
+ assertEquals("size", 1, contextList.size());
+ CamelContext camelContext = contextList.get(0);
+
+ MockEndpoint endpoint = camelContext.getEndpoint("mock:results", MockEndpoint.class);
+ endpoint.expectedMinimumMessageCount(1);
+ endpoint.assertIsSatisfied();
+
+ main.stop();
+ }
+}
Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java?rev=1056911&r1=1056910&r2=1056911&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java Sun Jan 9 10:51:14 2011
@@ -27,8 +27,6 @@ import org.apache.camel.ProducerTemplate
import org.apache.camel.impl.MainSupport;
import org.apache.camel.spring.handler.CamelNamespaceHandler;
import org.apache.camel.view.ModelFileGenerator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -66,30 +64,7 @@ public class Main extends MainSupport {
});
}
-
- /**
- * A class for intercepting the hang up signal and do a graceful shutdown of
- * the Camel.
- */
- private class HangupInterceptor extends Thread {
- Log log = LogFactory.getLog(this.getClass());
- Main mainInstance;
-
- public HangupInterceptor(Main main) {
- mainInstance = main;
- }
- @Override
- public void run() {
- log.info("Received hang up - stopping the main instance.");
- try {
- mainInstance.stop();
- } catch (Exception ex) {
- log.warn(ex);
- }
- }
- }
-
public static void main(String... args) throws Exception {
Main main = new Main();
instance = main;
@@ -106,15 +81,6 @@ public class Main extends MainSupport {
return instance;
}
- /**
- * Enables the hangup support. Gracefully stops by calling stop() on a
- * Hangup signal.
- */
- public void enableHangupSupport() {
- HangupInterceptor interceptor = new HangupInterceptor(this);
- Runtime.getRuntime().addShutdownHook(interceptor);
- }
-
// Properties
// -------------------------------------------------------------------------
public AbstractApplicationContext getApplicationContext() {