Author: gnodet
Date: Fri Feb  9 06:08:07 2007
New Revision: 505301

URL: http://svn.apache.org/viewvc?view=rev&rev=505301
Log:
ODE-98: Provide a way to lazy discover the JBI endpoint, so that processes can 
refer to JBI endpoints activated later

Modified:
    
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
    
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/JbiEndpointReference.java

Modified: 
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java?view=diff&rev=505301&r1=505300&r2=505301
==============================================================================
--- 
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
 (original)
+++ 
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
 Fri Feb  9 06:08:07 2007
@@ -22,7 +22,6 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.iapi.*;
 
-import javax.jbi.servicedesc.ServiceEndpoint;
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
 
@@ -63,17 +62,12 @@
 
     public PartnerRoleChannel createPartnerRoleChannel(QName processId, 
PortType portType,
             Endpoint initialPartnerEndpoint) {
-        
         if (initialPartnerEndpoint != null) {
-            ServiceEndpoint se = 
_ode.getContext().getEndpoint(initialPartnerEndpoint.serviceName,initialPartnerEndpoint.portName);
-            if (se == null)
-                throw new ContextException("Unknown endpoint: "  + 
initialPartnerEndpoint, null);
-            JbiEndpointReference jbiEpr = new JbiEndpointReference(se);
+            JbiEndpointReference jbiEpr = new 
JbiEndpointReference(initialPartnerEndpoint, _ode);
             return new PartnerRoleChannelImpl(jbiEpr);
         } else {
             return new PartnerRoleChannelImpl();
         }
-        
     }
 
     

Modified: 
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/JbiEndpointReference.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/JbiEndpointReference.java?view=diff&rev=505301&r1=505300&r2=505301
==============================================================================
--- 
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/JbiEndpointReference.java
 (original)
+++ 
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/JbiEndpointReference.java
 Fri Feb  9 06:08:07 2007
@@ -26,6 +26,8 @@
 import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
 
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.Endpoint;
 import org.apache.ode.bpel.iapi.EndpointReference;
 import org.apache.ode.utils.DOMUtils;
 
@@ -36,9 +38,17 @@
  */
 class JbiEndpointReference implements EndpointReference {
 
+  private OdeContext _ode;
+  private Endpoint _initialPartnerEndpoint;
   private ServiceEndpoint _se;
   private QName _type;
   
+  JbiEndpointReference(Endpoint initialPartnerEndpoint, OdeContext ode) {
+    _initialPartnerEndpoint = initialPartnerEndpoint;
+    _ode = ode;
+  }
+  
+
   JbiEndpointReference(ServiceEndpoint se) {
     if (se == null)
       throw new NullPointerException("Null ServiceEndpoint");
@@ -51,10 +61,9 @@
   }
 
 public Document toXML() {
-    DocumentFragment fragment = _se.getAsReference(_type);
+    DocumentFragment fragment = getServiceEndpoint().getAsReference(_type);
     if (fragment == null)
       return null;
-    
     Document doc = DOMUtils.newDocument();
     Element root = 
doc.createElementNS(SERVICE_REF_QNAME.getNamespaceURI(),SERVICE_REF_QNAME.getLocalPart());
     root.appendChild(doc.importNode(fragment,true));
@@ -64,15 +73,33 @@
 
   public boolean equals(Object other) {
     if (other instanceof JbiEndpointReference)
-      return 
_se.getServiceName().equals(((JbiEndpointReference)other)._se.getServiceName());
+      return 
getServiceEndpoint().getServiceName().equals(((JbiEndpointReference)other).getServiceEndpoint().getServiceName());
     return false;
   }
   
   public int hashCode() {
-    return _se.getServiceName().hashCode();
+    return getServiceEndpoint().getServiceName().hashCode();
+  }
+  
+  public String toString() {
+      if (_se != null) {
+          return "JbiEndpointReference[" + _se.getServiceName() + ":" + 
_se.getEndpointName() + "]";
+      } else if (_initialPartnerEndpoint != null) {
+          return "JbiEndpointReference[" + _initialPartnerEndpoint.serviceName 
+ ":" + _initialPartnerEndpoint.portName + "]";
+      } else {
+          return "JbiEndpointReference[unknown]";
+      }
   }
 
   ServiceEndpoint getServiceEndpoint() {
+    if (_se == null) {
+        if (_initialPartnerEndpoint != null) {
+            _se = 
_ode.getContext().getEndpoint(_initialPartnerEndpoint.serviceName, 
_initialPartnerEndpoint.portName);
+            if (_se == null) {
+                throw new ContextException("Unknown endpoint: "  + 
_initialPartnerEndpoint, null);
+            }
+        }
+    }
     return _se;
   }
 }


Reply via email to