<!--
 * 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.    
-->

<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
           xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
           targetNamespace="http://sample"
           xmlns:sample="http://sample"
           name="Corba6">
    
	<component name="ScenarioSix">
        <implementation.java class="org.apache.tuscany.sca.test.corba.types.TScenarioSixComponent" />
        <reference name="scenarioSix">
			<tuscany:binding.corba host="localhost" port="5050" name="ScenarioSix"/>        
        </reference>
    </component>
    
    <component name="ScenarionSixService">
    	<implementation.java class="org.apache.tuscany.sca.test.corba.types.TScenarioSixServant" />
    </component>
    <service name="ScenarionSixService" promote="ScenarionSixService">
    	<interface.java interface="org.apache.tuscany.sca.test.corba.types.TScenarioSix"/>
        <tuscany:binding.corba host="localhost" port="5050" name="ScenarioSixTuscany" id="IDL:org/apache/tuscany/sca/test/corba/generated/ScenarioSix:1.0"/>
    </service>
        
</composite>
