summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--branches/sca-java-1.x/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java6
-rw-r--r--branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/EJBImplementationGenerated.java44
-rw-r--r--branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEExtension.java10
-rw-r--r--branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEOptionalExtension.java12
-rw-r--r--branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java67
-rw-r--r--branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java90
-rw-r--r--branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java94
-rw-r--r--branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/JEEImplementation.java4
-rw-r--r--branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/impl/JEEImplementationImpl.java6
-rw-r--r--branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java63
10 files changed, 324 insertions, 72 deletions
diff --git a/branches/sca-java-1.x/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java b/branches/sca-java-1.x/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
index c4528e0bf2..2297b06a2d 100644
--- a/branches/sca-java-1.x/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
+++ b/branches/sca-java-1.x/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
@@ -56,6 +56,7 @@ import org.apache.tuscany.sca.assembly.Property;
import org.apache.tuscany.sca.assembly.Reference;
import org.apache.tuscany.sca.assembly.Service;
import org.apache.tuscany.sca.assembly.Wire;
+import org.apache.tuscany.sca.assembly.impl.CompositeImpl;
import org.apache.tuscany.sca.contribution.Artifact;
import org.apache.tuscany.sca.contribution.ContributionFactory;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
@@ -682,7 +683,10 @@ public class CompositeProcessor extends BaseAssemblyProcessor implements StAXArt
// Write the component implementation
Implementation implementation = component.getImplementation();
- if (implementation instanceof Composite) {
+ // check that we really have CompositeImpl and treat this specially. Some
+ // extension extend CompositeImpl and we want these to be treated by the extension
+ // processor.
+ if ((implementation != null ) && (implementation.getClass().equals(CompositeImpl.class))) {
writeStart(writer, IMPLEMENTATION_COMPOSITE, new XAttr(NAME, ((Composite)implementation).getName()));
//write extended attributes
diff --git a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/EJBImplementationGenerated.java b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/EJBImplementationGenerated.java
new file mode 100644
index 0000000000..f486b63904
--- /dev/null
+++ b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/EJBImplementationGenerated.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee;
+
+import org.apache.tuscany.sca.assembly.Implementation;
+
+
+
+/**
+ * The model representing an EJB implementation in an SCA assembly model.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface EJBImplementationGenerated extends Implementation {
+
+ /**
+ * Returns the EJB link URI.
+ * @return the EJB link URI
+ */
+ String getEJBLink();
+
+ /**
+ * Sets the EJB link URI.
+ * @param ejbLink the EJB link URI
+ */
+ void setEJBLink(String ejbLink);
+
+}
diff --git a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEExtension.java b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEExtension.java
index a78448521f..7b7d1f161f 100644
--- a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEExtension.java
+++ b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEExtension.java
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.contribution.jee;
import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
/**
* Compute componentType with EJB3 business interfaces translating into SCA services.
@@ -26,7 +27,12 @@ import org.apache.tuscany.sca.assembly.ComponentType;
* @version $Rev$ $Date$
*/
public interface JavaEEExtension {
+ // The EJBImplementation model is a straight implementation so we deal in
+ // component types
ComponentType createImplementationEjbComponentType(EjbModuleInfo ejbModule, String ejbName);
- ComponentType createImplementationJeeComponentType(EjbModuleInfo ejbModule);
- ComponentType createImplementationJeeComponentType(JavaEEApplicationInfo appInfo);
+
+ // The JEEImplemenation model is a composite and so we have to fluff
+ // up the composite contents to match the JEE artifact
+ void createImplementationJeeComposite(EjbModuleInfo ejbModule, Composite composite);
+ void createImplementationJeeComposite(JavaEEApplicationInfo appInfo, Composite composite);
}
diff --git a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEOptionalExtension.java b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEOptionalExtension.java
index 3461b149e4..50a449ce78 100644
--- a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEOptionalExtension.java
+++ b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEOptionalExtension.java
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.contribution.jee;
import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
/**
* Compute componentType with Remote EJB references translating into SCA references and env-entries translating into
@@ -27,9 +28,14 @@ import org.apache.tuscany.sca.assembly.ComponentType;
* @version $Rev$ $Date$
*/
public interface JavaEEOptionalExtension {
+ // The EJBImplementation and WEBImplemenation models are straight implementations so
+ // we deals in component types
ComponentType createImplementationWebComponentType(WebModuleInfo webModule);
ComponentType createImplementationEjbComponentType(EjbModuleInfo ejbModule, String ejbName);
- ComponentType createImplementationJeeComponentType(WebModuleInfo webModule);
- ComponentType createImplementationJeeComponentType(EjbModuleInfo ejbModule);
- ComponentType createImplementationJeeComponentType(JavaEEApplicationInfo appInfo);
+
+ // The JEEImplemenation model is a composite and so we have to fluff
+ // up the composite contents to match the JEE artifact
+ void createImplementationJeeComposite(WebModuleInfo webModule, Composite composite);
+ void createImplementationJeeComposite(EjbModuleInfo ejbModule, Composite composite);
+ void createImplementationJeeComposite(JavaEEApplicationInfo appInfo, Composite composite);
}
diff --git a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java
new file mode 100644
index 0000000000..cd23887312
--- /dev/null
+++ b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.assembly.builder.ComponentPreProcessor;
+import org.apache.tuscany.sca.assembly.impl.ImplementationImpl;
+import org.apache.tuscany.sca.contribution.jee.EJBImplementationGenerated;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+
+
+/**
+ * The model representing an EJB implementation in an SCA assembly model.
+ *
+ * @version $Rev$ $Date$
+ */
+class EJBImplementationGeneratedImpl extends ImplementationImpl implements EJBImplementationGenerated {
+
+ private String ejbLink;
+
+ /**
+ * Constructs a new EJB implementation.
+ */
+ EJBImplementationGeneratedImpl() {
+ super();
+ }
+
+ @Override
+ public ConstrainingType getConstrainingType() {
+ // The EJB implementation does not support constrainingTypes
+ return null;
+ }
+
+ public String getEJBLink() {
+ return ejbLink;
+ }
+
+ @Override
+ public void setConstrainingType(ConstrainingType constrainingType) {
+ // The EJB implementation does not support constrainingTypes
+ }
+
+ public void setEJBLink(String ejbLink) {
+ this.ejbLink = ejbLink;
+ }
+
+}
diff --git a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java
index 8d8d0f4c35..c4e180bf82 100644
--- a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java
+++ b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java
@@ -23,9 +23,14 @@ import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.CompositeService;
import org.apache.tuscany.sca.assembly.Service;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.jee.EJBImplementationGenerated;
import org.apache.tuscany.sca.contribution.jee.EjbInfo;
import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
@@ -97,14 +102,16 @@ public class JavaEEExtensionImpl implements JavaEEExtension {
return componentType;
}
- public ComponentType createImplementationJeeComponentType(EjbModuleInfo ejbModule) {
- ComponentType componentType = assemblyFactory.createComponentType();
-
+ public void createImplementationJeeComposite(EjbModuleInfo ejbModule, Composite composite) {
+
for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo.beanName);
+
if(ejbInfo.ejbType.compareTo(EjbType.MESSAGE_DRIVEN) != 0) {
for(Class<?> intf : ejbInfo.businessRemote) {
- Service service = assemblyFactory.createComponentService();
+ ComponentService service = assemblyFactory.createComponentService();
String intfName = intf.getName();
String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
serviceName = ejbInfo.beanName+"_"+serviceName;
@@ -117,11 +124,12 @@ public class JavaEEExtensionImpl implements JavaEEExtension {
e.printStackTrace();
}
service.setInterfaceContract(ic);
- componentType.getServices().add(service);
+
+ addComponentService(composite, component, service);
}
for(Class<?> intf : ejbInfo.businessLocal) {
- Service service = assemblyFactory.createComponentService();
+ ComponentService service = assemblyFactory.createComponentService();
String intfName = intf.getName();
String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
serviceName = ejbInfo.beanName+"_"+serviceName;
@@ -136,25 +144,25 @@ public class JavaEEExtensionImpl implements JavaEEExtension {
service.setInterfaceContract(ic);
service.getRequiredIntents().add(EJB_INTENT);
- componentType.getServices().add(service);
+ addComponentService(composite, component, service);
}
}
}
-
- return componentType;
}
-
- public ComponentType createImplementationJeeComponentType(JavaEEApplicationInfo appInfo) {
- ComponentType componentType = assemblyFactory.createComponentType();
+
+ public void createImplementationJeeComposite(JavaEEApplicationInfo appInfo, Composite composite) {
for(Map.Entry<String, EjbModuleInfo> entry0 : appInfo.getEjbModuleInfos().entrySet()) {
EjbModuleInfo ejbModule = entry0.getValue();
for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo.beanName);
+
if(ejbInfo.ejbType.compareTo(EjbType.MESSAGE_DRIVEN) != 0) {
for(Class<?> intf : ejbInfo.businessRemote) {
- Service service = assemblyFactory.createComponentService();
+ ComponentService service = assemblyFactory.createComponentService();
String intfName = intf.getName();
String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
serviceName = ejbInfo.mappedName+"_"+serviceName;
@@ -167,11 +175,12 @@ public class JavaEEExtensionImpl implements JavaEEExtension {
e.printStackTrace();
}
service.setInterfaceContract(ic);
- componentType.getServices().add(service);
+
+ addComponentService(composite, component, service);
}
for(Class<?> intf : ejbInfo.businessLocal) {
- Service service = assemblyFactory.createComponentService();
+ ComponentService service = assemblyFactory.createComponentService();
String intfName = intf.getName();
String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
serviceName = ejbInfo.mappedName+"_"+serviceName;
@@ -186,12 +195,59 @@ public class JavaEEExtensionImpl implements JavaEEExtension {
service.setInterfaceContract(ic);
service.getRequiredIntents().add(EJB_INTENT);
- componentType.getServices().add(service);
+ addComponentService(composite, component, service);
}
}
}
}
+ }
+
+ /**
+ * We are fluffing up the JEEImplemention composite to represented the components
+ * in the JEE archive. Given the JEEimplemenation composite find a named component
+ * it if already exists or create it if it doesn't.
+ *
+ * @param composite
+ * @param componentName
+ * @return
+ */
+ private Component findComponent(Composite composite, String componentName){
+ Component component = null;
- return componentType;
+ for (Component tmpComponent : composite.getComponents()){
+ if (tmpComponent.getName().equals(componentName)){
+ component = tmpComponent;
+ break;
+ }
+ }
+
+ if (component == null){
+ component = assemblyFactory.createComponent();
+ component.setName(componentName);
+ composite.getComponents().add(component);
+
+ EJBImplementationGenerated implementation = new EJBImplementationGeneratedImpl();
+ component.setImplementation(implementation);
+ }
+
+ return component;
+ }
+
+ /**
+ * Add a component service and fluff up a composite service to match
+ *
+ * @param composite
+ * @param component
+ * @param service
+ */
+ private void addComponentService(Composite composite, Component component, ComponentService service){
+ component.getImplementation().getServices().add(service);
+
+ CompositeService compositeService = assemblyFactory.createCompositeService();
+ composite.getServices().add(compositeService);
+
+ compositeService.setName(service.getName());
+ compositeService.setPromotedComponent(component);
+ compositeService.setPromotedService(service);
}
}
diff --git a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java
index f02b74bd8d..ad7e54b84f 100644
--- a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java
+++ b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java
@@ -24,11 +24,18 @@ import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.CompositeReference;
+import org.apache.tuscany.sca.assembly.CompositeService;
import org.apache.tuscany.sca.assembly.Multiplicity;
import org.apache.tuscany.sca.assembly.Property;
import org.apache.tuscany.sca.assembly.Reference;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.jee.EJBImplementationGenerated;
import org.apache.tuscany.sca.contribution.jee.EjbInfo;
import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
import org.apache.tuscany.sca.contribution.jee.EjbReferenceInfo;
@@ -167,15 +174,16 @@ public class JavaEEOptionalExtensionImpl implements JavaEEOptionalExtension {
return componentType;
}
- public ComponentType createImplementationJeeComponentType(WebModuleInfo webModule) {
- ComponentType componentType = assemblyFactory.createComponentType();
+ public void createImplementationJeeComposite(WebModuleInfo webModule, Composite composite) {
+
+ Component component = findComponent(composite, webModule.getModuleName());
// Process Remote EJB References
for(Map.Entry<String, EjbReferenceInfo> entry : webModule.getEjbReferences().entrySet()) {
EjbReferenceInfo ejbRef = entry.getValue();
String referenceName = entry.getKey();
referenceName = referenceName.replace("/", "_");
- Reference reference = assemblyFactory.createComponentReference();
+ ComponentReference reference = assemblyFactory.createComponentReference();
reference.setName(referenceName);
InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
try {
@@ -187,24 +195,25 @@ public class JavaEEOptionalExtensionImpl implements JavaEEOptionalExtension {
reference.setInterfaceContract(ic);
reference.getRequiredIntents().add(EJB_INTENT);
reference.setMultiplicity(Multiplicity.ZERO_ONE);
- componentType.getReferences().add(reference);
+
+ addComponentReference(composite, component, reference);
}
-
- return componentType;
}
- public ComponentType createImplementationJeeComponentType(EjbModuleInfo ejbModule) {
- ComponentType componentType = assemblyFactory.createComponentType();
+ public void createImplementationJeeComposite(EjbModuleInfo ejbModule, Composite composite) {
for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo.beanName);
+
// Process Remote EJB References
for(Map.Entry<String, EjbReferenceInfo> entry1 : ejbInfo.ejbReferences.entrySet()) {
EjbReferenceInfo ejbRef = entry1.getValue();
String referenceName = ejbRef.referenceName;
referenceName = referenceName.replace("/", "_");
referenceName = ejbInfo.beanName + "_" + referenceName;
- Reference reference = assemblyFactory.createComponentReference();
+ ComponentReference reference = assemblyFactory.createComponentReference();
reference.setName(referenceName);
InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
try {
@@ -216,28 +225,30 @@ public class JavaEEOptionalExtensionImpl implements JavaEEOptionalExtension {
reference.setInterfaceContract(ic);
reference.getRequiredIntents().add(EJB_INTENT);
reference.setMultiplicity(Multiplicity.ZERO_ONE);
- componentType.getReferences().add(reference);
+
+ addComponentReference(composite, component, reference);
}
}
-
- return componentType;
}
- public ComponentType createImplementationJeeComponentType(JavaEEApplicationInfo appInfo) {
- ComponentType componentType = assemblyFactory.createComponentType();
+
+ public void createImplementationJeeComposite(JavaEEApplicationInfo appInfo, Composite composite) {
for(Map.Entry<String, EjbModuleInfo> entry0 : appInfo.getEjbModuleInfos().entrySet()) {
EjbModuleInfo ejbModule = entry0.getValue();
for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo.beanName);
+
// Process Remote EJB References
for(Map.Entry<String, EjbReferenceInfo> entry1 : ejbInfo.ejbReferences.entrySet()) {
EjbReferenceInfo ejbRef = entry1.getValue();
String referenceName = ejbRef.referenceName;
referenceName = referenceName.replace("/", "_");
referenceName = ejbInfo.beanName + "_" + referenceName;
- Reference reference = assemblyFactory.createComponentReference();
+ ComponentReference reference = assemblyFactory.createComponentReference();
reference.setName(referenceName);
InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
try {
@@ -249,11 +260,58 @@ public class JavaEEOptionalExtensionImpl implements JavaEEOptionalExtension {
reference.setInterfaceContract(ic);
reference.getRequiredIntents().add(EJB_INTENT);
reference.setMultiplicity(Multiplicity.ZERO_ONE);
- componentType.getReferences().add(reference);
+
+ addComponentReference(composite, component, reference);
}
}
}
+ }
+
+ /**
+ * We are fluffing up the JEEImplemention composite to represented the components
+ * in the JEE archive. Given the JEEimplemenation composite find a named component
+ * it if already exists or create it if it doesn't.
+ *
+ * @param composite
+ * @param componentName
+ * @return
+ */
+ private Component findComponent(Composite composite, String componentName){
+ Component component = null;
- return componentType;
- }
+ for (Component tmpComponent : composite.getComponents()){
+ if (tmpComponent.getName().equals(componentName)){
+ component = tmpComponent;
+ break;
+ }
+ }
+
+ if (component == null){
+ component = assemblyFactory.createComponent();
+ component.setName(componentName);
+ composite.getComponents().add(component);
+
+ EJBImplementationGenerated implementation = new EJBImplementationGeneratedImpl();
+ component.setImplementation(implementation);
+ }
+
+ return component;
+ }
+
+ /**
+ * Add a component reference and fluff up a composite reference to match
+ *
+ * @param composite
+ * @param component
+ * @param service
+ */
+ private void addComponentReference(Composite composite, Component component, ComponentReference reference){
+ component.getImplementation().getReferences().add(reference);
+
+ CompositeReference compositeReference = assemblyFactory.createCompositeReference();
+ composite.getReferences().add(compositeReference);
+
+ compositeReference.setName(reference.getName());
+ compositeReference.getPromotedReferences().add(reference);
+ }
}
diff --git a/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/JEEImplementation.java b/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/JEEImplementation.java
index 90b71223b4..779ac976ee 100644
--- a/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/JEEImplementation.java
+++ b/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/JEEImplementation.java
@@ -18,14 +18,14 @@
*/
package org.apache.tuscany.sca.implementation.jee;
-import org.apache.tuscany.sca.assembly.Implementation;
+import org.apache.tuscany.sca.assembly.Composite;
/**
* The model representing a JEE implementation in an SCA assembly model.
*
* @version $Rev$ $Date$
*/
-public interface JEEImplementation extends Implementation {
+public interface JEEImplementation extends Composite {
/**
* Returns the archive.
diff --git a/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/impl/JEEImplementationImpl.java b/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/impl/JEEImplementationImpl.java
index 4d16dbf35d..39f3c12816 100644
--- a/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/impl/JEEImplementationImpl.java
+++ b/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/impl/JEEImplementationImpl.java
@@ -19,7 +19,7 @@
package org.apache.tuscany.sca.implementation.jee.impl;
import org.apache.tuscany.sca.assembly.ConstrainingType;
-import org.apache.tuscany.sca.assembly.impl.ImplementationImpl;
+import org.apache.tuscany.sca.assembly.impl.CompositeImpl;
import org.apache.tuscany.sca.implementation.jee.JEEImplementation;
/**
@@ -27,7 +27,7 @@ import org.apache.tuscany.sca.implementation.jee.JEEImplementation;
*
* @version $Rev$ $Date$
*/
-public class JEEImplementationImpl extends ImplementationImpl implements JEEImplementation {
+public class JEEImplementationImpl extends CompositeImpl implements JEEImplementation {
private String archive;
@@ -56,4 +56,6 @@ public class JEEImplementationImpl extends ImplementationImpl implements JEEImpl
public void setArchive(String archive) {
this.archive = archive;
}
+
+
}
diff --git a/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java b/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java
index 072394df75..53bc9fab32 100644
--- a/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java
+++ b/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java
@@ -185,21 +185,19 @@ public class JEEImplementationProcessor extends BaseStAXArtifactProcessor implem
unresolved.setUri(URI.create("WEB-INF/web.composite"));
ModelObject resolved = resolver.resolveModel(ModelObject.class, unresolved);
if(resolved != unresolved) {
- // Found web composite
+ // Found web composite so the war itself must have been the contribution
Composite appComposite = (Composite)resolved.getObject();
- implementation.getServices().addAll(appComposite.getServices());
- implementation.getReferences().addAll(appComposite.getReferences());
- implementation.getProperties().addAll(appComposite.getProperties());
+ mergeCompositeInfo(appComposite, implementation);
}
// TODO: Obtain includeDefaults value from the composite
boolean includeDefaults = false;
if(includeDefaults || resolved == unresolved) {
+ // there is either no application composite or we are ignoring it as the
+ // war is nested inside another contribution
if(jeeOptionalExtension != null) {
- ComponentType ct = jeeOptionalExtension.createImplementationJeeComponentType((WebModuleInfo)moduleInfo);
- implementation.getReferences().addAll(ct.getReferences());
- implementation.getProperties().addAll(ct.getProperties());
+ jeeOptionalExtension.createImplementationJeeComposite((WebModuleInfo)moduleInfo, implementation);
}
}
} else if(moduleInfo instanceof EjbModuleInfo) {
@@ -208,11 +206,9 @@ public class JEEImplementationProcessor extends BaseStAXArtifactProcessor implem
unresolved.setUri(URI.create("META-INF/ejb-jar.composite"));
ModelObject resolved = resolver.resolveModel(ModelObject.class, unresolved);
if(resolved != unresolved) {
- // Found ejb-jar composite
+ // Found ejb-jar composite so the ejb jar itself must have been the contribution
Composite appComposite = (Composite)resolved.getObject();
- implementation.getServices().addAll(appComposite.getServices());
- implementation.getReferences().addAll(appComposite.getReferences());
- implementation.getProperties().addAll(appComposite.getProperties());
+ mergeCompositeInfo(appComposite, implementation);
}
// TODO: Obtain includeDefaults value from the composite
@@ -220,14 +216,11 @@ public class JEEImplementationProcessor extends BaseStAXArtifactProcessor implem
if(includeDefaults || resolved == unresolved) {
if(jeeExtension != null) {
- ComponentType ct = jeeExtension.createImplementationJeeComponentType((EjbModuleInfo)moduleInfo);
- implementation.getServices().addAll(ct.getServices());
+ jeeExtension.createImplementationJeeComposite((EjbModuleInfo)moduleInfo, implementation);
+
}
if(jeeOptionalExtension != null) {
- ComponentType ct = jeeOptionalExtension.createImplementationJeeComponentType((EjbModuleInfo)moduleInfo);
- implementation.getServices().addAll(ct.getServices());
- implementation.getReferences().addAll(ct.getReferences());
- implementation.getProperties().addAll(ct.getProperties());
+ jeeOptionalExtension.createImplementationJeeComposite((EjbModuleInfo)moduleInfo, implementation);
}
}
} else if(moduleInfo instanceof JavaEEApplicationInfo) {
@@ -246,10 +239,9 @@ public class JEEImplementationProcessor extends BaseStAXArtifactProcessor implem
}
if(appComposite != null) {
- // Found application composite
- implementation.getServices().addAll(appComposite.getServices());
- implementation.getReferences().addAll(appComposite.getReferences());
- implementation.getProperties().addAll(appComposite.getProperties());
+ // Found application composite so copy it's details across into
+ // the implementation (which is itself a composite)
+ mergeCompositeInfo(appComposite, implementation);
}
// TODO: Obtain includeDefaults value from the composite
@@ -257,20 +249,37 @@ public class JEEImplementationProcessor extends BaseStAXArtifactProcessor implem
if(includeDefaults || appComposite == null) {
if(jeeExtension != null) {
- ComponentType ct = jeeExtension.createImplementationJeeComponentType((JavaEEApplicationInfo)moduleInfo);
- implementation.getServices().addAll(ct.getServices());
+ jeeExtension.createImplementationJeeComposite((JavaEEApplicationInfo)moduleInfo, implementation);
}
if(jeeOptionalExtension != null) {
- ComponentType ct = jeeOptionalExtension.createImplementationJeeComponentType((JavaEEApplicationInfo)moduleInfo);
- implementation.getServices().addAll(ct.getServices());
- implementation.getReferences().addAll(ct.getReferences());
- implementation.getProperties().addAll(ct.getProperties());
+ jeeOptionalExtension.createImplementationJeeComposite((JavaEEApplicationInfo)moduleInfo, implementation);
}
}
}
}
implementation.setUnresolved(false);
}
+
+ private void mergeCompositeInfo(Composite fromComposite, Composite intoComposite){
+ intoComposite.getApplicablePolicySets().addAll(fromComposite.getApplicablePolicySets());
+ intoComposite.getAttributeExtensions().addAll(fromComposite.getAttributeExtensions());
+ intoComposite.setAutowire(fromComposite.getAutowire());
+ intoComposite.getComponents().addAll(fromComposite.getComponents());
+ intoComposite.setConstrainingType(fromComposite.getConstrainingType());
+ intoComposite.getExtensions().addAll(fromComposite.getExtensions());
+ intoComposite.setLocal(fromComposite.isLocal());
+ intoComposite.getIncludes().addAll(fromComposite.getIncludes());
+ intoComposite.setName(fromComposite.getName());
+ intoComposite.getPolicySets().addAll(fromComposite.getPolicySets());
+ intoComposite.getProperties().addAll(fromComposite.getProperties());
+ intoComposite.getReferences().addAll(fromComposite.getReferences());
+ intoComposite.getRequiredIntents().addAll(fromComposite.getRequiredIntents());
+ intoComposite.getServices().addAll(fromComposite.getServices());
+ intoComposite.setType(fromComposite.getType());
+ intoComposite.setUnresolved(fromComposite.isUnresolved());
+ intoComposite.setURI(fromComposite.getURI());
+ intoComposite.getWires().addAll(fromComposite.getWires());
+ }
public void write(JEEImplementation implementation, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {