You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Quintin Beukes <qu...@skywalk.co.za> on 2009/10/27 10:45:34 UTC

Security doesn't work for an EAR

Hey,

When I deploy my EJBs, all works well regarding
security/roles/principals. Though, while developing it's easier to
wrap the modules I'm busy with in an EAR to make redeploying a bit
easier. Whenever I do this, I get the following error in the geronimo
log. It doesn't seem to affect anything as far as I can see.
Authentication/authorization still works fine.
2009-10-27 11:12:09,819 ERROR [EjbModuleBuilder]
GeronimoSecurityBuilderImpl.addGBeans() failed: JACC manager gbean
already present
org.apache.geronimo.common.DeploymentException: JACC manager gbean
already present
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.buildJaccManager(GeronimoSecurityBuilderImpl.java:224)
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.addGBeans(GeronimoSecurityBuilderImpl.java:150)
	at org.apache.geronimo.openejb.deployment.EjbModuleBuilder.addGBeans(EjbModuleBuilder.java:825)
	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.java:652)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:257)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:136)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:130)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:850)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:237)
	at org.apache.geronimo.kernel.KernelGBean.invoke(KernelGBean.java:342)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:130)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:850)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:237)
	at org.apache.geronimo.system.jmx.MBeanGBeanBridge.invoke(MBeanGBeanBridge.java:172)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1426)
	at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1264)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1366)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
	at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.geronimo.kernel.GBeanAlreadyExistsException:
net.kunye/KunyeDevEAR/1.0/ear?J2EEApplication=net.kunye/KunyeDevEAR/1.0/ear,j2eeType=JACCManager,name=JACCManager
	at org.apache.geronimo.kernel.config.Configuration.addGBean(Configuration.java:626)
	at org.apache.geronimo.deployment.DeploymentContext.addGBean(DeploymentContext.java:186)
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.buildJaccManager(GeronimoSecurityBuilderImpl.java:222)
	... 44 more
2009-10-27 11:12:09,827 ERROR [EjbModuleBuilder]
GeronimoSecurityBuilderImpl.addGBeans() failed: JACC manager gbean
already present
org.apache.geronimo.common.DeploymentException: JACC manager gbean
already present
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.buildJaccManager(GeronimoSecurityBuilderImpl.java:224)
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.addGBeans(GeronimoSecurityBuilderImpl.java:150)
	at org.apache.geronimo.openejb.deployment.EjbModuleBuilder.addGBeans(EjbModuleBuilder.java:825)
	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.java:652)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:257)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:136)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:130)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:850)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:237)
	at org.apache.geronimo.kernel.KernelGBean.invoke(KernelGBean.java:342)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:130)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:850)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:237)
	at org.apache.geronimo.system.jmx.MBeanGBeanBridge.invoke(MBeanGBeanBridge.java:172)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1426)
	at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1264)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1366)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
	at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.geronimo.kernel.GBeanAlreadyExistsException:
net.kunye/KunyeDevEAR/1.0/ear?J2EEApplication=net.kunye/KunyeDevEAR/1.0/ear,j2eeType=JACCManager,name=JACCManager
	at org.apache.geronimo.kernel.config.Configuration.addGBean(Configuration.java:626)
	at org.apache.geronimo.deployment.DeploymentContext.addGBean(DeploymentContext.java:186)
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.buildJaccManager(GeronimoSecurityBuilderImpl.java:222)
	... 44 more
2009-10-27 11:12:09,849 ERROR [EjbModuleBuilder]
GeronimoSecurityBuilderImpl.addGBeans() failed: JACC manager gbean
already present
org.apache.geronimo.common.DeploymentException: JACC manager gbean
already present
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.buildJaccManager(GeronimoSecurityBuilderImpl.java:224)
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.addGBeans(GeronimoSecurityBuilderImpl.java:150)
	at org.apache.geronimo.openejb.deployment.EjbModuleBuilder.addGBeans(EjbModuleBuilder.java:825)
	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.java:652)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:257)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:136)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:130)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:850)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:237)
	at org.apache.geronimo.kernel.KernelGBean.invoke(KernelGBean.java:342)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:130)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:850)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:237)
	at org.apache.geronimo.system.jmx.MBeanGBeanBridge.invoke(MBeanGBeanBridge.java:172)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1426)
	at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1264)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1366)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
	at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.geronimo.kernel.GBeanAlreadyExistsException:
net.kunye/KunyeDevEAR/1.0/ear?J2EEApplication=net.kunye/KunyeDevEAR/1.0/ear,j2eeType=JACCManager,name=JACCManager
	at org.apache.geronimo.kernel.config.Configuration.addGBean(Configuration.java:626)
	at org.apache.geronimo.deployment.DeploymentContext.addGBean(DeploymentContext.java:186)
	at org.apache.geronimo.security.deployment.GeronimoSecurityBuilderImpl.buildJaccManager(GeronimoSecurityBuilderImpl.java:222)
	... 44 more


Is this an error on my part, or a bug? Here is my
geronimo-application.xml. I only include the modules I'm immediately
busy with to make deploying happen faster, though it doesn't seem to
matter which EJB modules it contains.

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
             xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
             xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"
             application-name="KunyeDevEAR">

  <dep:environment>
    <dep:moduleId>
      <dep:groupId>net.kunye</dep:groupId>
      <dep:artifactId>KunyeDevEAR</dep:artifactId>
      <dep:version>1.0</dep:version>
      <dep:type>ear</dep:type>
    </dep:moduleId>

    <dep:dependencies>
      <dep:dependency>
        <dep:groupId>console.dbpool</dep:groupId>
        <dep:artifactId>jdbc_kmsPool</dep:artifactId>
        <dep:version>1.0</dep:version>
        <dep:type>rar</dep:type>
      </dep:dependency>

      <dep:dependency>
        <dep:groupId>console.realm</dep:groupId>
        <dep:artifactId>KMSRealm</dep:artifactId>
        <dep:version>1.0</dep:version>
        <dep:type>car</dep:type>
      </dep:dependency>

      <dep:dependency>
        <dep:groupId>org.springframework</dep:groupId>
        <dep:artifactId>spring-core</dep:artifactId>
        <dep:version>2.5.6</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>org.springframework</dep:groupId>
        <dep:artifactId>spring-beans</dep:artifactId>
        <dep:version>2.5.6</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>org.springframework</dep:groupId>
        <dep:artifactId>spring-context</dep:artifactId>
        <dep:version>2.5.6</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>

      <dep:dependency>
        <dep:groupId>org.slf4j</dep:groupId>
        <dep:artifactId>slf4j-api</dep:artifactId>
        <dep:version>1.5.5</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>

      <!-- hibernate follows -->
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>core</dep:artifactId>
        <dep:version>3.3</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>annotations</dep:artifactId>
        <dep:version>3.4</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>antlr</dep:artifactId>
        <dep:version>2.7.6</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>commons-annotations</dep:artifactId>
        <dep:version>3.4</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>commons-collections</dep:artifactId>
        <dep:version>3.1</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>dom4j</dep:artifactId>
        <dep:version>1.6.1</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>entitymanager</dep:artifactId>
        <dep:version>3.4</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>javassist</dep:artifactId>
        <dep:version>3.9.0.GA</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>jpa</dep:artifactId>
        <dep:version>3.0</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>jta</dep:artifactId>
        <dep:version>1.1</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
      <dep:dependency>
        <dep:groupId>hibernate</dep:groupId>
        <dep:artifactId>GeronimoTransactionManager</dep:artifactId>
        <dep:version>1.0</dep:version>
        <dep:type>jar</dep:type>
      </dep:dependency>
    </dep:dependencies>
  </dep:environment>

  <sec:security>
    <sec:role-mappings>
      <sec:role role-name="Admin">
        <sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="Admin"/>
      </sec:role>
      <sec:role role-name="Employee Admin">
        <sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="VDS Admin"/>
      </sec:role>
      <sec:role role-name="VDS Admin">
        <sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="VDS Admin"/>
      </sec:role>
      <sec:role role-name="Lamp Room">
        <sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="Lamp Room"/>
      </sec:role>
      <sec:role role-name="Lamp Repair">
        <sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="Lamp Repair"/>
      </sec:role>
      <sec:role role-name="Services">
        <sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="Services"/>
      </sec:role>
      <sec:role role-name="Standard User">
        <sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="Standard User"/>
      </sec:role>
    </sec:role-mappings>
  </sec:security>

  <module>
    <ejb>KMSPlatform-ejb-1.0.jar</ejb>
    <openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb-jar-2.2">
      <dep:environment>
        <dep:moduleId>
          <dep:groupId>net.kunye</dep:groupId>
          <dep:artifactId>KMSPlatform-ejb</dep:artifactId>
          <dep:version>1.0</dep:version>
          <dep:type>jar</dep:type>
        </dep:moduleId>
      </dep:environment>
    </openejb-jar>
  </module>

  <module>
    <ejb>KMS-Personnel-ejb-1.0.jar</ejb>
    <openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb-jar-2.2">
      <dep:environment>
        <dep:moduleId>
          <dep:groupId>net.kunye</dep:groupId>
          <dep:artifactId>KMS-Personnel-ejb</dep:artifactId>
          <dep:version>1.0</dep:version>
          <dep:type>jar</dep:type>
        </dep:moduleId>
      </dep:environment>
    </openejb-jar>
  </module>

  <module>
    <ejb>VDS-ejb-1.0.jar</ejb>
    <openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb-jar-2.2">
      <dep:environment>
        <dep:moduleId>
          <dep:groupId>net.kunye</dep:groupId>
          <dep:artifactId>VDS-ejb</dep:artifactId>
          <dep:version>3.0</dep:version>
          <dep:type>jar</dep:type>
        </dep:moduleId>
      </dep:environment>
    </openejb-jar>
  </module>

  <module>
    <ejb>VDS-lamps-ejb-3.0.jar</ejb>
    <openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb-jar-2.2">
      <dep:environment>
        <dep:moduleId>
          <dep:groupId>net.kunye</dep:groupId>
          <dep:artifactId>VDS-lamps-ejb</dep:artifactId>
          <dep:version>3.0</dep:version>
          <dep:type>jar</dep:type>
        </dep:moduleId>
      </dep:environment>
    </openejb-jar>
  </module>
</application>

Quintin Beukes