![antelder](/assets/img/avatar_default.png)
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1069273 13f79535-47bb-0310-9956-ffa450edef68
266 lines
12 KiB
Text
266 lines
12 KiB
Text
Calculator Implementation Policies Sample
|
|
=========================================
|
|
This sample builds over simple calculator sample to demonstrate how Implementation Policies can
|
|
be use in Tuscany SCA Java.
|
|
|
|
The README in the samples directory (the directory above this) provides
|
|
general instructions about building and running samples. Take a look there
|
|
first.
|
|
|
|
If you just want to run the sample to see what happens open a command prompt, navigate
|
|
to this sample directory and do:
|
|
|
|
ant run
|
|
|
|
OR if you don't have ant, on Windows do
|
|
|
|
java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-calculator.jar calculator.CalculatorClient
|
|
|
|
and on *nix do
|
|
|
|
java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-calculator.jar calculator.CalculatorClient
|
|
|
|
|
|
Sample Overview
|
|
---------------
|
|
The sample provides the calculator service with a default SCA (java) binding. The 'logging' policy
|
|
which is handled by the Tuscany SCA java policy-logging module is used in this calculator
|
|
composite to specify the need for 'logging'. The MultiplyService Component specifies for 'jassAuthentication'
|
|
which is one way of implemention login authentication, using the Java Authentication and Authorization Service.
|
|
|
|
The logging intent and policyset that is to be used by this calculator application must be
|
|
defined in the definitions.xml file. Here we use the policyset structure already defined in
|
|
Tuscany for logging under the policy-logging and hence there is no need to specify the policyset processors
|
|
and policy handler classes as part of this application.
|
|
|
|
Similarly the jaasAuthentication intent and policyset also is defined in the definitions.xml file
|
|
of this sample. This sample uses the calculator.security.JaasLoginModule class for handling the
|
|
authentication functions. Right now there is a simply matching of userid and passwords that happens in this
|
|
class. Applications could implement their own sophisticated authentication mechanisms. For more information
|
|
on how to do this please look up Java Authentication and Authorization Service documentation. The sample
|
|
also use the calculator.security.CalculatorCallbackHandler to fetch the userid and password to be use for the
|
|
login authentication. This handler presently uses hardcoded userids and passwords. Applications could
|
|
typically use this handler to prompt for userid and passwords.
|
|
|
|
There are two components that provide the calculator service namely 'CalculatorServiceComponent'
|
|
and 'AnotherCalculatorServiceComponent'. The logging intent is specified for the 'subtract' and 'divide'
|
|
operations of the 'CalculatorServiceCompnent' implementation, and on the entire implementation
|
|
(i.e. all operations) for the AddServiceComponent and AnotherCalculatorServiceComponent.
|
|
|
|
The CalculatorClient first exercises the CalculatorServiceComponent calling add,
|
|
subtract, multiply and divide operations. This results in logging messages appearing on the
|
|
console for 'add', 'subtract' and 'divide' operations. The CalculatorClient then exercises the
|
|
AnotherCalculatorServiceComponent calling all the service methods. This will result in logging messages
|
|
printed on the console for all the operations. For the 'add' operation there will be two sets of messages
|
|
printed - one that has resulted from specifying the 'logging' intent on the implementation element of the
|
|
'AnotherCalculatorServiceComponent' and another from specifying the 'logging' intent on the
|
|
'AddServiceComponent'
|
|
|
|
The jaasAuthentication intent is specified for the 'MultiplyServiceComponent'. So everytime this component
|
|
is invoke an authentication is attempted and only if it succeeds, is the multiply function is invoked. The
|
|
console prints messages that denote if the authentication has succeeded or failed.
|
|
|
|
Thus this sample demonstrates how intents could be applied to either implementations as a whole or to some
|
|
selective operations on an implementation.
|
|
|
|
|
|
calculator/
|
|
src/
|
|
main/
|
|
java/
|
|
calculator/
|
|
CalculatorService.java - the first component, calls +-/* as
|
|
appropriate
|
|
CalculatorServiceImpl.java
|
|
AddService.java - adds two numbers
|
|
AddServiceImpl.java
|
|
SubtractService.java - subtracts one number from another
|
|
SubtractServiceImpl.java
|
|
MultiplyService.java - multiplies two numbers
|
|
MultiplyServiceImpl.java
|
|
DivideService.java - divides one number by another
|
|
DivideServiceImpl.java
|
|
CalculatorClient.java - starts the SCA Runtime and
|
|
deploys the Calculator.composite.
|
|
It then calls the deployed Calculator
|
|
Components services
|
|
calculator/security
|
|
JaasLoginModule.java JaasLoginModule implementation for this sample
|
|
CalculatorCallbackHandler.java JAAS callbackhandler for fetching userid and password
|
|
|
|
|
|
resources/
|
|
Calculator.composite - the SCA assembly for this sample
|
|
definitions.xml - sca definitions file that defines the 'logging' intent
|
|
and policyset
|
|
used by this application
|
|
CalculatorLogMessages.properties - A resource bundle contain the log messages to be
|
|
used.
|
|
CalculatorJaas.config - JAAS Login Configuration file
|
|
|
|
test/
|
|
java/
|
|
calculator/
|
|
CalculatorTestCase.java - JUnit test case
|
|
calculator.png - a pictorial representation of the sample
|
|
.composite file
|
|
build.xml - the Ant build file
|
|
pom.xml - the Maven build file
|
|
|
|
|
|
|
|
Building And Running The Sample Using Ant
|
|
-----------------------------------------
|
|
With the binary distribution the sample can be built and run using Ant as
|
|
follows
|
|
|
|
cd calculator-implementation-policies
|
|
ant compile
|
|
ant run
|
|
|
|
You should see the following output from the run target.
|
|
|
|
run:
|
|
[java] Calling CalculatorServiceComponent configured with 'logging' policy for subtract and divide operations...
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Invoking operation - add
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - add
|
|
[java] 3 + 2=5.0
|
|
[java] 3 - 2=1.0
|
|
[java] 3 * 2=6.0
|
|
[java] 3 / 2=1.5
|
|
[java] Calling CalculatorServiceComponent configured with 'logging' for all operations in the implementation...
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Invoking operation - subtract
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - subtract
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Invoking operation - divide
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - divide
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] 3 + 2=5.0
|
|
[java] 3 - 2=1.0
|
|
[java] 3 * 2=6.0
|
|
[java] INFO: Invoking operation - add
|
|
[java] 3 / 2=1.5
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Invoking operation - add
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - add
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - add
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Invoking operation - subtract
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - subtract
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Invoking operation - multiply
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - multiply
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Invoking operation - divide
|
|
[java] Nov 23, 2007 1:06:10 PM
|
|
[java] INFO: Returned from operation - divide
|
|
|
|
Building And Running The Sample Using Maven
|
|
-------------------------------------------
|
|
With either the binary or source distributions the sample can be built and run
|
|
using Maven as follows.
|
|
|
|
cd calculator
|
|
mvn
|
|
|
|
You should see the following output from the test phase. Notice the log messages.
|
|
|
|
-------------------------------------------------------
|
|
T E S T S
|
|
-------------------------------------------------------
|
|
Running calculator.CalculatorTestCase
|
|
Dec 18, 2007 12:05:06 PM org.apache.tuscany.sca.contribution.processor.ValidatingXMLStreamReader$1 error
|
|
WARNING: XMLSchema validation problem in: file:/F:/LatestTrunk/sca/samples/calculator-implementation-policies/target/
|
|
classes/Calculator.composite, line: 28, column: 4
|
|
cvc-complex-type.2.4.a: Invalid content was found starting with element 'operation'. One of '{WC[##other:"http://www.
|
|
osoa.org/xmlns/sca/1.0"]}' is expected.
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - add
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation add with arguments 3.0, 2.0,
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - add
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation add with return value 5
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - subtract
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation subtract with arguments 3.0, 2.0,
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - subtract
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation subtract with return value 1
|
|
Successfully AUTHENTICATED!!
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - divide
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation divide with arguments 3.0, 2.0,
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - divide
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation divide with return value 1.5
|
|
Dec 18, 2007 12:05:06 PM org.apache.tuscany.sca.contribution.processor.ValidatingXMLStreamReader$1 error
|
|
WARNING: XMLSchema validation problem in: file:/F:/LatestTrunk/sca/samples/calculator-implementation-policies/target/
|
|
classes/Calculator.composite, line: 28, column: 4
|
|
cvc-complex-type.2.4.a: Invalid content was found starting with element 'operation'. One of '{WC[##other:"http://www.
|
|
osoa.org/xmlns/sca/1.0"]}' is expected.
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - add
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation add with arguments 3.0, 2.0,
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - add
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation add with arguments 3.0, 2.0,
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - add
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation add with return value 5
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - add
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation add with return value 5
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - subtract
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation subtract with arguments 3.0, 2.0,
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - subtract
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation subtract with return value 1
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - multiply
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation multiply with arguments 3.0, 2.0,
|
|
Successfully AUTHENTICATED!!
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - multiply
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation multiply with return value 6
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Invoking operation - divide
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Inovoking operation divide with arguments 3.0, 2.0,
|
|
Dec 18, 2007 12:05:06 PM
|
|
INFO: Returned from operation - divide
|
|
Dec 18, 2007 12:05:06 PM
|
|
FINER: Returning from operation divide with return value 1.5
|
|
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.823 sec
|
|
|
|
Results :
|
|
|
|
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
|
|
|
|
Results :
|
|
|
|
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
|
|
This shows that the Junit test cases have run successfully.
|