Latest update

The latest Geronimo Tuscany plugin we have can be installed on Geronimo v2.1.3. The plugin supports SCA reference and property injection in JSP, Servlet, Servlet Filters, Listeners, JSF Managed Beans, Session EJB and Message-Driven EJB. For instructions on installing the plugin and running sample applications, see http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Installing+Tuscany+Plugin+for+Geronimo .

Note: Rest of the page is not up to date (sad). Please bear with us while we update this page.
---------------------------
A page to capture the ideas and discussions on Geronimo-Tuscany Integration. This wiki page is a summary of the discussions on the mailing lists. Feel free to help in developing the ideas here.

Use Cases

Currently we are considering three use cases. These are just the initial set and they may be changed or more added as we go forward. The use cases are listed below

1) I develop SCA components, assemble them in a composite, package them in an SCA contribution. I don't really know what a WAR or an EAR is, I'm just using the SCA programming model and packaging model. I deploy my SCA contribution to Geronimo and run it there. I can then access these services using the various bindings that Tuscany provides.

2) I'm assembling SCA components, some of them developed using the SCA programming model (Java components, BPEL components or composite components for example) and I want to re-use an EJB module in my assembly, allowing other SCA components to talk to its session beans using the SCA programming model. That EJB module does not know anything about SCA, it only uses the EJB programming model.

3) I want to use a Web app in my SCA assembly and call SCA components from it. I should be able to declare an SCA component representing my Web app, wire that component to other SCA components in the assembly, and then magically the wired references will be available as proxies for use in my JSPs, allowing me to call an SCA component using a simple jsp:useBean tag. I should also be able to access the services inside of my servlets, filters, etc by using annotations.

Implementation

For achieving #1 (the first level of integration) we need to consider the following scenarios.

  • Tuscany modules should be deployable in Apache Geronimo.
    For this we need to write a geronimo-plugin with a deployer that can handle tuscany modules. On how to write a geronimo-plugin please refer the link http://cwiki.apache.org/GMOxDOC11/advanced-plugin-sample.html.
    Initially we will be using a server wide SCADomain instance. The org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain implementation or a derived class will be used and exposed as a GBean in geronimo so that all the other configurations can lookup the domain via GBean lookup and add their composites.
  • Tuscany modules should use the existing geronimo http infrastructure.
    Create a tuscany ServletHost extension for Geronimo. What we need to do for this is write a java class that implements the org.apache.tuscany.sca.http.ServletHost interface. This interface has 2 methods namely void addServletMapping(String uri, Servlet servlet) throws ServletMappingException and Servlet removeServletMapping(String uri) throws ServletMappingException.We need to implement these methods such that they will add the servlet passed to the context corresponding to the URI in Geronimo. If there is no context then a new context must be created and the servlet should be added to that context. We shouldn't be able to add to contexts of other web applications. Here also geronimo can have either Jetty or Tomcat as the web container. Initially the idea is to just support Tomcat.
  • Tuscany modules should use the existing geronimo rmi infrastructure.
    This may need a geronimo specific RMI host to be plugged in instead of the default one in tuscany.

Initially this is what we will be trying to achieve.

Things that need to be investigated further

  1. How to implement #2 and #3
    For #3 we may need to extend tuscany to have a new implementation.web implementation type that can consume the services exposed by other SCA Components.
  2. Having multiple SCADomains in the same server instance
  3. Using Distributed Domains
  4. Better integration of the bindings to take care of using geronimo infrastructure

Current Status

We have made some progress and here are the details:

  • Switched to version 2.0.1 of Geronimo and 1.0-incubating of Tuscany.
  • We have a plugin that has an EmbeddedSCADomain and a deployer that allows to deploy tuscany jars into Geronimo 2.0.1 server.  Contribution from multiple tuscany jars gets added to a single EmbeddedSCADomain.
  • We have created a ServletHost extension for Geronimo, so that the embedded Tomcat/Jetty server is used (instead of starting a new Tomcat/Jetty server) when webservice bindings are used.
  • We have a sample HelloWorldService tuscany jar that when deployed in Geronimo makes the service available as a WebService.
  • We have a sample SimpleBigBank-new that uses a reference ejb binding and makes the service available as a WebService. Note: Sample may need to be updated.
  • interface.wsdl element is not working.  Using interface.java is a work around we have for now. Note: Needs verification.
  • The code is in Geronimo Plugins at https://svn.apache.org/repos/asf/geronimo/plugins/tuscany.
  • Samples are available in Geronimo Sandbox at https://svn.apache.org/repos/asf/geronimo/sandbox/tuscany-integration

References

There are three mail chains providing more info
chain1
chain2
chain3

The OSOA J2EE Integration Whitepaper speaks about J2EE SCA integration concepts
OSOA J2EE Integration Whitepaper