Author: jmarino
Date: Fri Sep 8 00:20:10 2006
New Revision: 441406
URL: http://svn.apache.org/viewvc?view=rev&rev=441406
Log:
add a remote test binding; get Spring composite to expose beans through remote
services
Added:
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInterceptor.java
(with props)
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponentTestCase.java
(with props)
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingRuntimeException.java
(with props)
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBinding.java
(with props)
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingBuilder.java
(with props)
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingLoader.java
(with props)
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingReference.java
(with props)
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingService.java
(with props)
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketInvoker.java
(with props)
incubator/tuscany/java/sca/test/src/test/java/org/
incubator/tuscany/java/sca/test/src/test/java/org/apache/
incubator/tuscany/java/sca/test/src/test/java/org/apache/tuscany/
incubator/tuscany/java/sca/test/src/test/java/org/apache/tuscany/test/
incubator/tuscany/java/sca/test/src/test/java/org/apache/tuscany/test/binding/
Modified:
incubator/tuscany/java/sca/containers/container.spring/pom.xml
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInvoker.java
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java
incubator/tuscany/java/sca/test/pom.xml
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingService.java
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java
incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/test.binding.system.scdl
Modified: incubator/tuscany/java/sca/containers/container.spring/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/pom.xml?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/pom.xml (original)
+++ incubator/tuscany/java/sca/containers/container.spring/pom.xml Fri Sep 8
00:20:10 2006
@@ -60,7 +60,9 @@
</dependency>
<dependency>
<groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
+ <artifactId>easymockclassextension</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
</dependency>
</dependencies>
Modified:
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
---
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java
(original)
+++
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java
Fri Sep 8 00:20:10 2006
@@ -67,6 +67,8 @@
InboundWire<?> wire = service.getInboundWire();
QualifiedName targetName = new
QualifiedName(serviceDefinition.getTarget().getPath());
for (InboundInvocationChain chain :
wire.getInvocationChains().values()) {
+ // FIXME this should go to the connector and get policy and be
invoked from SpringComposite.prepare()
+ chain.addInterceptor(new SpringInterceptor());
chain.setTargetInvoker(component.createTargetInvoker(targetName.getPartName(),
chain.getOperation()));
}
component.register(service);
Modified:
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
---
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java
(original)
+++
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java
Fri Sep 8 00:20:10 2006
@@ -104,6 +104,9 @@
public void start() {
super.start();
+ for (SCAObject child : children.values()) {
+ child.start();
+ }
springContext.start();
}
Added:
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInterceptor.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInterceptor.java
(added)
+++
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInterceptor.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,35 @@
+package org.apache.tuscany.container.spring.impl;
+
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+/**
+ * A temporary interceptor until the connector is updated
+ *
+ * @version $Rev$ $Date$
+ */
+public class SpringInterceptor implements Interceptor {
+
+ public Message invoke(Message msg) throws InvocationRuntimeException {
+ TargetInvoker invoker = msg.getTargetInvoker();
+ if (invoker == null) {
+ throw new InvocationRuntimeException("No target invoker specified
on message");
+ }
+ return invoker.invoke(msg);
+ }
+
+ public void setNext(Interceptor next) {
+ throw new IllegalStateException("This interceptor must be the last one
in an target interceptor chain");
+ }
+
+ public Interceptor getNext() {
+ return null;
+ }
+
+ public boolean isOptimizable() {
+ return true;
+ }
+
+}
Propchange:
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInterceptor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInvoker.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInvoker.java?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
---
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInvoker.java
(original)
+++
incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringInvoker.java
Fri Sep 8 00:20:10 2006
@@ -59,7 +59,11 @@
}
}
try {
- return method.invoke(bean, (Object[]) object);
+ if (object != null && !object.getClass().isArray()) {
+ return method.invoke(bean, object);
+ } else {
+ return method.invoke(bean, (Object[]) object);
+ }
} catch (IllegalAccessException e) {
throw new InvocationTargetException(e);
}
Added:
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponentTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponentTestCase.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponentTestCase.java
(added)
+++
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponentTestCase.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,42 @@
+package org.apache.tuscany.container.spring.impl;
+
+import org.apache.tuscany.spi.component.Service;
+
+import junit.framework.TestCase;
+import static org.easymock.classextension.EasyMock.replay;
+import static org.easymock.classextension.EasyMock.verify;
+import org.easymock.classextension.EasyMock;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SpringCompositeComponentTestCase extends TestCase {
+
+ public void testAppContextStart() {
+ AbstractApplicationContext appContext =
EasyMock.createMock(AbstractApplicationContext.class);
+ appContext.refresh();
+ appContext.setParent(EasyMock.isA(ApplicationContext.class));
+ appContext.start();
+ replay(appContext);
+ SpringCompositeComponent<?> component = new
SpringCompositeComponent("spring", appContext, null, null, null);
+ component.start();
+ verify(appContext);
+ }
+
+ public void testChildStart() {
+ AbstractApplicationContext appContext =
EasyMock.createNiceMock(AbstractApplicationContext.class);
+ replay(appContext);
+ Service service = EasyMock.createMock(Service.class);
+ EasyMock.expect(service.getName()).andReturn("foo").anyTimes();
+ service.start();
+ replay(service);
+ SpringCompositeComponent<?> component = new
SpringCompositeComponent("spring", appContext, null, null, null);
+ component.register(service);
+ component.start();
+ verify(service);
+ }
+
+
+}
Propchange:
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponentTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponentTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
---
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java
(original)
+++
incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java
Fri Sep 8 00:20:10 2006
@@ -26,7 +26,6 @@
private TestBean bean;
public TestBeanImpl() {
- System.out.println("");
}
public String echo(String msg) {
Modified: incubator/tuscany/java/sca/test/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/pom.xml?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
--- incubator/tuscany/java/sca/test/pom.xml (original)
+++ incubator/tuscany/java/sca/test/pom.xml Fri Sep 8 00:20:10 2006
@@ -41,11 +41,11 @@
<version>3.8.1</version>
<scope>compile</scope>
</dependency>
- <dependency>
- <groupId>jmock</groupId>
- <artifactId>jmock</artifactId>
- <version>1.0.1</version>
- <scope>compile</scope>
- </dependency>
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Added:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingRuntimeException.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingRuntimeException.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingRuntimeException.java
(added)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingRuntimeException.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,24 @@
+package org.apache.tuscany.test.binding;
+
+import org.apache.tuscany.api.TuscanyRuntimeException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class TestBindingRuntimeException extends TuscanyRuntimeException {
+
+ public TestBindingRuntimeException() {
+ }
+
+ public TestBindingRuntimeException(String message) {
+ super(message);
+ }
+
+ public TestBindingRuntimeException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public TestBindingRuntimeException(Throwable cause) {
+ super(cause);
+ }
+}
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingRuntimeException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingRuntimeException.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingService.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingService.java?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingService.java
(original)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingService.java
Fri Sep 8 00:20:10 2006
@@ -24,6 +24,7 @@
import org.apache.tuscany.spi.wire.WireService;
/**
+ *
* @version $Rev$ $Date$
*/
public class TestBindingService<T> extends ServiceExtension<T> {
Modified:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java
(original)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java
Fri Sep 8 00:20:10 2006
@@ -2,9 +2,9 @@
import java.lang.reflect.InvocationTargetException;
-import org.apache.tuscany.spi.wire.TargetInvoker;
-import org.apache.tuscany.spi.wire.Message;
import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.TargetInvoker;
/**
* @version $Rev$ $Date$
@@ -27,7 +27,7 @@
public Object invokeTarget(final Object payload) throws
InvocationTargetException {
// echo back the result, a real binding would invoke some API for
flowing the request
- return ((Object[])payload)[0];
+ return ((Object[]) payload)[0];
}
public Message invoke(Message msg) throws InvocationRuntimeException {
@@ -45,4 +45,5 @@
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
+
}
Added:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBinding.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBinding.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBinding.java
(added)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBinding.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,27 @@
+package org.apache.tuscany.test.binding;
+
+import org.apache.tuscany.spi.model.Binding;
+
+/**
+ * A simple socket-based binding. Service operations may onyl take one
parameter that is <code>Serializable</code>
+ *
+ * @version $$Rev$$ $$Date$$
+ */
+public class TestSocketBinding extends Binding {
+ private String host;
+ private int port;
+
+ public TestSocketBinding(String host, int port) {
+ this.host = host;
+ this.port = port;
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+}
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBinding.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBinding.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingBuilder.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingBuilder.java
(added)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingBuilder.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,39 @@
+package org.apache.tuscany.test.binding;
+
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.Reference;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.BindingBuilderExtension;
+import org.apache.tuscany.spi.model.BoundReferenceDefinition;
+import org.apache.tuscany.spi.model.BoundServiceDefinition;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class TestSocketBindingBuilder extends
BindingBuilderExtension<TestSocketBinding> {
+
+ @SuppressWarnings("unchecked")
+ public Service<?> build(CompositeComponent parent,
+ BoundServiceDefinition<TestSocketBinding>
definition,
+ DeploymentContext context) {
+ Class<?> interfaze =
definition.getServiceContract().getInterfaceClass();
+ int port = definition.getBinding().getPort();
+ return new TestSocketBindingService(definition.getName(), port,
interfaze, parent, wireService);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Reference<?> build(CompositeComponent parent,
+ BoundReferenceDefinition<TestSocketBinding>
definition,
+ DeploymentContext context) {
+ Class<?> interfaze =
definition.getServiceContract().getInterfaceClass();
+ String name = definition.getName();
+ int port = definition.getBinding().getPort();
+ String host = definition.getBinding().getHost();
+ return new TestSocketBindingReference(name, host, port, interfaze,
parent, wireService);
+ }
+
+ protected Class<TestSocketBinding> getBindingType() {
+ return TestSocketBinding.class;
+ }
+}
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingBuilder.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingLoader.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingLoader.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingLoader.java
(added)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingLoader.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,45 @@
+package org.apache.tuscany.test.binding;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.osoa.sca.Version;
+import org.osoa.sca.annotations.Constructor;
+
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class TestSocketBindingLoader extends
LoaderExtension<TestSocketBinding> {
+
+ public static final QName BINDING_TEST = new
QName(Version.XML_NAMESPACE_1_0, "binding.socket");
+
+ @Constructor
+ public TestSocketBindingLoader(@Autowire LoaderRegistry registry) {
+ super(registry);
+ }
+
+ public QName getXMLType() {
+ return TestSocketBindingLoader.BINDING_TEST;
+ }
+
+ public TestSocketBinding load(CompositeComponent parent,
+ XMLStreamReader reader,
+ DeploymentContext context) throws
XMLStreamException, LoaderException {
+ String host = reader.getAttributeValue(null, "host");
+ int port;
+ try {
+ port = Integer.parseInt(reader.getAttributeValue(null, "port"));
+ } catch (NumberFormatException e) {
+ throw new LoaderException("Invalid port specified", e);
+ }
+ return new TestSocketBinding(host, port);
+ }
+}
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingLoader.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingReference.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingReference.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingReference.java
(added)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingReference.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,32 @@
+package org.apache.tuscany.test.binding;
+
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.extension.ReferenceExtension;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.wire.WireService;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class TestSocketBindingReference<T> extends ReferenceExtension<T> {
+
+ private String host;
+ private int port;
+
+ public TestSocketBindingReference(String name,
+ String host,
+ int port,
+ Class<T> interfaze,
+ CompositeComponent parent,
+ WireService wireService) {
+ super(name, interfaze, parent, wireService);
+ this.port = port;
+ this.host = host;
+ }
+
+ public TargetInvoker createTargetInvoker(ServiceContract contract,
Operation operation) {
+ return new TestSocketInvoker(host, port, operation.getName());
+ }
+}
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingReference.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingReference.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingService.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingService.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingService.java
(added)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingService.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,122 @@
+package org.apache.tuscany.test.binding;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.apache.tuscany.spi.CoreRuntimeException;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.extension.ServiceExtension;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.InboundInvocationChain;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.WireService;
+
+/**
+ * Implements a very simple remote, socket-based binding for test purposes.
This binding exposes services using a socket
+ * on a given port. Service operations must take only one paramter that is
<code>Serializable</code>.
+ *
+ * @version $Rev$ $Date$
+ */
+public class TestSocketBindingService<T> extends ServiceExtension<T> {
+ private int port;
+ private ServerSocket socket;
+ private ExecutorService executor;
+ private TestSocketBindingService<T>.ServerRunnable runnable;
+
+ public TestSocketBindingService(String name,
+ int port,
+ Class<T> interfaze,
+ CompositeComponent parent,
+ WireService wireService) throws
CoreRuntimeException {
+ super(name, interfaze, parent, wireService);
+ this.port = port;
+ }
+
+ public void start() {
+ executor = Executors.newSingleThreadExecutor();
+ // create a listener, note that a work scheduler should normally be
used to spawn work in different threads
+ runnable = new ServerRunnable();
+ executor.execute(runnable);
+ }
+
+ public void stop() {
+ try {
+ runnable.setEnd(true);
+ socket.close();
+ executor.shutdownNow();
+ } catch (IOException e) {
+ throw new TestBindingRuntimeException(e);
+ }
+ }
+
+ /**
+ * Creates a socket listener in another thread which handles one client at
a time. For a real binding, a work
+ * scheduler should be used
+ */
+ private class ServerRunnable implements Runnable {
+
+ private boolean end;
+
+ public void setEnd(boolean end) {
+ this.end = end;
+ }
+
+ public void run() {
+ Socket clientSocket;
+ ObjectInputStream is = null;
+ ObjectOutputStream os = null;
+ try {
+ socket = new ServerSocket(port);
+ } catch (IOException e) {
+ throw new TestBindingRuntimeException(e);
+ }
+ while (!end) {
+ try {
+ // only handle one client at a time
+ clientSocket = socket.accept();
+ is = new ObjectInputStream(clientSocket.getInputStream());
+ String operation = is.readUTF();
+ Object o = is.readObject();
+ Map<Operation<?>, InboundInvocationChain> chains =
getInboundWire().getInvocationChains();
+ for (InboundInvocationChain chain : chains.values()) {
+ if (chain.getOperation().getName().equals(operation)) {
+ Message message = new MessageImpl();
+ message.setTargetInvoker(chain.getTargetInvoker());
+ message.setBody(new Object[]{o});
+ message =
chain.getHeadInterceptor().invoke(message);
+ os = new
ObjectOutputStream(clientSocket.getOutputStream());
+ os.writeObject(message.getBody());
+ os.flush();
+ }
+ }
+ } catch (IOException e) {
+ throw new TestBindingRuntimeException(e);
+ } catch (ClassNotFoundException e) {
+ throw new TestBindingRuntimeException(e);
+ } finally {
+ if (os != null) {
+ try {
+ os.close();
+ } catch (IOException e) {
+ // ingore
+ }
+ }
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+ }
+ }
+}
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingService.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketBindingService.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketInvoker.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketInvoker.java?view=auto&rev=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketInvoker.java
(added)
+++
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketInvoker.java
Fri Sep 8 00:20:10 2006
@@ -0,0 +1,113 @@
+package org.apache.tuscany.test.binding;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+/**
+ * Responsible for serializing an operation parameter flowing the invocation
through the socket
+ *
+ * @version $Rev$ $Date$
+ */
+public class TestSocketInvoker implements TargetInvoker {
+ private String host;
+ private int port;
+ private String operation;
+
+ private boolean cacheable;
+
+ public TestSocketInvoker(String host, int port, String operation) {
+ this.host = host;
+ this.port = port;
+ this.operation = operation;
+ }
+
+ public boolean isCacheable() {
+ return cacheable;
+ }
+
+ public void setCacheable(boolean cacheable) {
+ this.cacheable = cacheable;
+ }
+
+ public boolean isOptimizable() {
+ return isCacheable();
+ }
+
+ public Message invoke(Message msg) throws InvocationRuntimeException {
+ try {
+ Object resp = invokeTarget(msg.getBody());
+ msg.setBody(resp);
+ } catch (InvocationTargetException e) {
+ msg.setBody(e.getCause());
+ } catch (Throwable e) {
+ msg.setBody(e);
+ }
+ return msg;
+ }
+
+ /**
+ * Sends the payload over a socket
+ */
+ public Object invokeTarget(final Object object) throws
InvocationTargetException {
+ Object payload;
+ if (object != null && !object.getClass().isArray()) {
+ payload = object;
+ } else {
+ payload = ((Object[]) object)[0];
+ }
+
+ Socket socket = null;
+ ObjectOutputStream os = null;
+ ObjectInputStream is = null;
+ try {
+ socket = new Socket(host, port);
+ os = new ObjectOutputStream(socket.getOutputStream());
+ os.writeUTF(operation);
+ os.writeObject(payload);
+ os.flush();
+ is = new ObjectInputStream(socket.getInputStream());
+ return is.readObject();
+ } catch (ClassNotFoundException e) {
+ throw new InvocationTargetException(e);
+ } catch (UnknownHostException e) {
+ throw new InvocationTargetException(e);
+ } catch (IOException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ if (os != null) {
+ try {
+ os.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ if (socket != null) {
+ try {
+ socket.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+
+ public Object clone() throws CloneNotSupportedException {
+ return super.clone();
+ }
+
+}
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketInvoker.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestSocketInvoker.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/test.binding.system.scdl
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/test.binding.system.scdl?view=diff&rev=441406&r1=441405&r2=441406
==============================================================================
---
incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/test.binding.system.scdl
(original)
+++
incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/test.binding.system.scdl
Fri Sep 8 00:20:10 2006
@@ -33,4 +33,12 @@
<system:implementation.system
class="org.apache.tuscany.test.binding.TestBindingBuilder"/>
</component>
+ <component name="SocketBindingLoader">
+ <system:implementation.system
class="org.apache.tuscany.test.binding.TestSocketBindingLoader"/>
+ </component>
+
+ <component name="SocketBindingBuilder">
+ <system:implementation.system
class="org.apache.tuscany.test.binding.TestSocketBindingBuilder"/>
+ </component>
+
</composite>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]