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