summaryrefslogtreecommitdiffstats
path: root/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2011-01-25 23:30:28 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2011-01-25 23:30:28 +0000
commit875e50908c2630d263661af492654cd44bef2d65 (patch)
tree30cc749cb9d25fd84b67fa086394735601782409 /sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src
parent1456632c03944d54a5f059fe54e49b3014bc7fea (diff)
Sandbox to experiment with dynamic mass virtual hosting and running a different composite per vhost.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1063520 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src')
-rw-r--r--sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.java76
-rw-r--r--sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java46
-rw-r--r--sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory21
-rw-r--r--sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java70
-rw-r--r--sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java64
-rw-r--r--sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java71
-rw-r--r--sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite29
7 files changed, 377 insertions, 0 deletions
diff --git a/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.java b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.java
new file mode 100644
index 0000000000..91d4607831
--- /dev/null
+++ b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.java
@@ -0,0 +1,76 @@
+/*
+ * 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.implementation.jaxrs.provider;
+
+import org.apache.tuscany.sca.host.http.ServletHost;
+import org.apache.tuscany.sca.implementation.jaxrs.JAXRSImplementation;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+
+/**
+ *
+ */
+public class JAXRSImplementationProvider implements ImplementationProvider {
+ private JAXRSImplementation implementation;
+ private ServletHost host;
+
+ /**
+ * @param host
+ */
+ public JAXRSImplementationProvider(JAXRSImplementation implementation, ServletHost host) {
+ super();
+ this.implementation = implementation;
+ this.host = host;
+ }
+
+ public Invoker createInvoker(RuntimeComponentService service, Operation operation) {
+ return null;
+ }
+
+ public boolean supportsOneWayInvocation() {
+ return false;
+ }
+
+ public void start() {
+ /*
+ RestServlet restServlet = new RestServlet();
+ host.addServletMapping("/*", restServlet);
+ Application application;
+ try {
+ application = (Application)implementation.getApplicationClass().newInstance();
+ } catch (Exception e) {
+ throw new ServiceRuntimeException(e);
+ }
+ RegistrationUtils.registerApplication(application, restServlet.getServletContext());
+ */
+ }
+
+ public void stop() {
+ /*
+ Servlet servlet = host.removeServletMapping("/*");
+ if (servlet != null) {
+ servlet.destroy();
+ }
+ */
+ }
+
+}
diff --git a/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java
new file mode 100644
index 0000000000..2f638240f6
--- /dev/null
+++ b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java
@@ -0,0 +1,46 @@
+/*
+ * 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.implementation.jaxrs.provider;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.host.http.ServletHost;
+import org.apache.tuscany.sca.host.http.ServletHostHelper;
+import org.apache.tuscany.sca.implementation.jaxrs.JAXRSImplementation;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.provider.ImplementationProviderFactory;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+
+public class JAXRSImplementationProviderFactory implements ImplementationProviderFactory<JAXRSImplementation> {
+
+ private ServletHost servletHost;
+
+ public JAXRSImplementationProviderFactory(ExtensionPointRegistry extensionPoints) {
+ this.servletHost = ServletHostHelper.getServletHost(extensionPoints);
+ }
+
+ public ImplementationProvider createImplementationProvider(RuntimeComponent component,
+ JAXRSImplementation implementation) {
+ return new JAXRSImplementationProvider(implementation, servletHost);
+ }
+
+ public Class<JAXRSImplementation> getModelType() {
+ return JAXRSImplementation.class;
+ }
+
+}
diff --git a/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory
new file mode 100644
index 0000000000..d945bdd048
--- /dev/null
+++ b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory
@@ -0,0 +1,21 @@
+# 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.
+
+# Implementation class for the implementation extension
+org.apache.tuscany.sca.implementation.jaxrs.provider.JAXRSImplementationProviderFactory;model=org.apache.tuscany.sca.implementation.jaxrs.JAXRSImplementation
+
+
diff --git a/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java
new file mode 100644
index 0000000000..3a493ea10e
--- /dev/null
+++ b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * 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 helloworld.jaxrs;
+
+import java.util.Date;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.common.model.synd.SyndEntry;
+import org.apache.wink.common.model.synd.SyndText;
+
+/**
+ * Simple example - Hello World!
+ * <p/>
+ * The SDK dispatches HTTP requests for URI
+ * <code>http://[host]:[port]/HelloWorld/rest/world</code>, where
+ * <code>HelloWorld</code> is the context root, to this class. A simple Atom
+ * entry is returned in HTTP response.
+ * <p/>
+ * The service document is available at URI
+ * <code>http://[host]:[port]/HelloWorld/rest</code> but it is empty because
+ * this simple demo doesn't contain any collection of resources.
+ * <p/>
+ * This resource must be registered within a JAX-RS application, this example
+ * uses the default usage of application /WEB-INF/application
+ */
+@Path("/world")
+public class HelloWorld {
+ public static final String ID = "helloworld:1";
+
+ /**
+ * This method is called by the SDK for HTTP GET method requests where the
+ * Accept header allows the Atom media type application/atom+xml. A
+ * SyndEntry is created with basic information. Serialization of the
+ * SyndEntry to Atom entry is performed by the SDK automatically. The
+ * default status code of 200 (OK) is returned in the response.
+ *
+ * @return SyndEntry of the requested resource
+ */
+ @GET
+ @Produces(MediaType.APPLICATION_ATOM_XML)
+ public SyndEntry getGreeting() {
+ // create and return a syndication entry with a "Hello World!" title,
+ // some ID and the current time.
+ SyndEntry synd = new SyndEntry(new SyndText("Hello World!"), ID, new Date());
+ return synd;
+ }
+
+}
diff --git a/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java
new file mode 100644
index 0000000000..97ff1cb13e
--- /dev/null
+++ b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java
@@ -0,0 +1,64 @@
+/*
+ * 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 helloworld.jaxrs;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.ws.rs.core.Application;
+
+public class HelloWorldApp extends Application {
+
+ /*
+ * A singletons is used to serve multiple requests.
+ * It keeps domain-model objects in memory between requests.
+ */
+ private Set<Object> instances = new HashSet<Object>();
+
+ /*
+ * Per-request service classes are instantiated for each
+ * request, and disposed of after the request is processed.
+ */
+ private Set<Class<?>> classes = new HashSet<Class<?>>();
+
+ /**
+ * Create the singleton service implementation
+ */
+ public HelloWorldApp() {
+ instances.add(new HelloWorld());
+ // classes.add(HelloWorld.class);
+ }
+
+ /**
+ * Methods used to discover the JAX-RS service objects
+ */
+
+ // Set of singleton service objects
+ @Override
+ public Set<Object> getSingletons() {
+ return instances;
+ }
+
+ // Set of per-request service classes
+ @Override
+ public Set<Class<?>> getClasses() {
+ return classes;
+ }
+
+}
diff --git a/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java
new file mode 100644
index 0000000000..34edff56ca
--- /dev/null
+++ b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java
@@ -0,0 +1,71 @@
+/*
+ * 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 helloworld.jaxrs.test;
+
+import java.io.File;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.apache.wink.client.ClientResponse;
+import org.apache.wink.client.RestClient;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class HelloWorldTestCase {
+ private static Node node;
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ node =
+ NodeFactory.getInstance().createNode("helloworld/jaxrs/HelloWorld.composite",
+ new Contribution("c1", new File("target/test-classes").toURI()
+ .toString())).start();
+ }
+
+ @Test
+ public void testDummy() {
+ RestClient client = new RestClient();
+ ClientResponse response = client.resource("http://localhost:8080/world").get();
+ String out = response.getEntity(String.class);
+ System.out.println(out);
+ Assert.assertEquals(200, response.getStatusCode());
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ if (node != null) {
+ node.stop();
+ }
+ }
+
+}
diff --git a/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite
new file mode 100644
index 0000000000..db7329ca3e
--- /dev/null
+++ b/sandbox/sebastien/java/vhost/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
+ targetNamespace="http://sample/jaxrs"
+ name="HelloWorld">
+
+ <component name="HelloWorldApp">
+ <tuscany:implementation.jaxrs application="helloworld.jaxrs.HelloWorldApp"/>
+ </component>
+
+</composite>