Author: davsclaus Date: Thu Feb 7 19:00:05 2013 New Revision: 1443663 URL: http://svn.apache.org/r1443663 Log: CAMEL-6032: camel-servletlistener should offer a JNDI and Simple based impl so people can choose.
Added: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/JndiCamelServletContextListener.java (with props) camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/SimpleCamelServletContextListener.java (with props) Removed: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelContextLifecycleSupport.java Modified: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelContextLifecycle.java camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelServletContextListener.java camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/ServletCamelContext.java camel/trunk/components/camel-servletlistener/src/test/java/org/apache/camel/component/servletlistener/MyLifecycle.java camel/trunk/components/camel-servletlistener/src/test/resources/myweb.xml camel/trunk/components/camel-servletlistener/src/test/resources/myweb2.xml camel/trunk/components/camel-servletlistener/src/test/resources/myweb3.xml camel/trunk/components/camel-servletlistener/src/test/resources/myweb4.xml camel/trunk/components/camel-servletlistener/src/test/resources/myweb5.xml camel/trunk/components/camel-servletlistener/src/test/resources/myweb6.xml camel/trunk/components/camel-servletlistener/src/test/resources/myweb7.xml Modified: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelContextLifecycle.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelContextLifecycle.java?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelContextLifecycle.java (original) +++ camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelContextLifecycle.java Thu Feb 7 19:00:05 2013 @@ -16,48 +16,48 @@ */ package org.apache.camel.component.servletlistener; -import org.apache.camel.util.jndi.JndiContext; +import org.apache.camel.spi.Registry; /** * A callback lifecycle allows end users to implement custom logic before * the {@link ServletCamelContext} is started and stopped. */ -public interface CamelContextLifecycle { +public interface CamelContextLifecycle<R extends Registry> { /** * Callback before starting {@link ServletCamelContext}. * * @param camelContext the Camel context - * @param jndi the JNDI context. + * @param registry the registry * @throws Exception is thrown if any error. */ - void beforeStart(ServletCamelContext camelContext, JndiContext jndi) throws Exception; + void beforeStart(ServletCamelContext camelContext, R registry) throws Exception; /** * Callback after {@link ServletCamelContext} has been started. * * @param camelContext the Camel context - * @param jndi the JNDI context. + * @param registry the registry * @throws Exception is thrown if any error. */ - void afterStart(ServletCamelContext camelContext, JndiContext jndi) throws Exception; + void afterStart(ServletCamelContext camelContext, R registry) throws Exception; /** * Callback before stopping {@link ServletCamelContext}. * * @param camelContext the Camel context - * @param jndi the JNDI context. + * @param registry the registry * @throws Exception is thrown if any error. */ - void beforeStop(ServletCamelContext camelContext, JndiContext jndi) throws Exception; + void beforeStop(ServletCamelContext camelContext, R registry) throws Exception; /** * Callback after {@link ServletCamelContext} has been stopped. * * @param camelContext the Camel context - * @param jndi the JNDI context. + * @param registry the registry * @throws Exception is thrown if any error. */ - void afterStop(ServletCamelContext camelContext, JndiContext jndi) throws Exception; + void afterStop(ServletCamelContext camelContext, R registry) throws Exception; } Modified: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelServletContextListener.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelServletContextListener.java?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelServletContextListener.java (original) +++ camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/CamelServletContextListener.java Thu Feb 7 19:00:05 2013 @@ -26,7 +26,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.naming.NamingException; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; @@ -42,6 +41,7 @@ import org.apache.camel.management.Manag import org.apache.camel.model.RouteDefinition; import org.apache.camel.model.RoutesDefinition; import org.apache.camel.spi.ManagementStrategy; +import org.apache.camel.spi.Registry; import org.apache.camel.util.CamelContextHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.IntrospectionSupport; @@ -55,27 +55,28 @@ import org.slf4j.LoggerFactory; * A {@link ServletContextListener} which is used to bootstrap * {@link org.apache.camel.CamelContext} in web applications. */ -public class CamelServletContextListener implements ServletContextListener { +public abstract class CamelServletContextListener implements ServletContextListener { /** * instance is used for testing purpose */ public static ServletCamelContext instance; - private static final Logger LOG = LoggerFactory.getLogger(CamelServletContextListener.class); - private JndiContext jndiContext; - private ServletCamelContext camelContext; - private CamelContextLifecycle camelContextLifecycle; - private boolean test; + protected static final Logger LOG = LoggerFactory.getLogger(CamelServletContextListener.class); + protected ServletCamelContext camelContext; + protected CamelContextLifecycle camelContextLifecycle; + protected boolean test; + protected Registry registry; @Override + @SuppressWarnings("unchecked") public void contextInitialized(ServletContextEvent sce) { LOG.info("CamelContextServletListener initializing ..."); // create jndi and camel context try { - jndiContext = new JndiContext(); - camelContext = new ServletCamelContext(jndiContext, sce.getServletContext()); + registry = createRegistry(); + camelContext = new ServletCamelContext(registry, sce.getServletContext()); } catch (Exception e) { throw new RuntimeException("Error creating CamelContext.", e); } @@ -155,11 +156,11 @@ public class CamelServletContextListener try { if (camelContextLifecycle != null) { - camelContextLifecycle.beforeStart(camelContext, jndiContext); + camelContextLifecycle.beforeStart(camelContext, registry); } camelContext.start(); if (camelContextLifecycle != null) { - camelContextLifecycle.afterStart(camelContext, jndiContext); + camelContextLifecycle.afterStart(camelContext, registry); } } catch (Exception e) { LOG.error("Error starting CamelContext.", e); @@ -174,28 +175,34 @@ public class CamelServletContextListener } @Override + @SuppressWarnings("unchecked") public void contextDestroyed(ServletContextEvent sce) { LOG.info("CamelContextServletListener destroying ..."); if (camelContext != null) { try { if (camelContextLifecycle != null) { - camelContextLifecycle.beforeStop(camelContext, jndiContext); + camelContextLifecycle.beforeStop(camelContext, registry); } camelContext.stop(); if (camelContextLifecycle != null) { - camelContextLifecycle.afterStop(camelContext, jndiContext); + camelContextLifecycle.afterStop(camelContext, registry); } } catch (Exception e) { LOG.warn("Error stopping CamelContext. This exception will be ignored.", e); } } camelContext = null; - jndiContext = null; + registry = null; instance = null; LOG.info("CamelContextServletListener destroyed"); } /** + * Create the {@link Registry} implementation to use. + */ + public abstract Registry createRegistry() throws Exception; + + /** * Extracts all the init parameters, and will do reference lookup in {@link JndiContext} * if the value starts with a # sign. */ @@ -212,7 +219,7 @@ public class CamelServletContextListener if (value.startsWith("#")) { // a reference lookup in jndi value = value.substring(1); - target = lookupJndi(jndiContext, value); + target = lookupRegistry(registry, value); } map.put(name, target); } @@ -347,7 +354,7 @@ public class CamelServletContextListener /** * Extract the routes from the parameters. * - * @param map parameters + * @param map parameters * @return a list of routes, which can be of different types. See source code for more details. */ private List<Object> extractRoutes(Map<String, Object> map) { @@ -370,7 +377,7 @@ public class CamelServletContextListener if (value.startsWith("#")) { // a reference lookup in jndi value = value.substring(1); - target = lookupJndi(jndiContext, value); + target = lookupRegistry(registry, value); } else if (ResourceHelper.hasScheme(value)) { // XML resource from classpath or file system InputStream is = null; @@ -423,12 +430,8 @@ public class CamelServletContextListener return answer; } - private static Object lookupJndi(JndiContext jndiContext, String name) { - try { - return jndiContext.lookup(name); - } catch (NamingException e) { - throw new RuntimeException("Error looking up in jndi with name: " + name, e); - } + private static Object lookupRegistry(Registry registry, String name) { + return registry.lookupByName(name); } } Added: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/JndiCamelServletContextListener.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/JndiCamelServletContextListener.java?rev=1443663&view=auto ============================================================================== --- camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/JndiCamelServletContextListener.java (added) +++ camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/JndiCamelServletContextListener.java Thu Feb 7 19:00:05 2013 @@ -0,0 +1,42 @@ +/** + * 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.component.servletlistener; + +import javax.naming.Context; +import javax.naming.InitialContext; + +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.spi.Registry; + +/** + * An implementation of {@link CamelServletContextListener} that uses the {@link org.apache.camel.impl.JndiRegistry} + * as its {@link Registry}. + */ +public class JndiCamelServletContextListener extends CamelServletContextListener { + + private Context jndiContext; + + @Override + public Registry createRegistry() throws Exception { + jndiContext = new InitialContext(); + return new JndiRegistry(jndiContext); + } + + public Context getJndiContext() { + return jndiContext; + } +} Propchange: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/JndiCamelServletContextListener.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/JndiCamelServletContextListener.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/ServletCamelContext.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/ServletCamelContext.java?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/ServletCamelContext.java (original) +++ camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/ServletCamelContext.java Thu Feb 7 19:00:05 2013 @@ -16,29 +16,23 @@ */ package org.apache.camel.component.servletlistener; -import javax.naming.Context; import javax.servlet.ServletContext; import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.spi.Registry; /** * A servlet based {@link org.apache.camel.CamelContext}. */ public class ServletCamelContext extends DefaultCamelContext { - private final Context jndiContext; private final ServletContext servletContext; - public ServletCamelContext(Context jndiContext, ServletContext servletContext) { - super(jndiContext); - this.jndiContext = jndiContext; + public ServletCamelContext(Registry registry, ServletContext servletContext) { + super(registry); this.servletContext = servletContext; } - public Context getJndiContext() { - return jndiContext; - } - public ServletContext getServletContext() { return servletContext; } Added: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/SimpleCamelServletContextListener.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/SimpleCamelServletContextListener.java?rev=1443663&view=auto ============================================================================== --- camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/SimpleCamelServletContextListener.java (added) +++ camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/SimpleCamelServletContextListener.java Thu Feb 7 19:00:05 2013 @@ -0,0 +1,44 @@ +/** + * 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.component.servletlistener; + +import java.util.Map; + +import org.apache.camel.impl.SimpleRegistry; +import org.apache.camel.spi.Registry; + +/** + * An implementation of {@link CamelServletContextListener} that uses the {@link SimpleRegistry} + * as its {@link Registry}. + */ +public class SimpleCamelServletContextListener extends CamelServletContextListener { + + private Map map; + + @Override + public Registry createRegistry() throws Exception { + map = new SimpleRegistry(); + return (Registry) map; + } + + /** + * Gets the {@link Map} that contains the data for the {@link SimpleRegistry} + */ + public Map getMap() { + return map; + } +} Propchange: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/SimpleCamelServletContextListener.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-servletlistener/src/main/java/org/apache/camel/component/servletlistener/SimpleCamelServletContextListener.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: camel/trunk/components/camel-servletlistener/src/test/java/org/apache/camel/component/servletlistener/MyLifecycle.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/java/org/apache/camel/component/servletlistener/MyLifecycle.java?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/java/org/apache/camel/component/servletlistener/MyLifecycle.java (original) +++ camel/trunk/components/camel-servletlistener/src/test/java/org/apache/camel/component/servletlistener/MyLifecycle.java Thu Feb 7 19:00:05 2013 @@ -16,6 +16,7 @@ */ package org.apache.camel.component.servletlistener; +import org.apache.camel.impl.SimpleRegistry; import org.apache.camel.util.jndi.JndiContext; // START SNIPPET: e1 @@ -25,18 +26,28 @@ import org.apache.camel.util.jndi.JndiCo * <p/> * We can of course also do other kind of custom logic as well. */ -public class MyLifecycle extends CamelContextLifecycleSupport { +public class MyLifecycle implements CamelContextLifecycle<SimpleRegistry> { @Override - public void beforeStart(ServletCamelContext camelContext, JndiContext jndi) throws Exception { + public void beforeStart(ServletCamelContext camelContext, SimpleRegistry registry) throws Exception { // enlist our bean(s) in the registry - jndi.bind("myBean", new HelloBean()); + registry.put("myBean", new HelloBean()); } @Override - public void afterStop(ServletCamelContext camelContext, JndiContext jndi) throws Exception { + public void afterStart(ServletCamelContext camelContext, SimpleRegistry registry) throws Exception { + // noop + } + + @Override + public void beforeStop(ServletCamelContext camelContext, SimpleRegistry registry) throws Exception { + // noop + } + + @Override + public void afterStop(ServletCamelContext camelContext, SimpleRegistry registry) throws Exception { // unbind our bean when Camel has been stopped - jndi.unbind("myBean"); + registry.remove("myBean"); } } // END SNIPPET: e1 Modified: camel/trunk/components/camel-servletlistener/src/test/resources/myweb.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/resources/myweb.xml?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/resources/myweb.xml (original) +++ camel/trunk/components/camel-servletlistener/src/test/resources/myweb.xml Thu Feb 7 19:00:05 2013 @@ -47,7 +47,7 @@ <!-- register Camel as a listener so we can bootstrap Camel when the web application starts --> <listener> - <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class> + <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class> </listener> </web-app> Modified: camel/trunk/components/camel-servletlistener/src/test/resources/myweb2.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/resources/myweb2.xml?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/resources/myweb2.xml (original) +++ camel/trunk/components/camel-servletlistener/src/test/resources/myweb2.xml Thu Feb 7 19:00:05 2013 @@ -47,7 +47,7 @@ <!-- register Camel as a listener so we can bootstrap Camel when the web application starts --> <listener> - <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class> + <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class> </listener> </web-app> Modified: camel/trunk/components/camel-servletlistener/src/test/resources/myweb3.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/resources/myweb3.xml?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/resources/myweb3.xml (original) +++ camel/trunk/components/camel-servletlistener/src/test/resources/myweb3.xml Thu Feb 7 19:00:05 2013 @@ -47,7 +47,7 @@ <!-- register Camel as a listener so we can bootstrap Camel when the web application starts --> <listener> - <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class> + <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class> </listener> </web-app> Modified: camel/trunk/components/camel-servletlistener/src/test/resources/myweb4.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/resources/myweb4.xml?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/resources/myweb4.xml (original) +++ camel/trunk/components/camel-servletlistener/src/test/resources/myweb4.xml Thu Feb 7 19:00:05 2013 @@ -50,7 +50,7 @@ <!-- register Camel as a listener so we can bootstrap Camel when the web application starts --> <listener> - <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class> + <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class> </listener> </web-app> Modified: camel/trunk/components/camel-servletlistener/src/test/resources/myweb5.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/resources/myweb5.xml?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/resources/myweb5.xml (original) +++ camel/trunk/components/camel-servletlistener/src/test/resources/myweb5.xml Thu Feb 7 19:00:05 2013 @@ -51,7 +51,7 @@ <!-- register Camel as a listener so we can bootstrap Camel when the web application starts --> <listener> - <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class> + <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class> </listener> </web-app> Modified: camel/trunk/components/camel-servletlistener/src/test/resources/myweb6.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/resources/myweb6.xml?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/resources/myweb6.xml (original) +++ camel/trunk/components/camel-servletlistener/src/test/resources/myweb6.xml Thu Feb 7 19:00:05 2013 @@ -58,7 +58,7 @@ <!-- register Camel as a listener so we can bootstrap Camel when the web application starts --> <listener> - <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class> + <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class> </listener> </web-app> Modified: camel/trunk/components/camel-servletlistener/src/test/resources/myweb7.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servletlistener/src/test/resources/myweb7.xml?rev=1443663&r1=1443662&r2=1443663&view=diff ============================================================================== --- camel/trunk/components/camel-servletlistener/src/test/resources/myweb7.xml (original) +++ camel/trunk/components/camel-servletlistener/src/test/resources/myweb7.xml Thu Feb 7 19:00:05 2013 @@ -53,7 +53,7 @@ <!-- register Camel as a listener so we can bootstrap Camel when the web application starts --> <listener> - <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class> + <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class> </listener> </web-app>