<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://xmlns.oracle.com/weblogic/weblogic-application" 
	xmlns="http://www.w3.org/2001/XMLSchema" 
	xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" 
	xmlns:javaee="http://java.sun.com/xml/ns/javaee"
	elementFormDefault="qualified" 
	attributeFormDefault="unqualified" 
	version="1.0">
  <include schemaLocation = "http://xmlns.oracle.com/weblogic/weblogic-javaee/1.0/weblogic-javaee.xsd"/>
  <import namespace="http://java.sun.com/xml/ns/javaee" 
    schemaLocation="http://java.sun.com/xml/ns/javaee/javaee_5.xsd"/>
	<element name="weblogic-application" type="wls:weblogic-applicationType"/>
	<complexType name="weblogic-applicationType">
		<sequence>
			<element name="ejb" type="wls:ejbType" minOccurs="0"/>
			<element name="xml" type="wls:xmlType" minOccurs="0"/>
			<element name="jdbc-connection-pool" type="wls:jdbc-connection-poolType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="security" type="wls:securityType" minOccurs="0"/>
			<element name="application-param" type="wls:application-paramType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="classloader-structure" type="wls:classloader-structureType" minOccurs="0"/>
			<element name="listener" type="wls:listenerType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="singleton-service" type="wls:singletonServiceType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="startup" type="wls:startupType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="shutdown" type="wls:shutdownType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="module" type="wls:weblogic-moduleType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="library-ref" type="wls:library-refType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="fair-share-request" type="wls:fair-share-request-classType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="response-time-request" type="wls:response-time-request-classType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="context-request" type="wls:context-request-classType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="max-threads-constraint" type="wls:max-threads-constraintType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="min-threads-constraint" type="wls:min-threads-constraintType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="capacity" type="wls:capacityType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="work-manager" type="wls:work-managerType" minOccurs="0" maxOccurs="unbounded"/>
			      <!-- Enable the Spring extension by setting the component-factory-class-name element to org.springframework.jee.interfaces.SpringComponentFactory.
			        This element exists in EJB, Web, and application descriptors. A module level descriptor overwrites an application level descriptor. 
			        If the tag is set to null (default), the Spring extension is disabled.                
			      -->
            <element name="component-factory-class-name" type="javaee:xsdStringType" minOccurs="0" maxOccurs="1"/>
      <!-- Configure the number of stuck threads needed to bring the app into admin mode -->
      <element name="application-admin-mode-trigger" type="wls:application-admin-mode-triggerType" minOccurs="0" maxOccurs="1"/>

      <element name="session-descriptor" type="wls:session-descriptorType" minOccurs="0" />
      <element name="library-context-root-override" type="wls:library-context-root-overrideType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="prefer-application-packages" type="wls:prefer-application-packagesType" minOccurs="0" maxOccurs="1"/>
      <element name="prefer-application-resources" type="wls:prefer-application-resourcesType" minOccurs="0" maxOccurs="1"/>
      <element name="fast-swap" type="wls:fast-swapType" minOccurs="0" maxOccurs="1"/>
			<!-- The ejb element contains information that is specific to the EJB
          modules that are part of a WebLogic application.  Currently, one can
          use the ejb element to specify one or more application level caches
          that can be used by the application's entity beans.

          Used in: weblogic-application
        -->
			<!-- The xml element contains information about parsers, and entity mappings
          for xml processing that is specific to this application.
        -->
			<!-- The jdbc-connection-pool element is the root element for an 
          application scoped JDBC pool declaration.
        -->
			<!-- The jms element specifies the URI of a JMS destination group module-->
		</sequence>
		<attribute name="version" type="string" use="optional"/>
	</complexType>
	<complexType name="ejbType">
		<sequence>
			<element name="entity-cache" type="wls:application-entity-cacheType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="start-mdbs-with-application" type="wls:true-falseType" minOccurs="0"/>
			<!--
        The entity-cache element is used to define a named application level
        cache that will be used to cache entity EJB instances at runtime.
        Individual entity beans refer to the application level cache that they
        want to use using the cache's name.  There is no restriction on the
        number of different entity beans that may reference an individual
        cache.

        Application level caching is used by default whenever an entity bean
        doesn't specify its own cache in the weblogic-ejb-jar.xml descriptor.
        Two default caches with names, 'ExclusiveCache' and 'MultiVersionCache'
        are used for this purpose.  An application may explicitly define these
        default caches if it wants to specify non-default values for
        their settings.  Note, however, that the caching-strategy cannot be 
        changed for the default caches.

        By default, a cache uses max-beans-in-cache with a value of 1000 to 
        specify its maximum size.

        Used in: ejb
        Example:
        <entity-cache>
          <entity-cache-name>ExclusiveCache</entity-cache-name>
          <max-cache-size>
          <megabytes>50</megabytes>
          </max-cache-size>
        </entity-cache>

      -->
			<!--
        This allows user to configure ejb container to start mdbs with
        application.  If set to "true", container starts mdbs as part of
        application.  If set to "false" container keeps mdbs in a queue and
        server will start them as soon as it started listening on ports.

        Example:
        <start-mdbs-with-application>true</start-mdbs-with-application>

      -->
		</sequence>
	</complexType>
	<complexType name="application-entity-cacheType">
		<sequence>
			<element name="entity-cache-name" type="string"/>
			<choice minOccurs="0">
				<element name="max-beans-in-cache" type="int"/>

				<element name="max-cache-size" type="wls:max-cache-sizeType"/>
				<!--
                  Maximum number of entity beans that are allowed in the cache.  If the
                  limit is reached, beans may be passivated.  If 0 is specified, then
                  there is no limit.  This mechanism does not take into account the
                  actual ammount of memory that different entity beans require.

                  Used in: entity-cache

                  Default value: 1000
                  -->
				<!--
              The max-cache-size element is used to specify a limit on the size of
              an entity cache in terms of memory size, expressed either in terms of
              bytes or megabytes.  A bean provider should provide an estimate of the
              average size of a bean in the weblogic-ejb-jar.xml descriptor if the
              bean uses a cache that specifies its maximum size using the
              max-cache-size element.  By default, a bean is assumed to have an 
              average size of 100 bytes.

              Used in: entity-cache
         -->
			</choice>
			<element name="max-queries-in-cache" type="int" minOccurs="0"/>
			<element name="caching-strategy" type="string" minOccurs="0"/>
			<!--
      The entity-cache-name element specifies a unique name for an entity
      bean cache.  The name must be unique within an ear file and may not
      be the empty string.

      Used in: entity-cache

      Example:
        <entity-cache-name>ExclusiveCache</entity-cache-name>
    -->
			<!-- 
          The caching-strategy element specifies the general strategy that the
          EJB container uses to manage entity bean instances in a particular
          application level cache.  A cache buffers entity bean instances in
          memory and associates them with their primary key value.

          The caching-strategy element can have one of the following values:

          - Exclusive: An 'Exclusive' cache caches a single bean instance in
               memory for each primary key value.  This unique
               instance is typically locked using the EJB container's
               exclusive locking when it is in use, so that only one
               transaction can use the instance at a time.

           - MultiVersion: A 'MultiVersion' cache caches multiple bean
                instances in memory for a given primary key value.
                Each instance can be used by a different transaction
                concurrently.

          Default value: MultiVersion

          Example:
          <caching-strategy>Exclusive</caching-strategy>
        -->
		</sequence>
	</complexType>
	<complexType name="max-cache-sizeType">
		<choice>
			<element name="bytes" type="int"/>
			<element name="megabytes" type="int"/>
			<!--
        The bytes element is used to specify the maximum size of an 
        application level entity cache in bytes.  

        Example:
        <bytes>15000000</bytes>
       -->
			<!--
         The megabytes element is used to specify the maximum size of an entity
         bean cache in megabytes.
       -->
		</choice>
	</complexType>
	<!-- 
       xml element contains information about parsers, and entity mappings
       for xml processing that is specific to this application.
     -->
	<complexType name="xmlType">
		<sequence>
			<element name="parser-factory" type="wls:parser-factoryType" minOccurs="0"/>
			<element name="entity-mapping" type="wls:entity-mappingType" minOccurs="0" maxOccurs="unbounded"/>
			<!--
         The parser-factory element is used to configure factory classes 
         for both SAX and DOM style parsing and for XSLT transformations 
         for the enterprise application

         Example
           <parser-factory>
             <saxparser-factory>weblogic.xml.babel.jaxp.SAXParserFactoryImpl</saxparser-factory>
             <document-builder-factory>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</document-builder-factory>
             <transformer-factory>org.apache.xalan.processor.TransformerFactoryImpl</transformer-factory>
           </parser-factory>

        -->
			<!--
           This element is used to specify entity mapping.  This mapping
           determines alternative entityuri for given public / system id.
           Default place to look for these entityuri is "lib/xml/registry"
           directory.
         -->
		</sequence>
	</complexType>
	<complexType name="parser-factoryType">
		<sequence>
			<element name="saxparser-factory" type="string" minOccurs="0"/>
			<element name="document-builder-factory" type="string" minOccurs="0"/>
			<element name="transformer-factory" type="string" minOccurs="0"/>
		</sequence>
	</complexType>
	<complexType name="entity-mappingType">
		<sequence>
			<element name="entity-mapping-name" type="string"/>
			<element name="public-id" type="string" minOccurs="0"/>
			<element name="system-id" type="string" minOccurs="0"/>
			<element name="entity-uri" type="string" minOccurs="0"/>
			<element name="when-to-cache" type="string" minOccurs="0"/>
			<element name="cache-timeout-interval" type="int" minOccurs="0"/>
			<!--
        This element specifies the name for this entity mapping.
        -->
			<!--
        This element specifies the public id of the mapped entity.
        -->
			<!--
        This element specifies the system id of the mapped entity.
        -->
			<!--
        This element specifies the entityuri for the mapped entity.
        -->
			<!--
        This element specifies the  when-to-cache for the mapped entity.
        -->
			<!--
        This element specifies cache time out interval  for the mapped entity.
        -->
		</sequence>
	</complexType>
	<!-- 
          The jdbc-connection-pool element is the root element for an 
          application scoped JDBC pool declaration.
        -->
	<complexType name="jdbc-connection-poolType">
		<sequence>
			<element name="data-source-jndi-name" type="string"/>
			<element name="connection-factory" type="wls:connection-factoryType"/>
			<element name="pool-params" type="wls:application-pool-paramsType" minOccurs="0"/>
			<element name="driver-params" type="wls:driver-paramsType" minOccurs="0"/>
			<element name="acl-name" type="string" minOccurs="0"/>
			<!-- A JNDI name in the application specific JNDI tree -->
			<!-- 
        Defines initialization parameters for a connection factory which is
        used to construct connection pools.
        -->
			<!--
          DEPRECATED: The acl-name is deprecated
         -->
		</sequence>
	</complexType>
	<complexType name="connection-factoryType">
		<sequence>
			<element name="factory-name" type="string" minOccurs="0"/>
			<element name="connection-properties" type="wls:connection-propertiesType" minOccurs="0"/>
			<!-- 
        The name of a JDBCDataSourceFactoryMBean in config.xml 
        -->
			<!-- 
        The connection params define overrides for default connection factory
        settings
        -->
		</sequence>
	</complexType>
	<complexType name="connection-propertiesType">
		<sequence>
			<element name="user-name" type="string" minOccurs="0"/>
			<element name="password" type="string" minOccurs="0"/>
			<element name="url" type="string" minOccurs="0"/>
			<element name="driver-class-name" type="string" minOccurs="0"/>
			<element name="connection-params" type="wls:connection-paramsType" minOccurs="0" maxOccurs="unbounded"/>
			<!-- 
        user-name is an optional element which is used to override UserName in
        the JDBCDataSourceFactoryMBean.
        -->
			<!-- 
        password is an optional element which is used to override Password in
        the JDBCDataSourceFactoryMBean.
        -->
			<!-- 
        url is an optional element which is used to override URL in the
        JDBCDataSourceFactoryMBean.
        -->
			<!-- 
        driver-class-name is an optional element which is used to override
        DriverName in the JDBCDataSourceFactoryMBean
        -->
			<!--
          The connection-params element is used to set parameters which will be 
          passed to the driver when making a connection.
        
          Example:
           <connection-params>
            <parameter>
             <param-name>foo</param-name>
             <param-value>xyz</param-value>
            </parameter>
        
          -->
		</sequence>
	</complexType>
	<complexType name="connection-paramsType">
		<sequence>
			<element name="parameter" type="wls:parameterType" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<complexType name="parameterType">
		<sequence>
			<element name="description" type="string" minOccurs="0"/>
			<element name="param-name" type="string"/>
			<element name="param-value" type="string"/>
			<!--
          The param-name is the description of a parameter that is passed to one
          of the application components. 
        
          Used in: connection-params/parameter and application-param
        -->
			<!--
          The param-name is the name of a parameter that is passed to one
          of the application components. 
        
          Used in: connection-params/parameter and application-param
        -->
			<!--
          The param-name is the value of a parameter that is passed to one
          of the application components. 
        
          Used in: connection-params/parameter and application-param
          -->
		</sequence>
	</complexType>
	<!-- 
        The pool-params element defines parameters that affect the behavior of
        the pool
        -->
	<complexType name="application-pool-paramsType">
		<sequence>
			<element name="size-params" type="wls:size-paramsType" minOccurs="0"/>
			<element name="xa-params" type="wls:xa-paramsType" minOccurs="0"/>
			<element name="login-delay-seconds" type="int" minOccurs="0"/>
			<element name="leak-profiling-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="connection-check-params" type="wls:connection-check-paramsType" minOccurs="0"/>
			<element name="jdbcxa-debug-level" type="int" minOccurs="0"/>
			<element name="remove-infected-connections-enabled" type="wls:true-falseType" minOccurs="0"/>
			<!--
          Defines a login delay for connection requests. This is used to 
          prevent rapid requests for JDBC connections from overwhelming
          the DBMS server.
        -->
			<!--
          If set to true, the system will print exceptions to the log file 
          when code using a connection pool fails to return the connection
          to the pool before dereferencing it.
        -->
			<!--
          This is an internal setting
        -->
			<!--
          If set to true, connection will be removed from pool if application
          asks for the underlying vendor connection object.
        -->
		</sequence>
	</complexType>
	<!--
        The size-params element defines parameters that affect the number of
        connections in the pool
        -->
	<complexType name="size-paramsType">
		<sequence>
			<element name="initial-capacity" type="int" minOccurs="0"/>
			<element name="max-capacity" type="int" minOccurs="0"/>
			<element name="capacity-increment" type="int" minOccurs="0"/>
			<element name="shrinking-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="shrink-period-minutes" type="int" minOccurs="0"/>
			<element name="shrink-frequency-seconds" type="int" minOccurs="0"/>
			<element name="highest-num-waiters" type="int" minOccurs="0"/>
			<element name="highest-num-unavailable" type="int" minOccurs="0"/>
			<!--
          An integer value representing the initial size of the pool
        -->
			<!--
          An integer value representing the maximum size of the pool
        -->
			<!-- 
          An integer value representing the number of connections that
          will be added to a pool when a request is made to a pool
          that has no available connections. 
        -->
			<!--
          This can be set to true|false. If set to true, then
          the pool having more than the initial capacity of
          connections will shrink back towards the initial size
          when connections become unused.
        -->
			<!--
          Number of seconds to wait before shrinking a
          connection pool that has incrementally increased to meet demand.
        -->
			<!--
          defines the maximum number of threads that will wait for a connection
          before an exception is thrown to the requestor.
          -->
			<!--
          defines the maximum number of connections being refreshed
        -->
		</sequence>
	</complexType>
	<!-- params for XA data sources -->
	<complexType name="xa-paramsType">
		<sequence>
			<element name="debug-level" type="int" minOccurs="0"/>
			<element name="keep-conn-until-tx-complete-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="end-only-once-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="recover-only-once-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="tx-context-on-close-needed" type="wls:true-falseType" minOccurs="0"/>
			<element name="new-conn-for-commit-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="prepared-statement-cache-size" type="int" minOccurs="0"/>
			<element name="keep-logical-conn-open-on-release" type="wls:true-falseType" minOccurs="0"/>
			<element name="local-transaction-supported" type="wls:true-falseType" minOccurs="0"/>
			<element name="resource-health-monitoring-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="xa-set-transaction-timeout" type="wls:true-falseType" minOccurs="0"/>
			<element name="xa-transaction-timeout" type="int" minOccurs="0"/>
			<element name="rollback-localtx-upon-connclose" type="wls:true-falseType" minOccurs="0"/>
			<!-- These are all translated from JDBCConnectionPoolMBean -->
			<!--
          Sets the Debug Level for XA Drivers
          Default value: 0
          Example: 
             <debug-level>3</debug-level>
        
          Since: WLS 7.0
        -->
			<!--
        
          Determines whether the XA connection pool associates the same XA
          connection with the distributed transaction until the transaction
          completes.  This property applies to XA connection pools only, and
          is ignored for non-XA driver.  Its intention is to workaround
          specific problems with third party vendor's XA driver.
        
          Default value: false
          Used in: xa-params
          Example:
            <keep-conn-until-tx-complete-enabled>
             true
            </keep-conn-until-tx-complete-enabled>
          Since: WLS 7.0
        -->
			<!--
        
          Determines whether XAResource.end() will be called only once for
          each pending XAResource.start().  e.g. the XA driver will not be
          called XAResource.end(TMSUSPEND), XAResource.end(TMSUCCESS)
          successively.
        
          This property applies to XA connection pools only, and is ignored
          for non-XA driver.  Its intention is to workaround specific
          problems with third party vendor's XA driver.
        
          Default value: false
          Used in: xa-params
          Example:
            <end-only-once-enabled>
              true
            </end-only-once-enabled>
        
          Since: WLS 7.0
        
        -->
			<!--
        
          Declares whether JTA TM should call recover on the resource once
          only.
         
          This property applies to XA connection pools only, and is ignored
          for non-XA driver.  Its intention is to workaround specific problems
          with third party vendor's XA driver.
        
          Default value: false
          Used in: xa-params
          Example:
            <recover-only-once-enabled>
              true
            </recover-only-once-enabled>
        
          Since: WLS 7.0
        
        -->
			<!--
        
          Defines whether the XA driver requires a distributed transaction
          context when closing various JDBC objects, e.g. result sets,
          statements, connections etc.  If it is specified to true, SQL
          exceptions that are thrown while closing the JDBC objects in no
          transaction context will be swallowed.  This property applies to XA
          connection pools only, and is ignored for non-XA driver.  Its
          intention is to workaround specific problems with third party
          vendor's XA driver.
        
          Default value: false
          Used in: xa-params
          Example:
            <tx-context-on-close-needed>
              true
            </tx-context-on-close-needed> 
          Since: WLS 7.0
        
        -->
			<!--
        
          Defines whether a dedicated XA connection is used for
          commit/rollback processing of a particular distributed transaction.
           
          This property applies to XA connection pools only, and is ignored
          for non-XA driver.  Its intention is to workaround specific
          problems with third party vendor's XA driver.
          
        
          Default value: false
          Used in: xa-params
          Example:
            <tx-context-on-close-needed>
              true
            </tx-context-on-close-needed>
          Since: WLS 7.0
        
        -->
			<!--
        
          The maximum number of prepared statements cached by this particular
          XA connection pool.  If the value is 0, caching is turned off.
        
          This property applies to XA connection pools only, and is ignored
          for non-XA driver.  
        
          Default value: 0
          Used in: xa-params
          Example:
            <prepared-statement-cache-size>
              3
            </prepared-statement-cache-size>
        
          Since: WLS 7.0
        
        -->
			<!--
          Default value: 
          Used in: xa-params
          Example:
            <keep-logical-conn-open-on-release>
              true
            </keep-logical-conn-open-on-release>
          Since: WLS 7.0
        
        -->
			<!--
          Default value: 
          Used in: xa-params
          Example: 
             <local-transaction-supported>
               true
             </local-transaction-supported>
          Since: WLS 7.0
        
        -->
			<!--
          Default value: 
          Used in: xa-params
          Example:
             <resource-health-monitoring-enabled>
               true
             </resource-health-monitoring-enabled>
          Since: WLS 7.0
        
        -->
			<!--
          Default value: 
          Used in: xa-params
          Example:
             <xa-set-transaction-timeout>
               true
             </xa-set-transaction-timeout>
          Since: WLS 8.1
        
        -->
			<!--
          When the xa-set-transaction-timeout value is set to true,
          the TM will invoke setTransactionTimeout on the resource before
          calling XAResource.start.  The TM will pass the global transaction
          timeout value.  If this attribute is set to a value greater than 0,
          then this value will be used in place of the global transaction timeout.
        
          Default value: 0
          Used in: xa-params
          Example:
             <xa-transaction-timeout>
               30
             </xa-transaction-timeout>
          Since: WLS 8.1
        
        -->
			<!--
          When the rollback-localtx-upon-connclose element is true,
          WLS connection pool will call rollback() on the connection
          before putting it back in the pool.
        
          Default value: false
          Used in: xa-params
          Example:
             <rollback-localtx-upon-connclose>
               true
             </rollback-localtx-upon-connclose>
          Since: WLS 8.1
        
        -->
		</sequence>
	</complexType>
	<!-- 
        The connection-check-params define whether, when and how connections
        in a pool will be checked to make sure they are still alive.
        -->
	<complexType name="connection-check-paramsType">
		<sequence>
			<element name="table-name" type="string" minOccurs="0"/>
			<element name="check-on-reserve-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="check-on-release-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="refresh-minutes" type="int" minOccurs="0"/>
			<element name="check-on-create-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="connection-reserve-timeout-seconds" type="int" minOccurs="0"/>
			<element name="connection-creation-retry-frequency-seconds" type="int" minOccurs="0"/>
			<element name="inactive-connection-timeout-seconds" type="int" minOccurs="0"/>
			<element name="test-frequency-seconds" type="int" minOccurs="0"/>
			<element name="init-sql" type="string" minOccurs="0"/>
			<!-- table-name defines a table in the schema that can be queried -->
			<!-- 
        If on-reserve is "true", then the connection will be tested each time
        before its handed out to a user.
        -->
			<!-- 
        If on-release is "true", then the connection will be tested each time
        a user returns a connection to the pool.
        -->
			<!-- 
        If refresh-minutes is defined then a trigger will be fired
        periodically (based on the number of minutes specified). This trigger
        will check each connection in the pool to make sure it is still valid.
        -->
			<!-- 
        If on-create is "true", then the connection will be tested when it is
        created.
        -->
			<!-- 
        Number of seconds after which the call to reserve a connection from the
        pool will timeout.
        -->
			<!-- 
        The frequency of retry attempts by the pool to establish connections
        to the database.
        -->
			<!-- 
        # seconds of inactivity after which reserved connections will forcibly
        be released back into the pool.
        -->
			<!-- 
        The number of seconds between database connection tests. After every
        test-frequency-seconds interval, unused database connections are tested
        using table-name. Connections that do not pass the test will be closed
        and reopened to re-establish a valid physical database connection. If
        table-name is not set, the test will not be performed.
        -->
			<!-- init-sql defines a sql query that will run when a connection
        is created
        -->
		</sequence>
	</complexType>
	<!-- 
        the driver params are used to set behavior on weblogic drivers 
        -->
	<complexType name="driver-paramsType">
		<sequence>
			<element name="statement" type="wls:statementType" minOccurs="0"/>
			<element name="prepared-statement" type="wls:prepared-statementType" minOccurs="0"/>
			<element name="row-prefetch-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="row-prefetch-size" type="int" minOccurs="0"/>
			<element name="stream-chunk-size" type="int" minOccurs="0"/>
			<!-- These are all translated from JDBCConnectionPoolMBean -->
			<!--
           Controls row prefetching between a client and WebLogic
           Server for each ResultSet.  When an external client accesses
           a database using JDBC through Weblogic Server, row prefetching improves
           performance by fetching multiple rows from the server to the
           client in one server access.  WebLogic Server will ignore
           this setting and not use row prefetching when the client and
           WebLogic Server are in the same JVM.
          -->
			<!--
           The number of result set rows to prefetch for a client. The optimal value
           depends on the particulars of the query.  In general, increasing
           this number will increase performance, until a particular value
           is reached.  At that point further increases do not result in any
           significant performance increase.  Very rarely will increased
           performance result from exceeding 100 rows.  The default value
           should be reasonable for most situations.
           
           The default for this setting is 48
           The range for this setting is 2 to 65536
          -->
			<!--
          Data chunk size for steaming datatypes.  Streaming datatypes (for
          example resulting from a call to <code>getBinaryStream()</code>)
          will be pulled in StreamChunkSize sized chunks from WebLogic
          Server to the client as needed.
          -->
		</sequence>
	</complexType>
	<!--
          Default value: 
          Used in: driver-params
          Example:
             <statement>
               <profiling-enabled>true</profiling-enabled>
             </statement>
          Since: WLS 7.0
        
        -->
	<complexType name="statementType">
		<sequence>
			<element name="profiling-enabled" type="wls:true-falseType" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--
          Default value: 
          Used in: driver-params
          Example:
             <prepared-statement>
               <profiling-enabled>true</profiling-enabled>
               <cache-size>3</cache-size>
               <parameter-logging-enabled>true</parameter-logging-enabled>
               <max-parameter-length>10</max-parameter-length>
             </prepared-statement>
          Since: WLS 7.0
        
        -->
	<complexType name="prepared-statementType">
		<sequence>
			<element name="profiling-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="cache-profiling-threshold" type="int" minOccurs="0"/>
			<element name="cache-size" type="int" minOccurs="0"/>
			<element name="parameter-logging-enabled" type="wls:true-falseType" minOccurs="0"/>
			<element name="max-parameter-length" type="int" minOccurs="0"/>
			<element name="cache-type" type="int" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--
        This element specifies security information for the application
        -->
	<complexType name="securityType">
		<sequence>
			<element name="realm-name" type="string" minOccurs="0"/>
			<element name="security-role-assignment" type="wls:application-security-role-assignmentType" minOccurs="0" maxOccurs="unbounded"/>
			<!-- 
        This element names a security realm that will be used by the
        application. If no specified, then the system default realm will be
        used
        -->
		</sequence>
	</complexType>
	<!--
        The security-role-assigment declares a mapping between an application wide
        security role and one or more principals in the WebLogic server. You can also use it to mark a given role as an externally-defined role.
        
        Example:
           <security-role-assignment>
             <role-name>
               PayrollAdmin
             </role-name>
             <principal-name>
               Tanya
             </principal-name>
             <principal-name>
               Fred
             </principal-name>
             <principal-name>
               system
             </principal-name>
           </security-role-assignment>

        Example to mark a given role as a externally defined role:
           <security-role-assignment>
             <role-name>roleadmin</role-name>
             <externally-defined/>
           </security-role-assignment>
        
        Used in: security
        -->
	<complexType name="application-security-role-assignmentType">
		<sequence>
			<element name="role-name" type="string"/>
      <choice>
        <element name="principal-name" type="string" maxOccurs="unbounded"/>
        <element name="externally-defined" type="javaee:emptyType"/>
      </choice>
			<!--
        The role-name element contains the name of a security role.
        
        Used in: security-role-assignment
        -->
			<!--
        The principal-name element contains the name of a principal.
        
        Used in: security-role-assignment
        -->
		</sequence>
	</complexType>
	<!--
          The application-param element is used to specify untyped parameters that affect
          the behavior of container instances related to the application. Currently, the
          following parameters are supported:
        
        
          The following parameters in weblogic-application.xml can determine
          the default encoding to be used for both request and response.
        
          webapp.encoding.default - can be set to a string representing an
              encoding supported by the JDK. If set, this will define the
              default encoding used to process servlet requests and responses.
              This setting is ignored if webapp.encoding.usevmdefault is set
              to true. This value is also overridden for requests streams
              by the input-charset element of weblogic.xml and for response
              streams by the contentType header of the request.
        
          webapp.encoding.usevmdefault - can be set to true or false. If true,
              the system property file.encoding will be used to define the
              default encoding.
        
          The following parameter is used to affect the behavior of web applications
          that are contained in this application.
        
          webapp.getrealpath.accept_context_path - this is a compatibility
              switch which may be set to true or false. If set to true, 
              then the context path of web applications is allowed in 
              calls to the servlet api getRealPath.
        
          Example:
        
            <application-param>
              <param-name>webapp.encoding.default</param-name>
              </param-value>UTF8</param-value>
            </application-param>
        
        
         -->
	<complexType name="application-paramType">
		<sequence>
			<element name="description" type="string" minOccurs="0"/>
			<element name="param-name" type="string"/>
			<element name="param-value" type="string"/>
		</sequence>
	</complexType>
	<!--
          A classloader-structure element allows you to define the organization
          of classloaders for this application. The declaration represents a
          tree structure which represents the classloader hierarchy and associates
          specific modules with particular nodes. A module's classes will be
          loaded by the classloader that its associated with in this structure.
        
          Example:
           <classloader-structure>
             <module-ref>
              <module-uri>ejb1.jar</module-uri>
              <module-uri>ejb2.jar</module-uri>
              <classloader-structure>
                <module-uri>ejb3.jar</module-uri>   
              </classloader-structure>
           </classloader-structure>
        
        In this example, the classloader structure would look like the following
        diagram:
        
            +====================+
            |root classloader    |
            | ejb1 classes and   |
            | ejb2 classes       |
            |                    |
            +====================+
                      ^
                      |
            +====================+
            |child classloader   |
            | ejb3 classes       |
            |                    |
            +====================+
         
        This allows for arbitrary nestings, however, for this version the depth
        is restricted to three levels.
        
        -->
	<complexType name="classloader-structureType">
		<sequence>
			<element name="module-ref" type="wls:module-refType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="classloader-structure" type="wls:classloader-structureType" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<complexType name="module-refType">
		<sequence>
			<element name="module-uri" type="string"/>
		</sequence>
	</complexType>
	<!--
          The listener element is used to register user defined application lifecycle
          listeners. These are classes that extend the abstract base class
          weblogic.application.ApplicationLifecycleListener. The listener-class
          element is the name of the users implementation of ApplicationLifecycleListener.
          The listener-uri is a jar file within the ear which contains the implementation.
          If the listener-uri is not specified, then its assumed that the class is
          visible to the application.
        
          Example:
            <listener>
              <listener-class>mypackage.MyClass</listener-class>  
              <listener-uri>myjar.jar</listener-uri>  
            </listener>
        
          -->
	<complexType name="listenerType">
		<sequence>
			<element name="listener-class" type="string"/>
			<element name="listener-uri" type="string" minOccurs="0"/>
			<element name="run-as-principal-name" type="string" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--
          The singleton service element is used to register user defined singleton services. 
          These are classes that implement the interface weblogic.cluster.singleton.SingletonService. 
          The class-name element is the name of the users implementation of SingletonService.
          The singleton-uri is a jar file within the ear which contains the implementation.
          If the singleton-uri is not specified, then its assumed that the class is
          visible to the application.
        
          Example:
            <singleton-service>
              <class-name>mypackage.MySingleton</class-name>  
              <singleton-uri>myjar.jar</singleton-uri>  
            </singleton-service>
        
          -->
	<complexType name="singletonServiceType">
		<sequence>
			<element name="class-name" type="string" minOccurs="1" maxOccurs="1"/>
			<element name="name" type="string" minOccurs="1" maxOccurs="1"/>
			<element name="singleton-uri" type="string" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--
          The startup element is used to register user defined startup classes.
          The startup-class element is used to define the name of the class
          intended to be run when the application is being deployed. The 
          startup-uri element is used to define a jar file within the ear which
          contains the startup-class. If startup-uri is not defined, then 
          its assumed that the class is visible to the application.
        
          Startup Listeners are deprecated in WebLogic Server 9.0.0.
          ApplicationLifecycleListeners should be used instead.         

          Example:
            <startup>
              <startup-class>mypackage.MyClass</startup-class>  
              <startup-uri>myjar.jar</startup-uri>  
            </startup>
        
          -->
	<complexType name="startupType">
		<sequence>
			<element name="startup-class" type="string"/>
			<element name="startup-uri" type="string" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--
          The shutdown element is used to register user defined shutdown classes.
          The shutdown-class element is used to define the name of the class
          intended to be run when the application is being undeployed. The 
          shutdown-uri element is used to define a jar file within the ear which
          contains the shutdown-class. If shutdown-uri is not defined, then 
          its assumed that the class is visible to the application.

          Shutdown Listeners are deprecated in WebLogic Server 9.0.0.
          ApplicationLifecycleListeners should be used instead.         

          Example:
            <shutdown>
              <shutdown-class>mypackage.MyClass</shutdown-class>  
              <shutdown-uri>myjar.jar</shutdown-uri>  
            </shutdown>
        
          -->
	<complexType name="shutdownType">
		<sequence>
			<element name="shutdown-class" type="string"/>
			<element name="shutdown-uri" type="string" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--
        The module element represents a single WebLogic application module and contains a
        jdbc or jms element.
        -->
	<complexType name="weblogic-moduleType">
		<sequence>
			<element name="name" type="string"/>
			<element name="type">
				<simpleType>
					<restriction base="string">
						<enumeration value="JMS"/>
						<enumeration value="JDBC"/>
						<enumeration value="Interception"/>
					</restriction>
				</simpleType>
			</element>
			<element name="path" type="string"/>
		</sequence>
	</complexType>
	
  <!--
     The library-context-root-override element is used to override the context-root
     of a web module specified in deployment descriptor of a Library referenced by this application.
     Only referencing applications can provide overrides by this mechanism. The snippet
     shown below results in the final context-root of a web module with context-path webapp
     to point to mywebapp.  

     <library-context-root-override>
       <library-context-root>webapp</library-context-root>
       <override-value>mywebapp</override-value>
     </library-context-root-override>
  -->
  <complexType name="library-context-root-overrideType">
    <sequence>
      <element name="context-root" type="string"/>
      <element name="override-value" type="string"/>
    </sequence>
  </complexType>


  <!--
     A list of packages for classes that must always be loaded from the application.
     Even if the listed classes are found in the System Class Loader, they are loaded
     by the Application Class Loader providing a way for an application to use classes
     from a different version of the same classes.
     <prefer-application-packages>
      <package-name>antlr.*</package-name>
      <package-name>org.apache.struts.*</package-name>
     </use-application-packages>
  -->
  <complexType name="prefer-application-packagesType">
    <sequence>
      <element name="package-name" type="string" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
  </complexType>
  <!--
     A list of resource that must always be loaded from the application.
     Even if the listed resources are found in the System Class Loader.
     Note that resource loading behavior is different from the resource
     loading behavior when only <prefer-application-packages> is used.
     In that case, application resources get a preference over system
     resources. But the resource captured in this element are never looked
     up in system class loader.
     <prefer-application-resources>
      <resource-name>properties.txt</resource-name>
      <resource-name>meta-inf/schemas/*</resource-name>
     </use-application-resources>
  -->
  <complexType name="prefer-application-resourcesType">
    <sequence>
      <element name="resource-name" type="string" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
  </complexType>

  <complexType name="fast-swapType">
    <sequence> 
        <element name="enabled" type="wls:true-falseType" minOccurs="0" maxOccurs="1"/>
        <element name="refresh-interval" type="javaee:xsdIntegerType" minOccurs="0" maxOccurs="1"/>
        <element name="redefinition-task-limit" type="javaee:xsdIntegerType" minOccurs="0" maxOccurs="1"/>
    </sequence>
  </complexType>

</schema>
