Spring
...
BigBank Sample Scenario
Scenario 1
This scenario represents the implementation from Spring Bigbank Samples. Before we get into more details we need to understand how the Spring Framework can be used with SCA.
How Spring Framework is used with SCA?
*A Spring Application Context is used as an implementation within an SCA composite component.
*A component that uses Spring for an implementation can wire SCA services and references without introducing SCA metadata into the Spring configuration. The Spring context knows very little about the SCA environment.
*All policy enforcement occurs in the SCA runtime implementation and does not enter into the Spring space.
*It should be possible to generate an SCA Composite from any Spring context and use that composite within an SCA assembly. the scenario details here are currently copied from unit tests. We should replace with the big bank scenario now that is being checked in.
Scenario 1
Anchor | ||||
---|---|---|---|---|
|
...
Using implementation.
...
spring as a component implementation
...
A Spring component acts within a business process accepting call from client components and send on calls to other components. The operation of the component in the Spring assembly is controlled through SCA properties. Here the component type is derived from the spring implementation with no SCA specific entries in the spring application context.
...
Code Block |
---|
<component name="ClientComponent"> <implementation.java class="org.apache.tuscany.sca.implementation.spring.itests.helloworld.HelloWorldProxy"/> <reference name="delegate" target="SpringComponent"/> </component> <component name="SpringComponent"> <implementation.spring location="META-INF/sca/SpringComponent-context.xml"/> <reference name="testReference" target="ReferenceComponent"/> <property name="testProperty">Hello</property> </component> <component name="ReferenceComponent"> <implementation.java class="org.apache.tuscany.sca.implementation.spring.itests.helloworld.HelloWorldImpl"/> </component> |
Anchor | ||||
---|---|---|---|---|
|
...
Declaring SCA Service/Reference within Spring Application Context
A Spring component acts within a business process accepting call from client components and send on calls to other components. The operation of the component in the Spring assembly is controlled through SCA properties. Here the component type is derived from the spring implementation with no SCA specific entries in the spring application context.
...
Anchor | ||||
---|---|---|---|---|
|
We know that a component that uses Spring for an implementation can wire SCA services and references without introducing SCA metadata into the Spring configuration. The Spring context knows very little about the SCA environment. Hence the SpringComponent implementation remains the same but different bindings are chosen at the SCA Composite level as shown below.
...
Working with SCA WebServices Binding
Declaring Service
Code Block |
---|
<composite name="StockQuote"> <service name="StockQuoteService" promote="StockQuoteServiceComponent"> <interface.java interface="bigbank.stockquote.StockQuoteService"/> <binding.ws uri="http://localhost:8081/services/StockQuoteWebService"/> </service> <component name="StockQuoteServiceComponent"> <implementation.spring location="META-INF/spring/StockQuoteService-context.xml"/> </component> </composite> |
Declaring Reference
Code Block |
---|
<component name="AccountServiceComponent"> </composite> |
Declaring Reference
<implementation.spring location="spring-context/Account-spring-context.xml"/>
<reference name="stockQuoteService">
<binding.ws uri="http://localhost:8081/services/StockQuoteWebService"/>
</reference>
</component>
|
Working with JMS Binding
Declaring Service
Code Block |
---|
<composite name="CheckingsAccountDept">
<service name="CheckingsAccountService" promote="CheckingAccountServiceComponent" requires="authentication">
<interface.java interface="bigbank.account.checking.CheckingAccountService"/>
<binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory"
jndiURL="tcp://localhost:61619">
<destination name="RequestQueue" create="ifnotexist"/>
<response>
<destination name="ResponseQueue" create="ifnotexist"/>
</response>
</binding.jms>
</service>
<component name="CheckingAccountServiceComponent">
<implementation.spring location="spring-context/META-INF/spring/CheckingAccountService-context.xml" requires="bba:authorization"/>
</component>
</composite>
|
Declaring Reference
Code Block |
---|
<component name="AccountServiceComponent">
|
Code Block |
<component name="AccountServiceComponent"> <implementation.spring location="spring-context/Account-spring-context.xml"/> <reference name="stockQuoteServicecheckingAccountService"> <interface.java interface="bigbank.account.checking.CheckingAccountService"/> <binding.ws uri="http://localhost:8081/services/StockQuoteWebService"/> </reference> </component> jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory" jndiURL="tcp://localhost:61619"> <destination name="RequestQueue" create="always"/> <response> <destination name="ResponseQueue" create="always"/> </response> </binding.jms> </reference> </component> |
Working with RMI binding
Declaring Service
Code Block |
---|
<composite name="Calculator">
<service name="CalculatorService" promote="CalculatorServiceComponent">
<interface.java interface="bigbank.calculator.CalculatorService"/>
<tuscany:binding.rmi host="localhost" port="8099" serviceName="CalculatorRMIService"/>
</service>
<component name="CalculatorServiceComponent">
<implementation.spring location="META-INF/spring/CalculatorService-context.xml"/>
<reference name="addService" target="AddServiceComponent" />
<reference name="subtractService" target="SubtractServiceComponent" />
<reference name="multiplyService" target="MultiplyServiceComponent" />
<reference name="divideService" target="DivideServiceComponent" />
</component>
</composite>
|
Declaring Reference
Code Block |
---|
<component name="AccountServiceComponent">
<implementation.spring location="spring-context/Account-spring-context.xml"/>
<reference name="calculatorService">
<tuscany:binding.rmi host="localhost" port="8099" serviceName="CalculatorRMIService"/>
</reference>
</component>
|
Working with ATOM and RSS bindings
TBD
Policy - Security
TBD
Policy - Transaction
...