You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Luciano Resende <lu...@gmail.com> on 2007/07/31 00:27:57 UTC

Use the contribution URI as the scope for HelperContext, was Fwd: svn commit: r561111 - /incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java

   Looks like DefaultSCADomain is always setting contributionURI to
empty string. With the current behavior, can we have side effects by
using the contributionURI as the scope for HelperContext ?

   Here is a output I get after setting a System.out inside
DefaultSCADomain(line 113) and ImportSDOPostProcessor (line 117), and
then executing the helloworld-ws-sdo sample.

contributionURI =>
HelperContext ID:
contributionURI =>
HelperContext ID:
addServletMapping port: 8085 path: /HelloWorldService
Injected helloWorldService
Called getGreetings

Thoughts ?

---------- Forwarded message ----------
From: rfeng@apache.org <rf...@apache.org>
Date: Jul 30, 2007 1:48 PM
Subject: svn commit: r561111 -
/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
To: tuscany-commits@ws.apache.org


Author: rfeng
Date: Mon Jul 30 13:48:15 2007
New Revision: 561111

URL: http://svn.apache.org/viewvc?view=rev&rev=561111
Log:
Use the contribution URI as the scope for HelperContext

Modified:
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java?view=diff&rev=561111&r1=561110&r2=561111
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
(original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
Mon Jul 30 13:48:15 2007
@@ -32,16 +32,17 @@
 import commonj.sdo.impl.HelperProvider;

 /**
- * PostProcessor resposible for identifying SDO Factories and
register them with SDO Helper Context
+ * PostProcessor resposible for identifying SDO Factories and
register them with
+ * SDO Helper Context
  *
  * @version $Rev$ $Date$
  */
 public class ImportSDOPostProcessor implements ContributionPostProcessor {
     private static final String URI_SEPARATOR = "/";
     private static final String JAVA_SEPARATOR = ".";
-
+
     private HelperContextRegistry helperContextRegistry;
-
+
     public ImportSDOPostProcessor(HelperContextRegistry
helperContextRegistry) {
         super();
         this.helperContextRegistry = helperContextRegistry;
@@ -58,10 +59,10 @@
                 if (clazz.getClass() != null) {
                     try {
                         //check if it's a SDO factory by
introspecting INSTANCE field
-                        if(isSDOFactory(clazz.getJavaClass())) {
-                            register(clazz.getJavaClass(),
this.getHelperContext());
+                        if (isSDOFactory(clazz.getJavaClass())) {
+                            register(clazz.getJavaClass(),
this.getHelperContext(contribution));
                         }
-
+
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
@@ -71,7 +72,9 @@
     }

     /**
-     * Transform class artifact URI into a java class name for proper
loading by the class loader
+     * Transform class artifact URI into a java class name for proper
loading by
+     * the class loader
+     *
      * @param factoryURI
      * @return
      */
@@ -80,39 +83,37 @@
         int pos = factoryURI.lastIndexOf(JAVA_SEPARATOR);
         return factoryURI.substring(0, pos);
     }
-
+
     /**
      * Check if a specific class is a SDO Factory by checking INSTANCE field
+     *
      * @param factoryClass
      * @return
      */
     private boolean isSDOFactory(Class factoryClass) {
-        Field field = null;
         try {
-            field = factoryClass.getField("INSTANCE");
-        } catch (Exception e) {
-            // ignore any exception
-        }
-
-        if (field != null) {
+            // The factory interface has a constant "INSTANCE" field
+            Field field = factoryClass.getField("INSTANCE");
+            // A public method: register(HelperContext scope)
+            Method method = factoryClass.getMethod("register",
HelperContext.class);
             return true;
-        } else {
+        } catch (NoSuchMethodException e) {
+            return false;
+        } catch (NoSuchFieldException e) {
             return false;
         }
-
     }
-
+
     /**
      * Get a SDO HelperContext reference
+     *
      * @return
      */
-    private HelperContext getHelperContext() {
+    private HelperContext getHelperContext(Contribution contribution) {
         HelperContext helperContext = null;

-        // FIXME: [rfeng] How to get the enclosing composite?
-        int id = System.identityHashCode(getClass());
-        // FIXME: [rfeng] How to associate the TypeHelper with deployment
-        // context?
+        // FIXME: [rfeng] Should we scope the HelperContext by
contribution URI?
+        String id = contribution.getURI();
         synchronized (helperContextRegistry) {
             helperContext = helperContextRegistry.getHelperContext(id);
             if (helperContext == null) {
@@ -120,12 +121,13 @@
                 helperContextRegistry.register(id, helperContext);
             }
         }
-
+
         return helperContext;
     }
-
+
     /**
      * Register an SDO Factory with the helper context
+     *
      * @param factoryClass
      * @param helperContext
      * @throws Exception



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org



-- 
Luciano Resende
Apache Tuscany Committer
http://people.apache.org/~lresende
http://lresende.blogspot.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org


Re: Use the contribution URI as the scope for HelperContext, was Fwd: svn commit: r561111 - /incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java

Posted by Jean-Sebastien Delfino <js...@apache.org>.
[snip]
Luciano Resende wrote:
> I have fixed this under revision #561972, we now utilize the
> contribution file name or it's location (in case of a folder) to
> construct the contribution URI.
>
> On 7/30/07, Luciano Resende <lu...@gmail.com> wrote:
>   
>>    Looks like DefaultSCADomain is always setting contributionURI to
>> empty string. With the current behavior, can we have side effects by
>> using the contributionURI as the scope for HelperContext ?
>>
>>    Here is a output I get after setting a System.out inside
>> DefaultSCADomain(line 113) and ImportSDOPostProcessor (line 117), and
>> then executing the helloworld-ws-sdo sample.
>>
>> contributionURI =>
>> HelperContext ID:
>> contributionURI =>
>> HelperContext ID:
>> addServletMapping port: 8085 path: /HelloWorldService
>> Injected helloWorldService
>> Called getGreetings
>>
>> Thoughts ?
>>
>>     

I've just started to look into this and I'm not quite sure how 
associating an SDO HelperContext with a contribution URI is going to 
work. I may be missing something as I've not looked at HelperContext for 
a while.

Here's the scenario that I'm interested in:

- I'm using XSDs to describe my business data, for example 
CustomerBusinessObject.xsd describes http://myns#CustomerBusinessObject 
representing a Customer business object.

- I'm using SDOs as well, and I have generated an SDO class for my 
business objects: myns.CustomerBusinessObject

- I'm using CustomerBusinessObject in all my applications so I have 
packaged CustomerBusinessObject.xsd and myns.CustomerBusinessObject in 
an SCA contribution which I'm going to reuse everywhere: Customer.jar

- I'm developing a CustomerService SCA service component, in 
contribution CustomerService.jar

- CustomerService.jar uses SCA imports to import the Customer business 
object XML namespace and generated SDO class:
<import namespace="http://myns" location="Customer.jar"/>
<import.java package="myns" location="Customer.jar"/>

- the CustomerService component gets the HelperContext associated with 
CustomerService.jar (right?), and uses it to work with a 
CustomerBusinessObject.

Does that basic scenario work? Will the SDO HelperContext obtained in 
CustomerService.jar see the SDO metadata and class for 
CustomerBusinessObject from Customer.jar? I think it should :)

-- 
Jean-Sebastien


---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org


Re: Use the contribution URI as the scope for HelperContext, was Fwd: svn commit: r561111 - /incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java

Posted by Luciano Resende <lu...@gmail.com>.
I have fixed this under revision #561972, we now utilize the
contribution file name or it's location (in case of a folder) to
construct the contribution URI.

On 7/30/07, Luciano Resende <lu...@gmail.com> wrote:
>    Looks like DefaultSCADomain is always setting contributionURI to
> empty string. With the current behavior, can we have side effects by
> using the contributionURI as the scope for HelperContext ?
>
>    Here is a output I get after setting a System.out inside
> DefaultSCADomain(line 113) and ImportSDOPostProcessor (line 117), and
> then executing the helloworld-ws-sdo sample.
>
> contributionURI =>
> HelperContext ID:
> contributionURI =>
> HelperContext ID:
> addServletMapping port: 8085 path: /HelloWorldService
> Injected helloWorldService
> Called getGreetings
>
> Thoughts ?
>
> ---------- Forwarded message ----------
> From: rfeng@apache.org <rf...@apache.org>
> Date: Jul 30, 2007 1:48 PM
> Subject: svn commit: r561111 -
> /incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
> To: tuscany-commits@ws.apache.org
>
>
> Author: rfeng
> Date: Mon Jul 30 13:48:15 2007
> New Revision: 561111
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=561111
> Log:
> Use the contribution URI as the scope for HelperContext
>
> Modified:
>     incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
>
> Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
> URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java?view=diff&rev=561111&r1=561110&r2=561111
> ==============================================================================
> --- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
> (original)
> +++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/ImportSDOPostProcessor.java
> Mon Jul 30 13:48:15 2007
> @@ -32,16 +32,17 @@
>  import commonj.sdo.impl.HelperProvider;
>
>  /**
> - * PostProcessor resposible for identifying SDO Factories and
> register them with SDO Helper Context
> + * PostProcessor resposible for identifying SDO Factories and
> register them with
> + * SDO Helper Context
>   *
>   * @version $Rev$ $Date$
>   */
>  public class ImportSDOPostProcessor implements ContributionPostProcessor {
>      private static final String URI_SEPARATOR = "/";
>      private static final String JAVA_SEPARATOR = ".";
> -
> +
>      private HelperContextRegistry helperContextRegistry;
> -
> +
>      public ImportSDOPostProcessor(HelperContextRegistry
> helperContextRegistry) {
>          super();
>          this.helperContextRegistry = helperContextRegistry;
> @@ -58,10 +59,10 @@
>                  if (clazz.getClass() != null) {
>                      try {
>                          //check if it's a SDO factory by
> introspecting INSTANCE field
> -                        if(isSDOFactory(clazz.getJavaClass())) {
> -                            register(clazz.getJavaClass(),
> this.getHelperContext());
> +                        if (isSDOFactory(clazz.getJavaClass())) {
> +                            register(clazz.getJavaClass(),
> this.getHelperContext(contribution));
>                          }
> -
> +
>                      } catch (Exception e) {
>                          e.printStackTrace();
>                      }
> @@ -71,7 +72,9 @@
>      }
>
>      /**
> -     * Transform class artifact URI into a java class name for proper
> loading by the class loader
> +     * Transform class artifact URI into a java class name for proper
> loading by
> +     * the class loader
> +     *
>       * @param factoryURI
>       * @return
>       */
> @@ -80,39 +83,37 @@
>          int pos = factoryURI.lastIndexOf(JAVA_SEPARATOR);
>          return factoryURI.substring(0, pos);
>      }
> -
> +
>      /**
>       * Check if a specific class is a SDO Factory by checking INSTANCE field
> +     *
>       * @param factoryClass
>       * @return
>       */
>      private boolean isSDOFactory(Class factoryClass) {
> -        Field field = null;
>          try {
> -            field = factoryClass.getField("INSTANCE");
> -        } catch (Exception e) {
> -            // ignore any exception
> -        }
> -
> -        if (field != null) {
> +            // The factory interface has a constant "INSTANCE" field
> +            Field field = factoryClass.getField("INSTANCE");
> +            // A public method: register(HelperContext scope)
> +            Method method = factoryClass.getMethod("register",
> HelperContext.class);
>              return true;
> -        } else {
> +        } catch (NoSuchMethodException e) {
> +            return false;
> +        } catch (NoSuchFieldException e) {
>              return false;
>          }
> -
>      }
> -
> +
>      /**
>       * Get a SDO HelperContext reference
> +     *
>       * @return
>       */
> -    private HelperContext getHelperContext() {
> +    private HelperContext getHelperContext(Contribution contribution) {
>          HelperContext helperContext = null;
>
> -        // FIXME: [rfeng] How to get the enclosing composite?
> -        int id = System.identityHashCode(getClass());
> -        // FIXME: [rfeng] How to associate the TypeHelper with deployment
> -        // context?
> +        // FIXME: [rfeng] Should we scope the HelperContext by
> contribution URI?
> +        String id = contribution.getURI();
>          synchronized (helperContextRegistry) {
>              helperContext = helperContextRegistry.getHelperContext(id);
>              if (helperContext == null) {
> @@ -120,12 +121,13 @@
>                  helperContextRegistry.register(id, helperContext);
>              }
>          }
> -
> +
>          return helperContext;
>      }
> -
> +
>      /**
>       * Register an SDO Factory with the helper context
> +     *
>       * @param factoryClass
>       * @param helperContext
>       * @throws Exception
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
>
>
>
> --
> Luciano Resende
> Apache Tuscany Committer
> http://people.apache.org/~lresende
> http://lresende.blogspot.com/
>


-- 
Luciano Resende
Apache Tuscany Committer
http://people.apache.org/~lresende
http://lresende.blogspot.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org