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.
tuscany-host-rmi seems to be upto the task so no change may be required.
Initially this is what we will be trying to achieve.
Things that need to be investigated further
- 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. - Having multiple SCADomains in the same server instance
- Using Distributed Domains
- Better integration of the bindings to take care of using geronimo infrastructure
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