Author: rfeng
Date: Wed Aug 22 12:30:56 2007
New Revision: 568735
URL: http://svn.apache.org/viewvc?rev=568735&view=rev
Log:
Apply Simon's path for TUSCANY-1500.
Added:
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java
- copied, changed from r568686,
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
(with props)
Removed:
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java
Modified:
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
Modified:
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
(original)
+++
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
Wed Aug 22 12:30:56 2007
@@ -69,7 +69,7 @@
System.out.println("CallBackApiServiceImpl getting request context");
RequestContext rc = componentContext.getRequestContext();
System.out.println("CallBackApiServiceImpl getting callback from
request context");
- callback = (CallBackApiCallBack) ((ServiceReference)
rc.getServiceReference()).getCallback();
+ callback = rc.getCallback();
System.out.println("CallBackApiServiceImpl returning callback");
return callback;
Copied:
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java
(from r568686,
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java)
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java?p2=incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java&p1=incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java&r1=568686&r2=568735&rev=568735&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java
(original)
+++
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java
Wed Aug 22 12:30:56 2007
@@ -22,8 +22,7 @@
import org.apache.tuscany.sca.host.embedded.SCADomain;
-//FIXME Fix this test case
-public class CallBackApiTestCaseFIXME extends TestCase {
+public class CallBackApiTestCase extends TestCase {
private SCADomain domain;
private CallBackApiClient aCallBackClient;
@@ -34,15 +33,14 @@
@Override
protected void setUp() throws Exception {
- domain = SCADomain.newInstance("CallBackApiTest.composite");
-
- aCallBackClient =
- domain.getService(CallBackApiClient.class, "CallBackApiClient");
+ domain = SCADomain.newInstance("CallBackApiTest.composite");
+
+ aCallBackClient = domain.getService(CallBackApiClient.class,
"CallBackApiClient");
}
-
+
@Override
protected void tearDown() throws Exception {
- domain.close();
+ domain.close();
}
}
Added:
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java?rev=568735&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
(added)
+++
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
Wed Aug 22 12:30:56 2007
@@ -0,0 +1,62 @@
+/*
+ * 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.binding.ws.addressing;
+
+import java.net.URI;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Defines a model for WS-Addressing
+ * <wsa:EndpointReference>
+ * <wsa:Address>xs:anyURI</wsa:Address>
+ * <wsa:ReferenceProperties>... </wsa:ReferenceProperties> ?
+ * <wsa:ReferenceParameters>... </wsa:ReferenceParameters> ?
+ * <wsa:PortType>xs:QName</wsa:PortType> ?
+ * <wsa:ServiceName
PortName="xs:NCName"?>xs:QName</wsa:ServiceName> ?
+ * <wsp:Policy> ... </wsp:Policy>*
+ * </wsa:EndpointReference>
+ * @version $Rev$ $Date$
+ */
+public interface EndPointReference {
+ URI getAddress();
+
+ void setAddress(URI address);
+
+ QName getPortType();
+
+ void setPortType(QName portType);
+
+ QName getServiceName();
+
+ void setServiceName(QName serviceName);
+
+ QName getPortName();
+
+ void setPortName(QName portName);
+
+ List<Object> getReferenceProperties();
+
+ List<Object> getReferenceParameters();
+
+ List<Object> getPolicies();
+
+}
Propchange:
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
Wed Aug 22 12:30:56 2007
@@ -69,7 +69,7 @@
super();
}
- public CallableReferenceImpl(Class<B> businessInterface,
+ protected CallableReferenceImpl(Class<B> businessInterface,
RuntimeComponent component,
RuntimeComponentReference reference,
Binding binding,
@@ -88,7 +88,7 @@
this.factory = getObjectFactory();
}
- public CallableReferenceImpl(Class<B> businessInterface,
WireObjectFactory<B> factory) {
+ protected CallableReferenceImpl(Class<B> businessInterface,
WireObjectFactory<B> factory) {
this.proxyFactory = factory.getProxyFactory();
this.businessInterface = businessInterface;
this.factory = factory;
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
Wed Aug 22 12:30:56 2007
@@ -25,6 +25,7 @@
import org.apache.tuscany.sca.core.invocation.CallbackWireObjectFactory;
import org.apache.tuscany.sca.core.invocation.ProxyFactory;
import org.apache.tuscany.sca.core.invocation.ThreadMessageContext;
+import org.apache.tuscany.sca.core.invocation.WireObjectFactory;
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.runtime.EndpointReference;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
@@ -82,7 +83,7 @@
Class<CB> javaClass = (Class<CB>)javaInterface.getJavaClass();
List<RuntimeWire> wires = callbackReference.getRuntimeWires();
CallbackWireObjectFactory factory = new
CallbackWireObjectFactory(javaClass, proxyFactory, wires);
- // factory.resolveTarget();
- return new ServiceReferenceImpl<CB>(javaClass, factory);
+ factory.resolveTarget();
+ return (CallableReference<CB>) new
CallableReferenceImpl<CB>(javaClass, (WireObjectFactory<CB>)factory);
}
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
Wed Aug 22 12:30:56 2007
@@ -20,9 +20,14 @@
import java.util.List;
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.WireableBinding;
import org.apache.tuscany.sca.core.factory.ObjectCreationException;
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.apache.tuscany.sca.runtime.RuntimeWire;
/**
@@ -60,7 +65,8 @@
// wire not yet selected, so return a proxy that resolves the
target dynamically
return proxyFactory.createCallbackProxy(interfaze, wires);
}
- }
+ }
+
public static RuntimeWire selectCallbackWire(Message msgContext,
List<RuntimeWire> wires) {
EndpointReference from = msgContext.getFrom();
if (from == null) {
@@ -70,7 +76,7 @@
//FIXME: need a cache for better performance. This requires making
this
// method non-static, which means changing the signature of
createCallbackProxy().
- // first choice is wire with matching desination endpoint
+ // first choice is wire with matching destination endpoint
for (RuntimeWire wire : wires) {
if (from.getURI().equals(wire.getTarget().getURI())) {
return wire;
@@ -87,7 +93,8 @@
if
(wire.getSource().getBinding().getName().equals(to.getBinding().getName())) {
//FIXME: need better way to represent dynamic wire
if (wire.getTarget().getURI().equals("/")) { // dynamic wire
- return wire;
+ //FIXME: avoid doing this for genuine dynamic wires
+ return cloneAndBind(msgContext, wire);
}
//FIXME: no dynamic wire, so should attempt to create a static
wire
}
@@ -98,7 +105,8 @@
if (wire.getSource().getBinding().getClass() ==
to.getBinding().getClass()) {
//FIXME: need better way to represent dynamic wire
if (wire.getTarget().getURI().equals("/")) { // dynamic wire
- return wire;
+ //FIXME: avoid doing this for genuine dynamic wires
+ return cloneAndBind(msgContext, wire);
}
//FIXME: no dynamic wire, so should attempt to create a static
wire
}
@@ -106,6 +114,46 @@
// no suitable callback wire was found
return null;
+ }
+
+ private static RuntimeWire cloneAndBind(Message msgContext, RuntimeWire
wire) {
+ try {
+ RuntimeWire resolvedWire = (RuntimeWire)wire.clone();
+ EndpointReference callback =
msgContext.getFrom().getCallbackEndpoint();
+ if (callback != null) {
+ RuntimeComponentReference ref =
+
bind((RuntimeComponentReference)wire.getSource().getContract(),
+ callback.getComponent(),
+ (RuntimeComponentService)callback.getContract());
+ resolvedWire = ref.getRuntimeWires().get(0);
+ }
+ return resolvedWire;
+ } catch (CloneNotSupportedException e) {
+ // will not happen
+ return null;
+ }
+ }
+
+ private static RuntimeComponentReference bind(RuntimeComponentReference
reference,
+ RuntimeComponent component,
+ RuntimeComponentService
service)
+ throws CloneNotSupportedException {
+ RuntimeComponentReference ref =
(RuntimeComponentReference)reference.clone();
+ ref.getTargets().add(service);
+ ref.getBindings().clear();
+ for (Binding binding : service.getBindings()) {
+ if (binding instanceof WireableBinding) {
+ WireableBinding wireableBinding =
(WireableBinding)((WireableBinding)binding).clone();
+ wireableBinding.setTargetBinding(binding);
+ wireableBinding.setTargetComponent(component);
+ wireableBinding.setTargetComponentService(service);
+ wireableBinding.setRemote(false);
+ ref.getBindings().add(wireableBinding);
+ } else {
+ ref.getBindings().add(binding);
+ }
+ }
+ return ref;
}
}
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
Wed Aug 22 12:30:56 2007
@@ -22,15 +22,9 @@
import java.lang.reflect.Method;
import java.util.List;
-import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.assembly.WireableBinding;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.invocation.MessageFactory;
-import org.apache.tuscany.sca.runtime.EndpointReference;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.apache.tuscany.sca.runtime.RuntimeWire;
import org.osoa.sca.NoRegisteredCallbackException;
@@ -56,27 +50,6 @@
this.wires = wires;
}
- private RuntimeComponentReference bind(RuntimeComponentReference reference,
- RuntimeComponent component,
- RuntimeComponentService service)
throws CloneNotSupportedException {
- RuntimeComponentReference ref =
(RuntimeComponentReference)reference.clone();
- ref.getTargets().add(service);
- ref.getBindings().clear();
- for (Binding binding : service.getBindings()) {
- if (binding instanceof WireableBinding) {
- WireableBinding wireableBinding =
(WireableBinding)((WireableBinding)binding).clone();
- wireableBinding.setTargetBinding(binding);
- wireableBinding.setTargetComponent(component);
- wireableBinding.setTargetComponentService(service);
- wireableBinding.setRemote(false);
- ref.getBindings().add(wireableBinding);
- } else {
- ref.getBindings().add(binding);
- }
- }
- return ref;
- }
-
@Override
@SuppressWarnings( {"unchecked"})
public Object invoke(Object proxy, Method method, Object[] args) throws
Throwable {
@@ -97,26 +70,17 @@
//FIXME: need better exception
throw new RuntimeException("No callback wire found for " +
msgContext.getFrom().getURI());
}
- RuntimeWire resolvedWire = (RuntimeWire)wire.clone();
- EndpointReference callback =
msgContext.getFrom().getCallbackEndpoint();
- if (callback != null) {
- RuntimeComponentReference ref =
- bind((RuntimeComponentReference)wire.getSource().getContract(),
- callback.getComponent(),
- (RuntimeComponentService)callback.getContract());
- resolvedWire = ref.getRuntimeWires().get(0);
- }
- setConversational(resolvedWire);
+ setConversational(wire);
setEndpoint(msgContext.getFrom());
//FIXME: can we use the same code as JDKInvocationHandler to select
the chain?
- InvocationChain chain = getInvocationChain(method, resolvedWire);
+ InvocationChain chain = getInvocationChain(method, wire);
if (chain == null) {
throw new IllegalArgumentException("No matching operation is
found: " + method);
}
try {
- return invoke(chain, args, resolvedWire);
+ return invoke(chain, args, wire);
} catch (InvocationTargetException e) {
Throwable t = e.getCause();
if (t instanceof NoRegisteredCallbackException) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]