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. |