TUSCANY-2543: apply patch from Ramkumar Ramalingam to Demostrate Explicit/Implicit services, references in Spring BigBank Sample

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@685520 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
antelder 2008-08-13 11:24:14 +00:00
parent 76350b074c
commit a547b84aa1
10 changed files with 191 additions and 120 deletions
java/sca/samples/simple-bigbank-spring

View file

@ -1,25 +1,74 @@
Spring Bigbank Sample
=================
This sample implements a simple a version of the BigBank scenrio used in
various places in the SCA specification documents.
======================
This sample is made of 3 modules that represent the different aspects of a fictitious banking application.
The README in the samples directory (the directory above this) provides
general instructions about building and running samples. Take a look there
first.
To run the simple-bigbank-spring sample you need to first run spring-bigbank-calculator, spring-bigbank-checkaccount and spring-bigbank-stockquote composites.
This will bring up Tuscany runtime and load the three applications and make them available as services.
Bigbank-Spring is dependent on these services.
If you just want to run it to see what happens open a command prompt, navigate
to this sample directory and do:
This demo uses ant. This is just one way of running this demo.
Start Spring-Bigbank-calculator Composite
-----------------------------------------
Spring-Bigbank-calculator is a calculator application which handles add, subtract, multiply and divide operations. Each of these operations is implemented in a different language, including JavaScript, groovy, Ruby and Python.
To run the spring-bigbank-calculator composite and make it available as a service for this demo do the following:
cd spring-bigbank-calculator
ant compile
ant run
OR if you don't have ant, on Windows do
.. Leave the server running
java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-simple-bigbank-spring.jar bigbank.client.BigBankClient
Note that 'ant compile' needs to be done the first time you run this demo out of the binary distribution. No need to do 'ant compile' from there on.
and on *nix do
Start Spring-Bigbank-checkaccount Composite
-------------------------------------------
java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-simple-bigbank-spring.jar bigbank.client.BigBankClient
This contains all artifacts that deal with the account management within the bigbank. The services offered by the bigbank-account module are used by the bigbank.
cd spring-bigbank-checkaccount
ant compile
ant run
.. Leave the server running
Note that 'ant compile' needs to be done the first time you run this demo out of the binary distribution. No need to do 'ant compile' from there on.
Start Spring-Bigbank-stockquote Composite
-----------------------------------------
A very simple web services based stock quote application which returns random
stock quotes on request. Please note that the stockquote service is not live and is implemented instead to allow for this application to always run without dependency on the availability of a webservice.
cd spring-bigbank-stockquote
ant compile
ant run
.. Leave the server running
Start Spring Bigbank
--------------------
This contains all artifacts that make up the bigbank application. This is the application that the end user interacts with
Start spring-bigbank in the following way:
i ) Compile the spring-bigbank as follows :
cd simple-bigbank-spring
ant compile
ii) Now start the bigbank service as follows :
cd bigbank
ant compile
ant run
.. Leave the server running
Note that 'ant compile' needs to be done the first time you run this demo out ofthe binary distribution.
No need to do 'ant compile' from there on.
Sample Overview
---------------

View file

@ -21,6 +21,8 @@ package bigbank.account;
import java.util.ArrayList;
import java.util.List;
import org.osoa.sca.annotations.Service;
import bigbank.account.checking.CheckingAccountDetails;
import bigbank.account.checking.CheckingAccountService;
import bigbank.account.savings.SavingsAccountDetails;
@ -33,6 +35,7 @@ import bigbank.calculator.CalculatorService;
/**
* Account service implementation
*/
@Service(AccountService.class)
public class AccountServiceImpl implements AccountService {
private SavingsAccountService savingsAccountService;

View file

@ -0,0 +1,99 @@
/*
* 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 bigbank.server;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.contribution.Contribution;
import org.apache.tuscany.sca.contribution.service.ContributionService;
import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
/**
* This client program shows how to create an SCA runtime, start it,
* and locate and invoke a SCA component
*/
public class BigBankServer {
public static void main(String[] args) throws Exception {
long timeout = -1L;
if (args.length > 0) {
timeout = Long.parseLong(args[0]);
}
System.out.println("Starting the Spring SCA BigBank server...");
ClassLoader cl = BigBankServer.class.getClassLoader();
EmbeddedSCADomain domain = new EmbeddedSCADomain(cl, "http://localhost");
//Start the domain
domain.start();
// Contribute the SCA contribution
ContributionService contributionService = domain.getContributionService();
URL bigbankContribUrl = getContributionURL(BigBankServer.class);
Contribution bigbankContribution = contributionService.contribute("http://bigbank", bigbankContribUrl, false);
for (Composite deployable : bigbankContribution.getDeployables()) {
domain.getDomainComposite().getIncludes().add(deployable);
domain.buildComposite(deployable);
}
//Start Components from composite
for (Composite deployable : bigbankContribution.getDeployables()) {
domain.getCompositeActivator().activate(deployable);
domain.getCompositeActivator().start(deployable);
}
if (timeout < 0) {
System.out.println("Press Enter to Exit...");
System.in.read();
} else {
Thread.sleep(timeout);
}
contributionService.remove("http://bigbank");
// Stop Components from composite
for (Composite deployable : bigbankContribution.getDeployables()) {
domain.getCompositeActivator().stop(deployable);
domain.getCompositeActivator().deactivate(deployable);
}
domain.stop();
domain.close();
System.out.println("Bye");
}
private static URL getContributionURL(Class<?> cls) throws MalformedURLException {
String flag = "/" + cls.getName().replace('.', '/') + ".class";
URL url = cls.getResource(flag);
String root = url.toExternalForm();
root = root.substring(0, root.length() - flag.length() + 1);
if (root.startsWith("jar:") && root.endsWith("!/")) {
root = root.substring(4, root.length() - 2);
}
url = new URL(root);
return url;
}
}

View file

@ -30,10 +30,13 @@
<component name="AccountServiceComponent">
<implementation.spring location="spring-context/Account-spring-context.xml"/>
<service name="AccountService">
<interface.java interface="bigbank.account.AccountService"/>
</service>
<reference name="savingsAccountService" target="SavingsAccountServiceComponent"/>
<!--reference name="checkingAccountService" target="CheckingAccountServiceComponent"/-->
<reference name="checkingAccountService">
<interface.java interface="bigbank.account.checking.CheckingAccountService"/>
<binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory"
@ -60,10 +63,6 @@
<implementation.composite name="bbsv:SavingsAccountDept"/>
</component>
<!--component name="CheckingAccountServiceComponent">
<implementation.composite name="bbck:CheckingsAccountDept"/>
</component-->
<component name="StockAccountServiceComponent">
<implementation.composite name="bbst:StockAccountDept"/>
</component>

View file

@ -1,33 +0,0 @@
<?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.
-->
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
targetNamespace="http://bigbank/checkings"
xmlns:bbck="http://bigbank/checkings"
xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
xmlns:bba="http://bigbankAccount"
name="CheckingsAccountDept">
<service name="CheckingAccountService" promote="CheckingAccountServiceComponent"/>
<component name="CheckingAccountServiceComponent">
<implementation.spring location="spring-context/CheckingsAccount/META-INF/spring/CheckingsAccount-context.xml"/>
</component>
</composite>

View file

@ -26,7 +26,7 @@
<service name="StockAccountService" promote="StockAccountServiceComponent"/>
<component name="StockAccountServiceComponent">
<implementation.spring location="spring-context/StockAccount/META-INF/spring/StockAccount-context.xml"/>
<implementation.spring location="spring-context/StockAccount"/>
</component>
</composite>

View file

@ -24,26 +24,30 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/sca http://www.springframework.org/schema/sca/spring-sca.xsd">
<sca:service name="AccountService"
type="bigbank.account.AccountService" target="AccountServiceBean"/>
<bean id="AccountServiceBean" class="bigbank.account.AccountServiceImpl">
<property name="savingsAccountService" ref="savingsAccountService"/>
<property name="checkingAccountService" ref="checkingAccountService"/>
<property name="stockAccountService" ref="stockAccountService"/>
<!-- <sca:service name="AccountService"
type="bigbank.account.AccountService" target="AccountServiceBean"/> -->
<bean id="AccountServiceBean" class="bigbank.account.AccountServiceImpl">
<property name="calculatorService" ref="calculatorService"/>
<property name="stockQuoteService" ref="stockQuoteService"/>
<property name="stockQuoteService" ref="stockQuoteService"/>
<property name="checkingAccountService" ref="checkingAccountService"/>
<!-- Here are some implicit references & properties - a property with a ref not satisifed
* within the Spring application context.
-->
<property name="savingsAccountService" ref="savingsAccountService"/>
<property name="stockAccountService" ref="stockAccountService"/>
<property name="currency" value="EURO"/>
</bean>
<sca:reference name="savingsAccountService" type="bigbank.account.savings.SavingsAccountService"/>
<sca:reference name="checkingAccountService" type="bigbank.account.checking.CheckingAccountService"/>
<sca:reference name="stockAccountService" type="bigbank.account.stock.StockAccountService"/>
<sca:reference name="calculatorService" type="bigbank.calculator.CalculatorService"/>
<sca:reference name="stockQuoteService" type="bigbank.stockquote.StockQuoteService"/>
<!-- <sca:reference name="savingsAccountServiceRef" type="bigbank.account.savings.SavingsAccountService"/>-->
<!-- <sca:reference name="stockAccountServiceRef" type="bigbank.account.stock.StockAccountService"/>-->
</beans>

View file

@ -1,33 +0,0 @@
<?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.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sca="http://www.springframework.org/schema/sca"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/sca http://www.springframework.org/schema/sca/spring-sca.xsd">
<sca:service name="CheckingAccountService"
type="bigbank.account.checking.CheckingAccountService" target="CheckingAccountServiceBean"/>
<bean id="CheckingAccountServiceBean" class="bigbank.account.checking.CheckingAccountServiceImpl">
</bean>
</beans>

View file

@ -0,0 +1,4 @@
Manifest-Version: 1.0
Spring-Context: META-INF/spring/StockAccount-context.xml

View file

@ -20,9 +20,7 @@ package bigbank;
import junit.framework.TestCase;
import org.apache.tuscany.sca.host.embedded.SCADomain;
import bigbank.account.AccountService;
import bigbank.server.BigBankServer;
/**
* Tests out the big bank service
@ -30,26 +28,7 @@ import bigbank.account.AccountService;
*/
public class BigBankTestCase extends TestCase {
private SCADomain scaDomain;
AccountService accountService;
@Override
protected void setUp() throws Exception {
scaDomain = SCADomain.newInstance("BigBank.composite");
accountService = scaDomain.getService(AccountService.class, "AccountServiceComponent");
}
@Override
protected void tearDown() throws Exception {
scaDomain.close();
}
public void test() throws Exception {
// try {
// System.out.println("Account summary: " + accountService.getAccountReport("Customer_01") );
// }
// catch (Exception e) {
//
// }
public void testServer() throws Exception {
BigBankServer.main(new String[] {"1000"});
}
}