It looks like a reasonable proposal. I'll try to implement the changes and hopefully we can make into 1.3 release.

Thanks,
Raymond
--------------------------------------------------
From: "Jean-Sebastien Delfino (JIRA)" <[email protected]>
Sent: Monday, July 07, 2008 3:50 PM
To: <[email protected]>
Subject: [jira] Commented: (TUSCANY-2409) Major consumability issues with new Node and Domain APIs


[ https://issues.apache.org/jira/browse/TUSCANY-2409?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12611385#action_12611385 ]

Jean-Sebastien Delfino commented on TUSCANY-2409:
-------------------------------------------------

Here's what I think we should do:

1. Emphasize that in general authors of an SCA application should not / should not have to write a main method(). Bootstrapping a node in code in your main method should be reserved to advanced scenarios.

2. Explain that people who want to bootstrap a node themselves should in general favor: SCANode2Factory.createSCANode(String compositeURI, SCAContribution... contributions) but not hardcode these paths in their code and externalize them. BTW that's what they do when they externalize their classpath definition and run java -cp <paths to their JARs>.

2. Make SCANode2Factory.SCAContribution a top level SCAContribution class

3. Add a method createSCANodeFromClassLoader(String compositeURI, myClassLoader). That method should search for compositeURI using myClassLoader.getResource(compositeURI), and determine the root of the SCA contribution to use from that (same algorithm as the current SCADomain.newInstance()). We should make it really really clear that SCA contributions should not be confused with a Java classpath and that this method is only there for convenience in limited use cases (one contribution containing everything, put on the classpath, which is really not the best practice with SCA).

4. Change createSCANode(String configurationURI) to createSCANodeFromURL(String configurationURL)

5. Have createSCANode(String compositeURI, SCAContribution... contributions) do the equivalent of createSCANodeFromClassLoader(compositeURI, Thread.currentThread().getContextClassLoader()) when no contributions are passed in, also equivalent to the current SCADomain.newInstance(compositeURI). Again we should document that this is just a shortcut allowing a not so good SCA contribution development practice.

At some point I thought about another approach:
- add an SCAContribution.createSCAContributionFromClassLoader(ClassLoader cl)
- or add an SCAContribution(ClassLoader cl) constructor

allowing app developers to do:
factory.createSCANode("my composite", new SCAContribution(myClassLoader))

but that would have been confusing... as a ClassLoader alone is not sufficient to find the root of a Contribution (we need another piece of information like the path of a composite file available in the ClassLoader for example to really find that root) so new SCAContribution(myClassLoader) would not create a properly initialized object (for example, we wouldn't know what to return from SCAContribution.getLocation()).


Major consumability issues with new Node and Domain APIs
--------------------------------------------------------

                Key: TUSCANY-2409
                URL: https://issues.apache.org/jira/browse/TUSCANY-2409
            Project: Tuscany
         Issue Type: Bug
   Affects Versions: Java-SCA-1.3
        Environment: All
           Reporter: Simon Nash
            Fix For: Java-SCA-1.3


The recent change to remove the previous domain/node implementation has created severe usabliity issues for the callback-ws-client and callback-ws-server samples.
1. In callback-ws-client, MyClientImpl, the line
SCANode node = SCANodeFactory.createNodeWithComposite("myapp.composite");
    was changed to
SCANode2 node = SCANode2Factory.newInstance().createSCANode("target/classes/myapp.composite", new SCAContribution("test", "target/classes"));
2. In callback-ws-client, CallbackClientTestCase, the line
node = SCANodeFactory.createNodeWithComposite("callbackws.composite");
    was changed to
node = SCANode2Factory.newInstance().createSCANode("jar:file:../callback-ws-service/target/sample-callback-ws-service.jar!/callbackws.composite", new SCAContribution("server", "../callback-ws-service/target/sample-callback-ws-service.jar"));
3. In callback-ws-server, CallbackServer, the line
SCANode node = SCANodeFactory.createNodeWithComposite("callbackws.composite");
    was changed to
SCANode2 node = SCANode2Factory.newInstance().createSCANode("target/classes/callbackws.composite", new SCAContribution("test", "target/classes"));
4. In callback-ws-server, CallbackServerTestCase, the line
node = SCANodeFactory.createNodeWithComposite("callbackws.composite");
    was changed to
node = SCANode2Factory.newInstance().createSCANode("target/classes/callbackws.composite", new SCAContribution("test", "target/classes")); The complexity of these APIs, and the need to embed hard-wired paths and jar names, is unacceptable for a simple sample. This is "must fix" for the 1.3 release. It would also be good to convert more samples from the previous host-embedded APIs to the new domain/node APIs, but this can't happen until the consumability problems are fixed. Ideally we would have a "convenience" API similar to the previous createNodeWithComposite() API. This API would call the other more complex APIs under the covers.

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to