<?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.
-->

<!-- $Rev$ $Date$ -->

<module xmlns="http://geronimo.apache.org/xml/ns/deployment-${geronimoSchemaVersion}">

    <gbean name="EJBBuilder" class="org.apache.geronimo.openejb.deployment.EjbModuleBuilder">
        <attribute name="defaultCmpJTADataSource">SystemDatasource</attribute>
        <attribute name="defaultCmpNonJTADataSource">NoTxDatasource</attribute>
        <references name="ModuleBuilderExtensions">
            <pattern>
                <name>PersistenceUnitBuilder</name>
            </pattern>
            <pattern>
                <name>CXFModuleBuilderExtension</name>
            </pattern>
            <pattern>
                <name>Axis2ModuleBuilderExtension</name>
            </pattern>
            <pattern>
                <name>AxisModuleBuilderExtension</name>
            </pattern>
            <pattern>
                <name>CorbaModuleBuilderExtension</name>
            </pattern>
        </references>
        <reference name="SecurityBuilders">
            <name>SecurityBuilder</name>
        </reference>
        <reference name="ServiceBuilders">
            <name>GBeanBuilder</name>
        </reference>
        <reference name="NamingBuilders">
            <name>NamingBuilders</name>
        </reference>
        <reference name="ResourceEnvironmentSetter">
            <name>ResourceRefBuilder</name>
        </reference>
        <xml-attribute name="defaultEnvironment">
            <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-${geronimoSchemaVersion}">
                <dependencies>
                    <dependency>
                        <groupId>${pom.groupId}</groupId>
                        <artifactId>openejb</artifactId>
                        <type>car</type>
                    </dependency>
                    <dependency>
                        <groupId>${pom.groupId}</groupId>
                        <artifactId>system-database</artifactId>
                        <type>car</type>
                    </dependency>
                </dependencies>
            </environment>
        </xml-attribute>
    </gbean>

    <gbean name="EjbRefBuilder" class="org.apache.geronimo.openejb.deployment.EjbRefBuilder">
        <attribute name="eeNamespaces">http://java.sun.com/xml/ns/j2ee,http://java.sun.com/xml/ns/javaee</attribute>
        <xml-attribute name="defaultEnvironment">
            <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-${geronimoSchemaVersion}">
                <dependencies>
                    <dependency>
                        <groupId>org.apache.openejb</groupId>
                        <artifactId>openejb-core</artifactId>
                        <type>jar</type>
                    </dependency>
                    <dependency>
                        <groupId>org.apache.geronimo.modules</groupId>
                        <artifactId>geronimo-openejb</artifactId>
                        <type>jar</type>
                    </dependency>
                </dependencies>
            </environment>
        </xml-attribute>
    </gbean>

    <gbean name="ClientEjbRefBuilder" class="org.apache.geronimo.openejb.deployment.EjbRefBuilder">
        <attribute name="eeNamespaces">http://java.sun.com/xml/ns/j2ee,http://java.sun.com/xml/ns/javaee</attribute>
        <attribute name="host">${PlanClientAddresses}</attribute>
        <attribute name="port">${PlanOpenEJBPort}</attribute>
        <xml-attribute name="defaultEnvironment">
            <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-${geronimoSchemaVersion}">
                <dependencies>
                    <dependency>
                        <groupId>org.apache.openejb</groupId>
                        <artifactId>openejb-core</artifactId>
                        <type>jar</type>
                    </dependency>
                    <dependency>
                        <groupId>org.apache.geronimo.modules</groupId>
                        <artifactId>geronimo-openejb</artifactId>
                        <type>jar</type>
                    </dependency>
                </dependencies>
            </environment>
        </xml-attribute>
    </gbean>
</module>
