You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/03/08 19:07:04 UTC
svn commit: r516125 - in
/incubator/openejb/trunk/openejb3/container/openejb-core/src:
main/java/org/apache/openejb/config/ main/java/org/apache/openejb/core/mdb/
main/resources/META-INF/org.apache.openejb/
test/java/org/apache/openejb/assembler/classic/
Author: dain
Date: Thu Mar 8 10:07:03 2007
New Revision: 516125
URL: http://svn.apache.org/viewvc?view=rev&rev=516125
Log:
Match mdb container based on message listener type
Added:
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/MdbConfigTest.java
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?view=diff&rev=516125&r1=516124&r2=516125
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Thu Mar 8 10:07:03 2007
@@ -487,7 +487,7 @@
}
}
- if (mdb.getMessagingType() != null) {
+ if (mdb.getMessagingType() == null) {
List<Class<?>> interfaces = new ArrayList<Class<?>>();
for (Class<?> interfce : clazz.getInterfaces()) {
String name = interfce.getName();
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?view=diff&rev=516125&r1=516124&r2=516125
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Thu Mar 8 10:07:03 2007
@@ -23,6 +23,7 @@
import org.apache.openejb.assembler.classic.ResourceInfo;
import org.apache.openejb.config.sys.Connector;
import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.MessageDrivenBean;
import org.apache.openejb.jee.jpa.unit.Persistence;
import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
import org.apache.openejb.jee.oejb3.EjbDeployment;
@@ -114,7 +115,7 @@
if (ejbDeployment.getContainerId() == null) {
Class<? extends ContainerInfo> containerInfoType = ConfigurationFactory.getContainerInfoType(bean.getType());
- String containerId = getUsableContainer(containerInfoType);
+ String containerId = getUsableContainer(containerInfoType, bean.getBean());
if (containerId == null){
if (autoCreateContainers) {
@@ -298,10 +299,19 @@
return service;
}
- private String getUsableContainer(Class<? extends ContainerInfo> containerInfoType) {
+ private String getUsableContainer(Class<? extends ContainerInfo> containerInfoType, Object bean) {
for (ContainerInfo containerInfo : configFactory.getContainerInfos()) {
if (containerInfo.getClass().equals(containerInfoType)){
- return containerInfo.id;
+ // MDBs must match message listener interface type
+ if (bean instanceof MessageDrivenBean) {
+ MessageDrivenBean messageDrivenBean = (MessageDrivenBean) bean;
+ String messagingType = messageDrivenBean.getMessagingType();
+ if (containerInfo.properties.get("MessageListenerInterface").equals(messagingType)) {
+ return containerInfo.id;
+ }
+ } else {
+ return containerInfo.id;
+ }
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java?view=diff&rev=516125&r1=516124&r2=516125
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java Thu Mar 8 10:07:03 2007
@@ -53,17 +53,19 @@
private final TransactionManager transactionManager;
private final SecurityService securityService;
private final ResourceAdapter resourceAdapter;
+ private final Class messageListenerInterface;
private final Class activationSpecClass;
private final int instanceLimit;
private final Map<Object, DeploymentInfo> deployments = new HashMap<Object, DeploymentInfo>();
private final Map<Object, EndpointFactory> endpointFactories = new HashMap<Object, EndpointFactory>();
- public MdbContainer(Object containerID, TransactionManager transactionManager, SecurityService securityService, ResourceAdapter resourceAdapter, Class activationSpecClass, int instanceLimit) {
+ public MdbContainer(Object containerID, TransactionManager transactionManager, SecurityService securityService, ResourceAdapter resourceAdapter, Class messageListenerInterface, Class activationSpecClass, int instanceLimit) {
this.containerID = containerID;
this.transactionManager = transactionManager;
this.securityService = securityService;
this.resourceAdapter = resourceAdapter;
+ this.messageListenerInterface = messageListenerInterface;
this.activationSpecClass = activationSpecClass;
this.instanceLimit = instanceLimit;
}
@@ -86,6 +88,12 @@
public void deploy(DeploymentInfo deploymentInfo) throws OpenEJBException {
Object deploymentId = deploymentInfo.getDeploymentID();
+ if (!deploymentInfo.getMdbInterface().equals(messageListenerInterface)) {
+ throw new OpenEJBException("Deployment '" + deploymentId + "' has message listener interface " +
+ deploymentInfo.getMdbInterface().getName() + " but this MDB container only supports " +
+ messageListenerInterface);
+ }
+
// create the activation spec
ActivationSpec activationSpec = createActivationSpec(deploymentInfo);
@@ -117,11 +125,6 @@
}
- public void undeploy(DeploymentInfo deploymentInfo) throws OpenEJBException {
- // todo
- }
-
-
private ActivationSpec createActivationSpec(DeploymentInfo deploymentInfo)throws OpenEJBException {
try {
// initialize the object recipe
@@ -146,6 +149,11 @@
} catch (Exception e) {
throw new OpenEJBException("Unable to create activation spec", e);
}
+ }
+
+ public void undeploy(DeploymentInfo deploymentInfo) throws OpenEJBException {
+ Object deploymentId = deploymentInfo.getDeploymentID();
+ undeploy(deploymentId);
}
public void undeploy(Object deploymentId) throws OpenEJBException {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?view=diff&rev=516125&r1=516124&r2=516125
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Thu Mar 8 10:07:03 2007
@@ -174,12 +174,16 @@
<ServiceProvider
id="Default MDB Container"
provider-type="Container"
- constructor="id, transactionManager, securityService, ResourceAdapter, ActivationSpecClass, InstanceLimit"
+ constructor="id, transactionManager, securityService, ResourceAdapter, MessageListenerInterface, ActivationSpecClass, InstanceLimit"
class-name="org.apache.openejb.core.mdb.MdbContainer">
# The resource adapter delivers messages to the container
ResourceAdapter Default JMS Resource Adapter
+
+ # Specifies the message listener interface handled by this container
+
+ MessageListenerInterface javax.jms.MessageListener
# Specifies the activation spec class
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/MdbConfigTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/MdbConfigTest.java?view=auto&rev=516125
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/MdbConfigTest.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/MdbConfigTest.java Thu Mar 8 10:07:03 2007
@@ -0,0 +1,90 @@
+/**
+ *
+ * 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.openejb.assembler.classic;
+
+import junit.framework.TestCase;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.config.sys.Resource;
+import org.apache.openejb.jee.ActivationConfig;
+import org.apache.openejb.jee.ActivationConfigProperty;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.MessageDrivenBean;
+import org.apache.openejb.test.mdb.BasicMdbBean;
+
+import javax.jms.MessageListener;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class MdbConfigTest extends TestCase {
+ public void test() throws Exception {
+ ConfigurationFactory config = new ConfigurationFactory();
+ Assembler assembler = new Assembler();
+
+ // System services
+ assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+ assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+ assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+ // JMS
+ Resource resource = new Resource();
+ resource.setId("Default JMS Resource Adapter");
+ resource.setProvider("Default JMS Resource Adapter");
+ assembler.createResource(config.configureService(resource, ResourceInfo.class));
+
+ // containers
+ MdbContainerInfo mdbContainerInfo = config.configureService(MdbContainerInfo.class);
+ assembler.createContainer(mdbContainerInfo);
+
+ // add fake mdb container
+ ContainerInfo containerInfo = config.configureService(MdbContainerInfo.class);
+ containerInfo.id = "FakeContainer";
+ containerInfo.displayName = "Fake Container";
+ containerInfo.properties.setProperty("MessageListenerInterface", "java.lang.Runnable");
+ assembler.createContainer(containerInfo);
+
+ // generate ejb jar application
+ EjbJar ejbJar = new EjbJar();
+ ejbJar.addEnterpriseBean(createJaxbMdb("JmsMdb", BasicMdbBean.class.getName(), MessageListener.class.getName()));
+ ejbJar.addEnterpriseBean(createJaxbMdb("FakeMdb", FakeMdb.class.getName(), Runnable.class.getName()));
+ EjbModule ejbModule = new EjbModule(getClass().getClassLoader(), "FakeEjbJar", "fake.jar", ejbJar, null);
+
+ // configure and deploy it
+ EjbJarInfo info = config.configureApplication(ejbModule);
+ assembler.createEjbJar(info);
+ }
+
+ public static class FakeMdb implements Runnable {
+ public void run() {
+ }
+ }
+
+ private MessageDrivenBean createJaxbMdb(String ejbName, String mdbClass, String messageListenerInterface) {
+ MessageDrivenBean bean = new MessageDrivenBean(ejbName);
+ bean.setEjbClass(mdbClass);
+ bean.setMessagingType(messageListenerInterface);
+
+ ActivationConfig activationConfig = new ActivationConfig();
+ activationConfig.getActivationConfigProperty().add(new ActivationConfigProperty("destination", ejbName));
+ activationConfig.getActivationConfigProperty().add(new ActivationConfigProperty("destinationType", "javax.jms.Queue"));
+ bean.setActivationConfig(activationConfig);
+
+ return bean;
+ }
+}