ant elder wrote:
What would be in the core namespace of a PHP SCA runtime?

If a goal is to be able to take any SCA module and deploy it unchanged in
any SCA runtime then doesn't it have to be consistent - either everything in
the core namespace or everything in its own namespace?

   ...ant

On 3/7/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
ant elder wrote:
(don't you hate the way gmail sends the mail before you've finished if
you
hit the wrong key)

So the key problem here was that the standard Tuscany bindings aren't
the
same as custom ones. Custom bindings and component types need to be in
their
own namespace, and the SCDLModelLoader impl needs to have a static
initializer to  register the new ScdlFactory. Wouldn't it be better if
all
bindings and component types were done the same way? It would make it
easier
to see how they work, and for example, say you take an sca module with a
Java  component and deploy it in a C++ or PHP or whatever langauge SCA
runtime then Java is not going to be in the default namespace so you'll
have
to update your sca.module file wont you?

   ...ant

On 3/6/06, ant elder <[EMAIL PROTECTED]> wrote:

So the key problem here was that the standard Tuscany bindings aren't
the
same as custom ones. Custom bindings need to be in their own namespace,
and
the SCDLModelLoader impl needs to have a static initilizer to  reg

On 3/6/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:


ant elder wrote:

I'm messing about trying to add a new binding to Tuscany but can't
get
it to

work. There must be something I'm missing to register the new binding

SCDL

as all I get is the exception below saying "Feature ' binding.ajax'

not

found". Could  someone have a quick look if its something obvious?
The
code's up at
http://svn.apache.org/repos/asf/incubator/tuscany/sandbox/ant/
,

the AJAXAssemblyLoaderTestCase shows the problem.

Thanks,

   ...ant

java.lang.RuntimeException:


file:/C:/SCA/SVN/WORK/sca/binding.ajax/bin/org/apache/tuscany/binding/ajax/assembly/tests/sca.module
    at

org.apache.tuscany.model.scdl.loader.impl.SCDLXMLReader.getRootObject

(SCDLXMLReader.java:103)
    at

org.apache.tuscany.model.scdl.loader.impl.SCDLXMLReader.getModule(

SCDLXMLReader.java :61)
    at


org.apache.tuscany.model.scdl.loader.impl.SCDLAssemblyModelLoaderImpl.loadModule
(SCDLAssemblyModelLoaderImpl.java:101)
    at


org.apache.tuscany.binding.ajax.assembly.tests.AJAXAssemblyLoaderTestCase.testLoader
(AJAXAssemblyLoaderTestCase.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown

Source)

    at java.lang.reflect.Method.invoke(Unknown Source)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run (TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
RemoteTestRunner.java:478)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
RemoteTestRunner.java:344)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (
RemoteTestRunner.java:196)
Caused by:

org.eclipse.emf.ecore.resource.Resource$IOWrappedException:Feature '

binding.ajax' not found. (http:///temp.xml, 23, 24)
    at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(

XMLLoadImpl.java:283)

    at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(
XMLResourceImpl.java:646)
    at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.load (
XMLResourceImpl.java:614)
    at org.apache.tuscany.sdo.helper.XMLDocumentImpl.load(
XMLDocumentImpl.java:246)
    at org.apache.tuscany.sdo.helper.XMLDocumentImpl.load(
XMLDocumentImpl.java :225)
    at org.apache.tuscany.sdo.helper.XMLHelperImpl.load(

XMLHelperImpl.java

:72)
    at org.apache.tuscany.sdo.helper.XMLHelperImpl.load(

XMLHelperImpl.java

:66)
    at

org.apache.tuscany.model.scdl.loader.impl.SCDLXMLReader.getRootObject

(SCDLXMLReader.java:100)
    ... 18 more



Ant,

Good news, I took a look at your AJAX binding in your sandbox and was
able to get your test case working... You just had a few minor
problems
in your XSD, missing a namespace prefix declaration, and some
left-over
references to axis2.

I am committing the fixes for you. Here are the details:
- In sca-binding-ajax.xsd, removed the <include
location="sca-core.xsd"/> which actually included a copy of the whole
SCDL schema in your Ajax binding namespace. This is not necessary,
instead the base SCDL XSD needs to be correctly imported so that your
AJAXBinding can extend the correct base SCDL Binding type.
- Fixed the location attribute in the <import location="....
sca-core.xsd"> to a correct relative location pointing to sca-core.xsd
in the java/sca/model project from your sandbox/ant/binding.ajax.
- In sca.module, added an ajax namespace prefix declaration for your
Ajax binding namespace and changed <binding.ajax/> to <ajax:
binding.ajax
/>.
- Changed the left over references to axis2 to ajax in sca.module and
the test case itself.

Hope this helps...

--
Jean-Sebastien



Ant,

I think you raised a very interesting issue:

The SCA assembly XSD from the 0.9 SCA spec currently includes the Java
component type and the WebService binding in the core namespace. The CPP
component type is also part of the same namespace. I think the idea here
is to make it simpler for an app developer to use these core  bindings
and component types without having to fight with XML namespaces and
namespace prefixes.

To illustrate this, let's compare an sca.module with everything in the
core SCA namespace :
<module xmlns="http://www.osoa.org/xmlns/sca/0.9";
xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9";
    name="tuscany.samples.bigbank.account">

    <entryPoint name="AccountService">
        <interface.java
interface="
org.apache.tuscany.samples.bigbank.account.services.account.AccountService
"/>
        <binding.ws
port="http://www.bigbank.com/Account/#AccountServiceSOAP"/>
        <reference>AccountServiceComponent/AccountService</reference>
    </entryPoint>

    <component name="AccountServiceComponent">
        <implementation.java
class="
org.apache.tuscany.samples.bigbank.account.services.account.AccountServiceImpl
"/>
        <references>

<v:accountDataService>AccountDataServiceComponent</v:accountDataService>
            <v:stockQuoteService>StockQuoteService</v:stockQuoteService>
        </references>
    </component>

</module>

with the same sca.module if we were using multiple namespaces:
<module xmlns="http://www.osoa.org/xmlns/sca/0.9";
xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9";
    xmls:java="http://www.osoa.org/xmlns/sca/0.9/java";
    xmls:ws="http://www.osoa.org/xmlns/sca/0.9/webservice";
    name="tuscany.samples.bigbank.account">

    <entryPoint name="AccountService">
        <java:interface.java
interface="
org.apache.tuscany.samples.bigbank.account.services.account.AccountService
"/>
        <ws:binding.ws
port="http://www.bigbank.com/Account/#AccountServiceSOAP"/>
        <reference>AccountServiceComponent/AccountService</reference>
    </entryPoint>

    <component name="AccountServiceComponent">
        <java:implementation.java
class="
org.apache.tuscany.samples.bigbank.account.services.account.AccountServiceImpl
"/>
        <references>

<v:accountDataService>AccountDataServiceComponent</v:accountDataService>
            <v:stockQuoteService>StockQuoteService</v:stockQuoteService>
        </references>
    </component>

</module>

I think we should bring up that issue to the SCA spec collaboration team:
- do we want to have the java component type, the cpp component type and
the web service binding in different namespaces from the SCA core
namespace?
- if we do that can we simplify and change <java:implementation.java> to
<java:implementation > since the .java is not really necessary anymore.

IMO <implementation.java> or <implementation.cpp> is less error prone
than an xmlns:java="..." + <java:implementation>, and I always get all
these namespaces wrong when I write an XML doc, so I'd prefer to stay
with what we have now in the spec, i.e. all the core bindings and
component implementation types in the core SCA namespace.

Now what about new component types and bindings, which are extensions to
SCA not defined in the core SCA spec?
Again here if I put SCA app developer hat on I would prefer to see them
in the same SCA namespace, and a naming convention like binding.ws,
binding.ajax, implementation.js etc to avoid name collisions. But this
raises a number of issues:
- can people actually add to the SCA core namespace and still comply
with the SCA spec?
- will we have a central XSD containing all the bindings and component
types? How is that extensible, what will be the development process to
modify that central schema?
- if we don't have a central XSD with all the extensions, it'll probably
not be possible to validate sca.module files using XML schema
validation. Is that an issue?
- if all the models for the various component types and bindings are
covering the same namespace, should they be packaged together? or can we
have model fragments packaged in separate jars contributing to a single
namespace?

The alternative is to have new bindings and component types defined in
their own schema, in their own namespace. This is what we have now:
- built-in core component types and bindings in the sca-core.xsd and the
SCA namespace
- others in the other namespaces.

What do people in the group think? Any ideas?

--
Jean-Sebastien



Ant,

IMO everything from the core SCA assembly spec should be in the same namespace. The SCA CPP spec is already using the same namespace as the SCA Java spec. I have not seen the PHP spec but I think it should do the same.

--
Jean-Sebastien

Reply via email to