You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/09/13 01:32:43 UTC

svn commit: r1384157 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb...

Author: rmannibucau
Date: Wed Sep 12 23:32:42 2012
New Revision: 1384157

URL: http://svn.apache.org/viewvc?rev=1384157&view=rev
Log:
TOMEE-413 pojo-deployment to configure pojo (pre next-gen config)

Added:
    openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/PojoDeployment.java
      - copied, changed from r1382650, openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java
    openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/_app-ctx.xml
      - copied, changed from r1382650, openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/app-ctx.xml
    openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/openejb-jar.xml
    openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/resources.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.openejb-jar.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.resources.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.openejb-jar.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.resources.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.openejb-jar.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.resources.xml
Removed:
    openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/app-ctx.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.app-ctx.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.app-ctx.xml
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.app-ctx.xml
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ApplyOpenejbJar.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
    openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java
    openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
    openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java Wed Sep 12 23:32:42 2012
@@ -29,6 +29,7 @@ public class EjbJarInfo extends CommonIn
     public final Properties properties = new Properties();
 
     public String moduleName;
+    public String moduleId;
     public URI moduleUri;
     public String path;
 
@@ -55,6 +56,6 @@ public class EjbJarInfo extends CommonIn
     public final JndiEncInfo moduleJndiEnc = new JndiEncInfo();
 
     public BeansInfo beans;
-    public Set<String> repositories = new TreeSet<String>();
     public Set<String> mbeans = new TreeSet<String>();
+    public final List<IdPropertiesInfo> pojoConfigurations = new ArrayList<IdPropertiesInfo>();
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java Wed Sep 12 23:32:42 2012
@@ -63,6 +63,7 @@ import org.apache.openejb.jee.jpa.unit.P
 import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
 import org.apache.openejb.jee.oejb3.EjbDeployment;
 import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.jee.oejb3.PojoDeployment;
 import org.apache.openejb.jpa.integration.MakeTxLookup;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.CircularReferencesException;
@@ -180,10 +181,17 @@ class AppInfoBuilder {
                     bean.containerId = d.getContainerId();
                 }
 
+
+                for (PojoDeployment pojoDeployment : ejbModule.getOpenejbJar().getPojoDeployment()) {
+                    final IdPropertiesInfo info = new IdPropertiesInfo();
+                    info.id = pojoDeployment.getClassName();
+                    info.properties.putAll(pojoDeployment.getProperties());
+                    ejbJarInfo.pojoConfigurations.add(info);
+                }
+
                 ejbJarInfo.validationInfo = ValidatorBuilder.getInfo(ejbModule.getValidationConfig());
                 ejbJarInfo.portInfos.addAll(configureWebservices(ejbModule.getWebservices()));
                 ejbJarInfo.uniqueId = ejbModule.getUniqueId();
-                ejbJarInfo.repositories = ejbModule.getRepositories();
                 configureWebserviceSecurity(ejbJarInfo, ejbModule);
 
                 ejbJarInfos.put(ejbModule, ejbJarInfo);

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ApplyOpenejbJar.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ApplyOpenejbJar.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ApplyOpenejbJar.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ApplyOpenejbJar.java Wed Sep 12 23:32:42 2012
@@ -17,15 +17,15 @@
 package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.jee.EjbLocalRef;
+import org.apache.openejb.jee.EjbRef;
 import org.apache.openejb.jee.EnterpriseBean;
-import org.apache.openejb.jee.ResourceRef;
-import org.apache.openejb.jee.ResourceEnvRef;
 import org.apache.openejb.jee.MessageDestinationRef;
-import org.apache.openejb.jee.EjbRef;
-import org.apache.openejb.jee.EjbLocalRef;
+import org.apache.openejb.jee.ResourceEnvRef;
+import org.apache.openejb.jee.ResourceRef;
 import org.apache.openejb.jee.oejb3.EjbDeployment;
-import org.apache.openejb.jee.oejb3.ResourceLink;
 import org.apache.openejb.jee.oejb3.EjbLink;
+import org.apache.openejb.jee.oejb3.ResourceLink;
 
 import java.util.Map;
 
@@ -86,6 +86,7 @@ public class ApplyOpenejbJar implements 
             }
         }
 
+
         return appModule;
     }
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java Wed Sep 12 23:32:42 2012
@@ -142,7 +142,8 @@ public class EjbJarInfoBuilder {
         EjbJarInfo ejbJar = new EjbJarInfo();
         ejbJar.path = jar.getJarLocation();
         ejbJar.moduleName = jar.getModuleId();
-        ejbJar.moduleUri =jar.getModuleUri();
+        ejbJar.moduleUri = jar.getModuleUri();
+        ejbJar.moduleId = jar.getModuleId();
 
         ejbJar.watchedResources.addAll(jar.getWatchedResources());
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java Wed Sep 12 23:32:42 2012
@@ -18,15 +18,12 @@ package org.apache.openejb.config;
 
 import org.apache.openejb.jee.Beans;
 import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.NamedModule;
 import org.apache.openejb.jee.Webservices;
 import org.apache.openejb.jee.oejb3.OpenejbJar;
 import org.apache.xbean.finder.IAnnotationFinder;
 
 import java.io.File;
 import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicReference;
@@ -52,8 +49,6 @@ public class EjbModule extends Module im
     private ClientModule clientModule;
     private ID id;
 
-    private final Set<String> repositories = new TreeSet<String>();
-
     public EjbModule(EjbJar ejbJar) {
         this(Thread.currentThread().getContextClassLoader(), null, ejbJar, null);
     }
@@ -173,10 +168,6 @@ public class EjbModule extends Module im
         return watchedResources;
     }
 
-    public Set<String> getRepositories() {
-        return repositories;
-    }
-
     @Override
     public String toString() {
         return "EjbModule{" +

Modified: openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java (original)
+++ openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java Wed Sep 12 23:32:42 2012
@@ -36,7 +36,7 @@ import java.util.Properties;
 
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(propOrder = {"moduleName", "properties","ejbDeployment"})
+@XmlType(propOrder = {"moduleName", "properties","ejbDeployment", "pojoDeployment"})
 @XmlRootElement(name = "openejb-jar")
 public class OpenejbJar implements NamedModule {
     @XmlElement(name = "properties")
@@ -49,6 +49,9 @@ public class OpenejbJar implements Named
     @XmlElement(name = "ejb-deployment", required = true)
     protected List<EjbDeployment> ejbDeployment;
 
+    @XmlElement(name = "pojo-deployment")
+    protected List<PojoDeployment> pojoDeployment;
+
     public List<EjbDeployment> getEjbDeployment() {
         if (ejbDeployment == null) {
             ejbDeployment = new ArrayList<EjbDeployment>();
@@ -56,6 +59,13 @@ public class OpenejbJar implements Named
         return this.ejbDeployment;
     }
 
+    public List<PojoDeployment> getPojoDeployment() {
+        if (pojoDeployment == null) {
+            pojoDeployment = new ArrayList<PojoDeployment>();
+        }
+        return pojoDeployment;
+    }
+
     public Map<String,EjbDeployment> getDeploymentsById(){
         Map<String,EjbDeployment> map = new LinkedHashMap<String,EjbDeployment>();
         for (EjbDeployment deployment : getEjbDeployment()) {

Copied: openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/PojoDeployment.java (from r1382650, openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/PojoDeployment.java?p2=openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/PojoDeployment.java&p1=openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java&r1=1382650&r2=1384157&rev=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java (original)
+++ openejb/trunk/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/PojoDeployment.java Wed Sep 12 23:32:42 2012
@@ -16,8 +16,6 @@
  */
 package org.apache.openejb.jee.oejb3;
 
-import org.apache.openejb.jee.EnterpriseBean;
-
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
@@ -27,155 +25,28 @@ import javax.xml.bind.annotation.XmlRoot
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.LinkedHashMap;
-import java.util.Iterator;
 import java.util.Properties;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(propOrder = {"jndi","ejbLink", "resourceLink", "query", "properties"})
-@XmlRootElement(name = "ejb-deployment")
-public class EjbDeployment {
-
-    @XmlElement(name = "jndi", required = true)
-    protected List<Jndi> jndi;
-
-    @XmlElement(name = "ejb-link", required = true)
-    protected List<EjbLink> ejbLink;
-
-    @XmlElement(name = "resource-link", required = true)
-    protected List<ResourceLink> resourceLink;
+@XmlType(propOrder = { "properties" })
+@XmlRootElement(name = "pojo-deployment")
+public class PojoDeployment {
 
-    @XmlElement(required = true)
-    protected List<Query> query;
-
-    @XmlAttribute(name = "container-id")
-    protected String containerId;
-
-    @XmlAttribute(name = "deployment-id")
+    @XmlAttribute(name = "class-name")
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
-    protected String deploymentId;
-
-    @XmlAttribute(name = "ejb-name")
-    protected String ejbName;
+    protected String className;
 
     @XmlElement(name = "properties")
     @XmlJavaTypeAdapter(PropertiesAdapter.class)
     protected Properties properties;
-    
-    public EjbDeployment() {
-    }
-
-    public EjbDeployment(String containerId, String deploymentId, String ejbName) {
-        this.containerId = containerId;
-        this.deploymentId = deploymentId;
-        this.ejbName = ejbName;
-    }
 
-    public EjbDeployment(EnterpriseBean bean) {
-        this.deploymentId = bean.getEjbName();
-        this.ejbName = bean.getEjbName();
-    }
-
-    public List<EjbLink> getEjbLink() {
-        if (ejbLink == null) {
-            ejbLink = new ArrayList<EjbLink>();
-        }
-        return this.ejbLink;
-    }
-
-    public List<Jndi> getJndi() {
-        if (jndi == null){
-            jndi = new ArrayList<Jndi>();
-        }
-        return jndi;
-    }
-
-    public List<ResourceLink> getResourceLink() {
-        if (resourceLink == null) {
-            resourceLink = new ArrayList<ResourceLink>();
-        }
-        return this.resourceLink;
-    }
-
-    public List<Query> getQuery() {
-        if (query == null) {
-            query = new ArrayList<Query>();
-        }
-        return this.query;
-    }
-
-    public ResourceLink getResourceLink(String refName) {
-        return getResourceLinksMap().get(refName);
-    }
-
-    public Map<String,ResourceLink> getResourceLinksMap(){
-        Map<String,ResourceLink> map = new LinkedHashMap<String,ResourceLink>();
-        for (ResourceLink link : getResourceLink()) {
-            map.put(link.getResRefName(), link);
-        }
-        return map;
+    public String getClassName() {
+        return className;
     }
 
-    public EjbLink getEjbLink(String refName) {
-        return getEjbLinksMap().get(refName);
-    }
-
-    public Map<String,EjbLink> getEjbLinksMap(){
-        Map<String,EjbLink> map = new LinkedHashMap<String,EjbLink>();
-        for (EjbLink link : getEjbLink()) {
-            map.put(link.getEjbRefName(), link);
-        }
-        return map;
-    }
-
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String value) {
-        this.containerId = value;
-    }
-
-    public String getDeploymentId() {
-        return deploymentId;
-    }
-
-    public void setDeploymentId(String value) {
-        this.deploymentId = value;
-    }
-
-    public String getEjbName() {
-        return ejbName;
-    }
-
-    public void setEjbName(String value) {
-        this.ejbName = value;
-    }
-
-    public void addResourceLink(ResourceLink resourceLink) {
-        getResourceLink().add(resourceLink);
-    }
-
-    public void removeResourceLink(String resRefName) {
-        for (Iterator<ResourceLink> iterator = resourceLink.iterator(); iterator.hasNext();) {
-            ResourceLink link =  iterator.next();
-            if (resRefName.equals(link.getResRefName())) {
-                iterator.remove();
-            }
-        }
-    }
-
-    public void addEjbLink(EjbLink ejbLink) {
-        getEjbLink().add(ejbLink);
-    }
-
-    public void addQuery(Query query) {
-        getQuery().add(query);
+    public void setClassName(String className) {
+        this.className = className;
     }
 
     public Properties getProperties() {
@@ -184,8 +55,4 @@ public class EjbDeployment {
         }
         return properties;
     }
-    
-    public void addProperty(String key, String value) {
-        getProperties().setProperty(key, value);
-    }
 }

Copied: openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/_app-ctx.xml (from r1382650, openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/app-ctx.xml)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/_app-ctx.xml?p2=openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/_app-ctx.xml&p1=openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/app-ctx.xml&r1=1382650&r2=1384157&rev=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/app-ctx.xml (original)
+++ openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/_app-ctx.xml Wed Sep 12 23:32:42 2012
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- this file show the discussed config for next release, it doesn't work today -->
 <!--
 
     Licensed to the Apache Software Foundation (ASF) under one or more

Added: openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/openejb-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/openejb-jar.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/openejb-jar.xml (added)
+++ openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/openejb-jar.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
+  <ejb-deployment ejb-name="CalculatorBean"> <!-- configure the bean, values are in resources.xml -->
+    <properties>
+      cxf.jaxws.in-interceptors = wss4j
+    </properties>
+  </ejb-deployment>
+</openejb-jar>

Added: openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/resources.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/resources.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/resources.xml (added)
+++ openejb/trunk/openejb/examples/webservice-ws-with-resources-config/src/main/resources/META-INF/resources.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+<resources>
+  <!-- the interceptors -->
+  <Service id="wss4j" class-name="org.apache.openejb.server.cxf.config.WSS4JInInterceptorFactory" factory-name="create">
+    action = UsernameToken
+    passwordType = PasswordText
+    passwordCallbackClass = org.superbiz.ws.security.PasswordCallbackHandler
+  </Service>
+</resources>
\ No newline at end of file

Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java (original)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java Wed Sep 12 23:32:42 2012
@@ -109,6 +109,7 @@ public class RestDeploymentTest {
         appModule.setModuleId("rest");
         appModule.getWebModules().add(webModule);
         appModule.getEjbModules().add(new EjbModule(ejbJar));
+        appModule.getEjbModules().iterator().next().setModuleId(webModule.getModuleId());
         annotationDeployer.deploy(appModule);
 
         AppInfo appInfo = factory.configureApplication(appModule);
@@ -135,8 +136,8 @@ public class RestDeploymentTest {
         ServiceInfo serviceInfo = new ServiceInfo();
         serviceInfo.className = HttpServerFactory.class.getName();
         serviceInfo.properties = new Properties();
-        serviceInfo.properties.setProperty("port", "-1");
-        serviceInfo.properties.setProperty("bind", "foo");
+        serviceInfo.properties.setProperty("port", "4204");
+        serviceInfo.properties.setProperty("bind", "localhost");
 
         OpenEjbConfiguration configuration = new OpenEjbConfiguration();
         SystemInstance.get().setComponent(OpenEjbConfiguration.class, configuration);

Added: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.openejb-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.openejb-jar.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.openejb-jar.xml (added)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.openejb-jar.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
+  <ejb-deployment ejb-name="CustomizedService">
+    <properties>
+      cxf.jaxrs.providers = configured
+    </properties>
+  </ejb-deployment>
+</openejb-jar>

Added: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.resources.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.resources.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.resources.xml (added)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom-config.resources.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+<resources>
+  <Service class-name="org.apache.openejb.server.cxf.rs.CustomProviderWithConfigTest$ConfigurableProvider" id="configured">
+    str = done!
+  </Service>
+</resources>

Added: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.openejb-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.openejb-jar.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.openejb-jar.xml (added)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.openejb-jar.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
+  <ejb-deployment ejb-name="CustomSpecificService">
+    <properties>
+      cxf.jaxrs.providers = constant
+    </properties>
+  </ejb-deployment>
+  <ejb-deployment ejb-name="CustomService">
+    <properties>
+      cxf.jaxrs.providers = reverse
+    </properties>
+  </ejb-deployment>
+</openejb-jar>

Added: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.resources.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.resources.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.resources.xml (added)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/custom.resources.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+<resources>
+  <Service class-name="org.apache.openejb.server.cxf.rs.CustomProviderTest$ConstantProvider" id="constant" />
+  <Service class-name="org.apache.openejb.server.cxf.rs.CustomProviderTest$ReverseProvider" id="reverse" />
+</resources>

Added: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.openejb-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.openejb-jar.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.openejb-jar.xml (added)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.openejb-jar.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
+  <ejb-deployment ejb-name="RestWithExceptionMapper">
+    <properties>
+      cxf.jaxrs.providers = em
+    </properties>
+  </ejb-deployment>
+  <pojo-deployment ejb-name="org.Foo">
+    <properties>
+      providers4 = em2
+    </properties>
+  </pojo-deployment>
+</openejb-jar>

Added: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.resources.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.resources.xml?rev=1384157&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.resources.xml (added)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/resources/META-INF/em.resources.xml Wed Sep 12 23:32:42 2012
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+<resources>
+  <Service class-name="org.apache.openejb.server.cxf.rs.CustomExceptionMapperTest$EM" id="em" />
+</resources>

Modified: openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java (original)
+++ openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java Wed Sep 12 23:32:42 2012
@@ -24,6 +24,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.assembler.classic.IdPropertiesInfo;
 import org.apache.openejb.assembler.classic.ServiceInfo;
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.assembler.classic.event.AssemblerAfterApplicationCreated;
@@ -130,6 +131,7 @@ public abstract class RESTService implem
 
         boolean useApp = false;
         String appPrefix = webApp.contextRoot;
+        Collection<IdPropertiesInfo> pojoConfigurations = null; // done lazily
         for (String app : webApp.restApplications) { // normally a unique one but we support more
             appPrefix = webApp.contextRoot; // if multiple application classes reinit it
             if (!appPrefix.endsWith("/")) {
@@ -165,8 +167,9 @@ public abstract class RESTService implem
                     // no more a singleton if the ejb is not a singleton...but it is a weird case
                     deployEJB(appPrefix, restEjbs.get(o.getClass().getName()).context, additionalProviders, appInfo.services);
                 } else {
+                    pojoConfigurations = findPojoConfig(pojoConfigurations, appInfo, webApp);
                     deploySingleton(appPrefix, o, appInstance, classLoader, additionalProviders,
-                            new ServiceConfiguration(PojoUtil.findConfiguration(appInfo.pojoConfigurations, o.getClass().getName()), appInfo.services));
+                            new ServiceConfiguration(PojoUtil.findConfiguration(pojoConfigurations, o.getClass().getName()), appInfo.services));
                 }
             }
             Set<Class<?>> classes = appInstance.getClasses();
@@ -174,8 +177,9 @@ public abstract class RESTService implem
                 if (hasEjbAndIsNotAManagedBean(restEjbs, clazz.getName())) {
                     deployEJB(appPrefix, restEjbs.get(clazz.getName()).context, additionalProviders, appInfo.services);
                 } else {
+                    pojoConfigurations = findPojoConfig(pojoConfigurations, appInfo, webApp);
                     deployPojo(appPrefix, clazz, appInstance, classLoader, injections, context, owbCtx, additionalProviders,
-                            new ServiceConfiguration(PojoUtil.findConfiguration(appInfo.pojoConfigurations, clazz.getName()), appInfo.services));
+                            new ServiceConfiguration(PojoUtil.findConfiguration(pojoConfigurations, clazz.getName()), appInfo.services));
                 }
             }
 
@@ -199,9 +203,10 @@ public abstract class RESTService implem
                 } else {
                     try {
                         Class<?> loadedClazz = classLoader.loadClass(clazz);
+                        pojoConfigurations = findPojoConfig(pojoConfigurations, appInfo, webApp);
                         deployPojo(appPrefix, loadedClazz, null, classLoader, injections, context, owbCtx,
                                 additionalProviders,
-                                new ServiceConfiguration(PojoUtil.findConfiguration(appInfo.pojoConfigurations, loadedClazz.getName()), appInfo.services));
+                                new ServiceConfiguration(PojoUtil.findConfiguration(pojoConfigurations, loadedClazz.getName()), appInfo.services));
                     } catch (ClassNotFoundException e) {
                         throw new OpenEJBRestRuntimeException("can't find class " + clazz, e);
                     }
@@ -212,6 +217,17 @@ public abstract class RESTService implem
         restEjbs.clear();
     }
 
+    protected Collection<IdPropertiesInfo> findPojoConfig(final Collection<IdPropertiesInfo> pojoConfigurations, final AppInfo appInfo, final WebAppInfo webApp) {
+        if (pojoConfigurations == null) {
+            for (EjbJarInfo ejbJarInfo : appInfo.ejbJars) {
+                if (ejbJarInfo.moduleId.equals(webApp.moduleId)) {
+                    return ejbJarInfo.pojoConfigurations;
+                }
+            }
+        }
+        return pojoConfigurations;
+    }
+
     private boolean hasEjbAndIsNotAManagedBean(final Map<String, EJBRestServiceInfo> restEjbs, final String clazz) {
         return restEjbs.containsKey(clazz) && !BeanType.MANAGED.equals(restEjbs.get(clazz).context.getComponentType());
     }
@@ -367,21 +383,19 @@ public abstract class RESTService implem
         if (webCtx.startsWith("/")) {
             webCtx = webCtx.substring(1);
         }
-        if (webCtx.contains("/")) {
-            webCtx = webCtx.substring(0, webCtx.indexOf("/"));
-        }
 
         // get root path ending with /
         String base;
         try {
             final URL url = new URL(address);
-            base = url.getProtocol() + "://" + url.getHost() + ":" + url.getPort() + "/";
-        } catch (MalformedURLException e) {
-            int idx = address.indexOf(webCtx);
-            base = address.substring(0, idx);
-            if (!base.endsWith("/") && !webCtx.startsWith("/")) {
-                base = base + '/';
+            final int port = url.getPort();
+            if (port > 0) {
+                return base = url.getProtocol() + "://" + url.getHost() + ":" + port + "/" + webCtx;
+            } else {
+                base = url.getProtocol() + "://" + url.getHost() + "/" + webCtx;
             }
+        } catch (MalformedURLException e) {
+            throw new OpenEJBRestRuntimeException("bad url: " + address, e);
         }
 
         return base + webCtx;

Modified: openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java?rev=1384157&r1=1384156&r2=1384157&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java (original)
+++ openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java Wed Sep 12 23:32:42 2012
@@ -23,6 +23,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.assembler.classic.IdPropertiesInfo;
 import org.apache.openejb.assembler.classic.PortInfo;
 import org.apache.openejb.assembler.classic.ServletInfo;
 import org.apache.openejb.assembler.classic.SingletonBeanInfo;
@@ -327,6 +328,7 @@ public abstract class WsService implemen
             logger.error("Invalid ejb jar location " + webApp.path, e);
         }
 
+        Collection<IdPropertiesInfo> pojoConfiguration = null; // lazy init
         for (ServletInfo servlet : webApp.servlets) {
             if (servlet.servletName == null) {
                 continue;
@@ -346,9 +348,18 @@ public abstract class WsService implemen
 
                 PortData port = WsBuilder.toPortData(portInfo, injections, moduleBaseUrl, classLoader);
 
+                if (pojoConfiguration == null) {
+                    for (EjbJarInfo ejbJarInfo : appInfo.ejbJars) {
+                        if (ejbJarInfo.moduleName.equals(webApp.moduleId)) {
+                            pojoConfiguration = ejbJarInfo.pojoConfigurations;
+                            break;
+                        }
+                    }
+                }
+
                 HttpListener container = createPojoWsContainer(moduleBaseUrl, port, portInfo.serviceLink,
                         target, context, webApp.contextRoot, bindings,
-                        new ServiceConfiguration(PojoUtil.findConfiguration(appInfo.pojoConfigurations, target.getName()), appInfo.services));
+                        new ServiceConfiguration(PojoUtil.findConfiguration(pojoConfiguration, target.getName()), appInfo.services));
 
                 if (wsRegistry != null) {
                     // give servlet a reference to the webservice container