camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: svn commit: r743762 - in /camel/trunk/components/camel-restlet/src: main/java/org/apache/camel/component/restlet/ test/java/org/apache/camel/component/restlet/
Date Thu, 12 Feb 2009 18:08:29 GMT
Hi

Maybe we should have had a doShutdown() callback as well, so we can do
house cleaning if eg Camel is being shut down.

Okay you are on top of that, just add a code comment in the stop that
the maps should not be cleared if eg the component is started again
and we want to be in sync with the Restlet Component


On Thu, Feb 12, 2009 at 5:38 PM, William Tam <email.wtam@gmail.com> wrote:
> Hi Claus,
>
> I think routers.clear() is not necessary because router gets removed
> from the map when RestletConsumer stops.   It gets added back when
> ResletConsumer starts.  No need to clear routers map outside of those
> routines.   And, servers.clear() is not desirable because it causes
> the "our" servers map to be out of sync with "servers" in the actual
> Restlet Component object.   (Look at
> RestletComponent.addServerIfNeccessary(), the Restlet component object
> its a server list.  If we clear our servers map, we could end up
> trying to call component.getServers().add(...) again.)
>
>> @@ -96,9 +118,20 @@
>>     @Override
>>     protected void doStop() throws Exception {
>>         component.stop();
>> +        // just clear maps, component will stop the servers and routes
>> +        servers.clear();
>> +        routers.clear();
>>         super.doStop();
>>     }
>
> I think we can put the header filter strategy in the endpoint level.
> Let me see if I can do it.
>
> Thanks,
> William
>
>
> On Thu, Feb 12, 2009 at 9:27 AM,  <davsclaus@apache.org> wrote:
>> Author: davsclaus
>> Date: Thu Feb 12 14:27:53 2009
>> New Revision: 743762
>>
>> URL: http://svn.apache.org/viewvc?rev=743762&view=rev
>> Log:
>> CAMEL-1289: a little cleanup in the restlet component. the endpoint should NOT know
about URI parameters from the component.
>>
>> Modified:
>>    camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
>>    camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
>>    camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java
>>
>> Modified: camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
>> URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java?rev=743762&r1=743761&r2=743762&view=diff
>> ==============================================================================
>> --- camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
(original)
>> +++ camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
Thu Feb 12 14:27:53 2009
>> @@ -16,6 +16,7 @@
>>  */
>>  package org.apache.camel.component.restlet;
>>
>> +import java.net.URI;
>>  import java.util.HashMap;
>>  import java.util.Map;
>>
>> @@ -24,6 +25,8 @@
>>  import org.apache.camel.impl.DefaultComponent;
>>  import org.apache.camel.spi.HeaderFilterStrategy;
>>  import org.apache.camel.util.CamelContextHelper;
>> +import org.apache.camel.util.URISupport;
>> +import org.apache.camel.util.UnsafeUriCharactersEncoder;
>>  import org.apache.commons.logging.Log;
>>  import org.apache.commons.logging.LogFactory;
>>  import org.restlet.Component;
>> @@ -42,21 +45,20 @@
>>  public class RestletComponent extends DefaultComponent implements HeaderFilterStrategyAware
{
>>     private static final Log LOG = LogFactory.getLog(RestletComponent.class);
>>
>> -    private Map<String, Server> servers = new HashMap<String, Server>();
>> -    private Map<String, MethodBasedRouter> routers = new HashMap<String,
MethodBasedRouter>();
>> -    private Component component = new Component();
>> +    private final Map<String, Server> servers = new HashMap<String, Server>();
>> +    private final Map<String, MethodBasedRouter> routers = new HashMap<String,
MethodBasedRouter>();
>> +    private final Component component = new Component();
>>     private HeaderFilterStrategy headerFilterStrategy = new RestletHeaderFilterStrategy();
>>
>>     @Override
>> -    protected Endpoint createEndpoint(String uri, String remaining,
>> -            Map parameters) throws Exception {
>> +    @SuppressWarnings("unchecked")
>> +    protected Endpoint createEndpoint(String uri, String remaining, Map parameters)
throws Exception {
>>
>>         RestletBinding restletBinding = null;
>>         // lookup binding in registry if provided
>>         String ref = getAndRemoveParameter(parameters, "restletBindingRef", String.class);
>>         if (ref != null) {
>> -            restletBinding = CamelContextHelper.mandatoryLookup(getCamelContext(),
>> -                    ref, RestletBinding.class);
>> +            restletBinding = CamelContextHelper.mandatoryLookup(getCamelContext(),
ref, RestletBinding.class);
>>         }
>>
>>         if (restletBinding == null) {
>> @@ -74,16 +76,36 @@
>>         }
>>
>>         Method method = getAndRemoveParameter(parameters, "restletMethod", Method.class);
>> -        RestletEndpoint result = new RestletEndpoint(this, remaining, parameters,
restletBinding);
>> -
>> +
>> +        // construct URI so we can use it to get the splitted information
>> +        URI u = new URI(UnsafeUriCharactersEncoder.encode(remaining));
>> +        String protocol = u.getScheme();
>> +
>> +        String uriPattern = u.getPath();
>> +        if (parameters.size() > 0) {
>> +            uriPattern = uriPattern + "?" + URISupport.createQueryString(parameters);
>> +        }
>> +
>> +        int port = 0;
>> +        String host = u.getHost();
>> +        if (u.getPort() > 0) {
>> +            port = u.getPort();
>> +        }
>> +
>> +        RestletEndpoint result = new RestletEndpoint(this, remaining, restletBinding);
>> +        result.setProtocol(protocol);
>> +        result.setUriPattern(uriPattern);
>> +        result.setHost(host);
>> +        if (port > 0) {
>> +            result.setPort(port);
>> +        }
>>         if (method != null) {
>>             result.setRestletMethod(method);
>>         }
>> -
>>         if (realm != null) {
>>             result.setRealm(realm);
>>         }
>> -
>> +
>>         return result;
>>     }
>>
>> @@ -96,9 +118,20 @@
>>     @Override
>>     protected void doStop() throws Exception {
>>         component.stop();
>> +        // just clear maps, component will stop the servers and routes
>> +        servers.clear();
>> +        routers.clear();
>>         super.doStop();
>>     }
>>
>> +    public HeaderFilterStrategy getHeaderFilterStrategy() {
>> +        return headerFilterStrategy;
>> +    }
>> +
>> +    public void setHeaderFilterStrategy(HeaderFilterStrategy strategy) {
>> +        this.headerFilterStrategy = strategy;
>> +    }
>> +
>>     public void connect(RestletConsumer consumer) throws Exception {
>>         RestletEndpoint endpoint = (RestletEndpoint)consumer.getEndpoint();
>>         addServerIfNeccessary(endpoint);
>> @@ -127,33 +160,30 @@
>>                 LOG.debug("Attached methodRouter uriPattern: " + endpoint.getUriPattern());
>>             }
>>         }
>> -
>> -        LOG.debug("Attached restlet uriPattern: " + endpoint.getUriPattern() + "
method: "
>> -                + endpoint.getRestletMethod());
>>
>> +        if (LOG.isDebugEnabled()) {
>> +            LOG.debug("Attached restlet uriPattern: " + endpoint.getUriPattern()
+ " method: " + endpoint.getRestletMethod());
>> +        }
>>     }
>>
>>     public void disconnect(RestletConsumer consumer) throws Exception {
>>         RestletEndpoint endpoint = (RestletEndpoint)consumer.getEndpoint();
>>         MethodBasedRouter router = getMethodRouter(endpoint.getUriPattern());
>>         router.removeRoute(endpoint.getRestletMethod());
>> -        LOG.debug("Detached restlet uriPattern: " + endpoint.getUriPattern() + "
method: "
>> -                + endpoint.getRestletMethod());
>> -    }
>> -
>> -    public HeaderFilterStrategy getHeaderFilterStrategy() {
>> -        return headerFilterStrategy;
>> -    }
>>
>> -    public void setHeaderFilterStrategy(HeaderFilterStrategy strategy) {
>> -        this.headerFilterStrategy = strategy;
>> -    }
>> +        if (LOG.isDebugEnabled()) {
>> +            LOG.debug("Detached restlet uriPattern: " + endpoint.getUriPattern()
+ " method: " + endpoint.getRestletMethod());
>> +        }
>> +    }
>>
>>     private MethodBasedRouter getMethodRouter(String uriPattern) {
>>         synchronized (routers) {
>>             MethodBasedRouter result = routers.get(uriPattern);
>>             if (result == null) {
>>                 result = new MethodBasedRouter(uriPattern);
>> +                if (LOG.isDebugEnabled()) {
>> +                    LOG.debug("Added method based router: " + result);
>> +                }
>>                 routers.put(uriPattern, result);
>>             }
>>             return result;
>> @@ -162,14 +192,15 @@
>>
>>     private void addServerIfNeccessary(RestletEndpoint endpoint) throws Exception
{
>>         String key = buildKey(endpoint);
>> -        Server server = null;
>> +        Server server;
>>         synchronized (servers) {
>>             server = servers.get(key);
>>             if (server == null) {
>> -                server = component.getServers().add(Protocol.valueOf(endpoint.getProtocol()),
>> -                        endpoint.getPort());
>> +                server = component.getServers().add(Protocol.valueOf(endpoint.getProtocol()),
endpoint.getPort());
>>                 servers.put(key, server);
>> -                LOG.info("Add server: " + key);
>> +                if (LOG.isDebugEnabled()) {
>> +                    LOG.debug("Added server: " + key);
>> +                }
>>                 server.start();
>>             }
>>         }
>>
>> Modified: camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
>> URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java?rev=743762&r1=743761&r2=743762&view=diff
>> ==============================================================================
>> --- camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
(original)
>> +++ camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
Thu Feb 12 14:27:53 2009
>> @@ -14,18 +14,14 @@
>>  * See the License for the specific language governing permissions and
>>  * limitations under the License.
>>  */
>> -
>>  package org.apache.camel.component.restlet;
>>
>> -import java.net.URI;
>>  import java.util.Map;
>>
>>  import org.apache.camel.Consumer;
>>  import org.apache.camel.Processor;
>>  import org.apache.camel.Producer;
>>  import org.apache.camel.impl.DefaultEndpoint;
>> -import org.apache.camel.util.URISupport;
>> -import org.apache.camel.util.UnsafeUriCharactersEncoder;
>>  import org.restlet.data.Method;
>>
>>  /**
>> @@ -46,24 +42,10 @@
>>     private String uriPattern;
>>     private RestletBinding restletBinding;
>>     private Map<String, String> realm;
>> -
>> -    public RestletEndpoint(RestletComponent component, String remaining,
>> -            Map<String, String> parameters, RestletBinding restletBinding)
throws Exception {
>> +
>> +    public RestletEndpoint(RestletComponent component, String remaining, RestletBinding
restletBinding) throws Exception {
>>         super(remaining, component);
>>         this.restletBinding = restletBinding;
>> -
>> -        URI u = new URI(UnsafeUriCharactersEncoder.encode(remaining));
>> -        protocol = u.getScheme();
>> -
>> -        uriPattern = u.getPath();
>> -        if (parameters.size() > 0) {
>> -            uriPattern = uriPattern + "?" + URISupport.createQueryString(parameters);
>> -        }
>> -
>> -        host = u.getHost();
>> -        if (u.getPort() > 0) {
>> -            port = u.getPort();
>> -        }
>>     }
>>
>>     public boolean isSingleton() {
>> @@ -75,7 +57,7 @@
>>         // true to allow dynamic URI options to be configured and passed to external
system.
>>         return true;
>>     }
>> -
>> +
>>     public Consumer createConsumer(Processor processor) throws Exception {
>>         return new RestletConsumer(this, processor);
>>     }
>> @@ -84,82 +66,67 @@
>>         return new RestletProducer(this);
>>     }
>>
>> -    /**
>> -     * @param restletConsumer
>> -     */
>>     public void connect(RestletConsumer restletConsumer) throws Exception {
>>         ((RestletComponent)getComponent()).connect(restletConsumer);
>>     }
>>
>> -    /**
>> -     * @param restletConsumer
>> -     */
>>     public void disconnect(RestletConsumer restletConsumer) throws Exception {
>>         ((RestletComponent)getComponent()).disconnect(restletConsumer);
>>     }
>>
>> -    /**
>> -     * @return the protocol
>> -     */
>> +    public Method getRestletMethod() {
>> +        return restletMethod;
>> +    }
>> +
>> +    public void setRestletMethod(Method restletMethod) {
>> +        this.restletMethod = restletMethod;
>> +    }
>> +
>>     public String getProtocol() {
>>         return protocol;
>>     }
>>
>> -    /**
>> -     * @return the host
>> -     */
>> +    public void setProtocol(String protocol) {
>> +        this.protocol = protocol;
>> +    }
>> +
>>     public String getHost() {
>>         return host;
>>     }
>>
>> -    /**
>> -     * @return the port
>> -     */
>> +    public void setHost(String host) {
>> +        this.host = host;
>> +    }
>> +
>>     public int getPort() {
>>         return port;
>>     }
>> -
>> -    /**
>> -     * @return the uriPattern
>> -     */
>> +
>> +    public void setPort(int port) {
>> +        this.port = port;
>> +    }
>> +
>>     public String getUriPattern() {
>>         return uriPattern;
>>     }
>>
>> -    /**
>> -     * @return the restletBinding
>> -     */
>> +    public void setUriPattern(String uriPattern) {
>> +        this.uriPattern = uriPattern;
>> +    }
>> +
>>     public RestletBinding getRestletBinding() {
>>         return restletBinding;
>>     }
>>
>> -    /**
>> -     * @param restletMethod the restletMethod to set
>> -     */
>> -    public void setRestletMethod(Method restletMethod) {
>> -        this.restletMethod = restletMethod;
>> +    public void setRestletBinding(RestletBinding restletBinding) {
>> +        this.restletBinding = restletBinding;
>>     }
>>
>> -    /**
>> -     * @return the restletMethod
>> -     */
>> -    public Method getRestletMethod() {
>> -        return restletMethod;
>> +    public Map<String, String> getRealm() {
>> +        return realm;
>>     }
>>
>> -    /**
>> -     * @param realm
>> -     */
>>     public void setRealm(Map<String, String> realm) {
>>         this.realm = realm;
>>     }
>> -
>> -    /**
>> -     * @return the realm
>> -     */
>> -    public Map<String, String> getRealm() {
>> -        return realm;
>> -    }
>> -
>> -
>>  }
>>
>> Modified: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java
>> URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java?rev=743762&r1=743761&r2=743762&view=diff
>> ==============================================================================
>> --- camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java
(original)
>> +++ camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java
Thu Feb 12 14:27:53 2009
>> @@ -31,26 +31,21 @@
>>  public class RestletQueryTest extends ContextTestSupport {
>>     private static final String QUERY_STRING = "foo=bar&test=123";
>>
>> -
>>     @Override
>>     protected RouteBuilder createRouteBuilder() {
>> -
>>         return new RouteBuilder() {
>>             @Override
>>             public void configure() throws Exception {
>>                 from("restlet:http://localhost:9080/users/{username}")
>>                     .process(new SetUserProcessor());
>> -
>>             }
>> -
>>         };
>>     }
>>
>>     class SetUserProcessor implements Processor {
>>
>>         public void process(Exchange exchange) throws Exception {
>> -            assertEquals(QUERY_STRING, exchange.getIn().getHeader(RestletConstants.QUERY_STRING,
>> -                    String.class));
>> +            assertEquals(QUERY_STRING, exchange.getIn().getHeader(RestletConstants.QUERY_STRING,
String.class));
>>         }
>>
>>     }
>>
>>
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/

Mime
View raw message