summaryrefslogtreecommitdiffstats
path: root/sandbox/sebastien/java/dynamic/samples/launcher-embedded-jse/src/main/java/launcher/SampleJSELauncher.java
blob: 9a4a73c55662a37b4dff2e722792d61f0f12fdaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
 * 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.    
 */

package launcher;

import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.Node;

import calculator.CalculatorService;


/**
 * This client program shows how to create an embedded SCA runtime, load a contribution,
 * start it and, in some cases, locate and invoke an SCA component 
 */
public class SampleJSELauncher extends RuntimeIntegration {
    
    protected boolean waitBeforeStopping = false;
    
    public static void main(String[] args) throws Exception {
        
        // get the contribution name from the 1st argument it there is one
        String contribution = null;
        
        if (args == null || args.length != 1){
            System.out.println("Please provide the name of the sample contribution to run as a parameter");
            System.out.println("Running binding-sca-calculator by default");
            contribution = "contribution-binding-sca-calculator";
        } else {
            contribution = args[0];
        }   
        
        // assume that more than one argument means that the caller wants to
        // keep the SCA application running while other clients use the services
        boolean waitBeforeStopping = false;
        
        if (args != null && args.length > 1 && args[1].equals("waitBeforeStopping")){
            waitBeforeStopping = true;
        }
        
        SampleJSELauncher launcher = new SampleJSELauncher(waitBeforeStopping);
        
        if (contribution.equals("contribution-binding-sca-calculator")){
            launcher.launchBindingSCACalculator();
        } else if (contribution.equals("contribution-binding-ws-calculator")){
            launcher.launchBindingWSCalculator();
        } else if (contribution.equals("contribution-binding-rmi-calculator")){
            launcher.launchBindingRMICalculator();    
        } else if (contribution.equals("contribution-implementation-java-calculator")){
            launcher.launchImplementationJavaCalculator();              
        } else {
            System.out.println("Sample contribution " + contribution + "not found");
        }
               
    }
    
    public SampleJSELauncher(boolean waitBeforeStopping){
        this.waitBeforeStopping = waitBeforeStopping;
    }
    
    /**
     * Wait for user input. Allows us to keep the Tuscany runtime and the SCA application
     * running while other clients access the services provided 
     */
    public void waitBeforeStopping(){
        if (waitBeforeStopping){
            try {
                System.out.println("Press key to continue");
                int input = System.in.read();
            } catch (Exception ex) {
                // do nothing
            }
        }
    }
       
    /**
     * The contribution-binding-sca-calculator contribution includes a client component 
     * that calls the CalculatorServiceComponent from an operation marked by @Init. 
     */
    public void launchBindingSCACalculator(){
        Node node = startNode(new Contribution("c1", "../binding-sca/contribution-calculator/target/sample-contribution-binding-sca-calculator.jar"));
        waitBeforeStopping();
        stopNode(node);
    }    
    
    /*
     * Using a Tuscany specific mechanism for getting at local service proxies
     */
    public void launchBindingWSCalculator(){
        Node node = startNode(new Contribution("c1", "../contribution-binding-ws-calculator/target/classes"));
        
        CalculatorService calculator = node.getService(CalculatorService.class, "CalculatorServiceComponent");
        // TODO - could use JUnit assertions but don't want to have to handle JUnit dependency from Ant script
        double result = calculator.add(3, 2);
        System.out.println("3 + 2 = " + result);
        if (result != 5.0){
            throw new SampleLauncherException();
        }
        
        waitBeforeStopping();
        stopNode(node);
    }
    
    /*
     * Using a Tuscany specific mechanism for getting at local service proxies
     */
    public void launchBindingRMICalculator(){
        Node node1 = startNode(new Contribution("c1", "../binding-rmi/contribution-calculator-service/target/classes"));
        Node node2 = startNode(new Contribution("c1", "../binding-rmi/contribution-calculator-reference/target/classes"));
        
        CalculatorService calculator = node2.getService(CalculatorService.class, "CalculatorServiceComponent");
        // TODO - could use JUnit assertions but don't want to have to handle JUnit dependency from Ant script
        double result = calculator.add(3, 2);
        System.out.println("3 + 2 = " + result);
        if (result != 5.0){
            throw new SampleLauncherException();
        }
        
        waitBeforeStopping();
        stopNode(node2);
        stopNode(node1);
    }   
    
    /**
     * The contribution-binding-sca-calculator contribution includes a client component 
     * that calls the CalculatorServiceComponent from an operation marked by @Init. 
     */
    public void launchImplementationJavaCalculator(){
        Node node = startNode(new Contribution("c1", "../contribution-implementation-java-calculator/target/classes"));
        waitBeforeStopping();
        stopNode(node);
    }      
    
}