summaryrefslogtreecommitdiffstats
path: root/site/trunk/site-publish/tuscany-sca-web-application-integration-story.html
blob: de5c7e5c44a0cc944bbd8e3671edde1166818c01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
<!--

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


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
    <HEAD>
		<!-- generateKeywords macro -->
	    <META name="description" content="Apache Tuscany">
        <META name="keywords" content="apache, apache tuscany, tuscany, service, services, fabric, soa, service oriented architecture,  sca, service component architecture, das, sdo, csa, ruby, opensource">
		<!-- generateKeywords macro end -->
		
        <LINK type="text/css" rel="stylesheet" href="http://tuscany.apache.org/stylesheets/default.css">
        <LINK rel="SHORTCUT ICON" href="https://cwiki.apache.org/confluence/display/TUSCANY/$images/favicon.ico">   
        <TITLE>Apache Tuscany : Tuscany SCA Web Application Integration Story</TITLE>
    <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
    
    <BODY onload="init()">
        <!-- topNav macro -->
		<TABLE valign="top" border="0" cellspacing="0" cellpadding="0" width="100%" background="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg">
			<TR>
				<TD valing="top" align="left">
					<A href="https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=TUSCANY&title=$siteroot"><IMG src="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg" height="91" width="25" border="0"></A>
				</TD>
				<TD>
					<A href="http://tuscany.apache.org/"><IMG src="http://tuscany.apache.org/images/TuscanyLogo.jpg" border="0"></A>
				</TD>
				
				<TD width="100%">
					&nbsp;
				</TD>

				<!-- Adds the edit page link to the top banner-->
				<TD valign="bottom">
					<DIV style="padding: 2px 10px; margin: 0px;">
						<A href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=53596">
						<IMG src="http://tuscany.apache.org/images/notep_16.gif" height="16" width="16" border="0" align="absmiddle" title="Edit Page"></A>
					</DIV>
				</TD>

			</TR>
		</TABLE>
        <!-- topNav macro end -->

		<!-- breadCrumbs macro -->
		<TABLE border="0" cellpadding="2" cellspacing="0" width="100%">
			<TR class="topBar">
				<TD align="left" valign="middle" class="topBarDiv" nowrap="true" width="100%">
					&nbsp;<A href="home.html" title="Apache Tuscany">Apache Tuscany</A>&nbsp;&gt;&nbsp;<A href="home.html" title="Home">Home</A>&nbsp;&gt;&nbsp;<A href="sca-overview.html" title="SCA Overview">SCA Overview</A>&nbsp;&gt;&nbsp;<A href="sca-java.html" title="SCA Java">SCA Java</A>&nbsp;&gt;&nbsp;<A href="sca-java-work-in-progress.html" title="SCA Java Work-In-Progress">SCA Java Work-In-Progress</A>&nbsp;&gt;&nbsp;<A href="" title="Tuscany SCA Web Application Integration Story">Tuscany SCA Web Application Integration Story</A>
				</TD>
				
				<TD align="right" valign="middle" class="topBarDiv" align="left" nowrap="true">
				<A href="http://mail-archives.apache.org/mod_mbox/tuscany-user">User List</A> | <A href="http://mail-archives.apache.org/mod_mbox/tuscany-dev">Dev List</A> | <A href="http://issues.apache.org/jira/browse/Tuscany">Issue Tracker</A>&nbsp;&nbsp;
				</TD>
			</TR>
		</TABLE>
		<!-- breadCrumbs macro end -->


        <TABLE border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
            <TR>
                <TD align="left" valign="top">

					<!-- pageContent macro -->
					<DIV id="PageContent">
												
						<DIV class="pagecontent">
							<DIV class="wiki-content">
								<TABLE class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><TBODY><TR><TD class="confluenceTd" valign="top" width="15%"><P></P>
<DIV class="panel" style="background-color: #ECF4D1;border-color: #C3CDA1;border-style: solid;border-width: 1px;"><DIV class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: #C3CDA1;background-color: #C3CDA1;"><B>General</B></DIV><DIV class="panelContent" style="background-color: #ECF4D1;">
<P><A href="home.html" title="Home">Home</A><BR>
<A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License </A><BR>
<A href="tuscany-downloads-documentations.html" title="Tuscany Downloads & Documentations">Downloads</A><BR>
<A href="tuscany-downloads-documentations.html" title="Tuscany Downloads & Documentations">Documentation</A><BR>
<A href="tuscany-books-and-articles.html" title="Tuscany Books and Articles">Books and Articles</A><BR>
<A href="tuscany-dashboard.html" title="Tuscany Dashboard">Dashboard</A><BR>
<A href="issue-tracking.html" title="Issue Tracking">Found a Bug?</A><BR>
<A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Sponsorship </A><BR>
<A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks </A><BR>
<A href="privacy-policy.html" title="Privacy Policy">Privacy Policy</A></P>
</DIV></DIV>
<DIV class="panel" style="background-color: #ECF4D1;border-color: #b4b4b5;border-style: solid;border-width: 1px;"><DIV class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: #b4b4b5;background-color: #C3CDA1;"><B>Community</B></DIV><DIV class="panelContent" style="background-color: #ECF4D1;">
<P><A href="getting-involved.html" title="Getting Involved">Get Involved</A><BR>
<A href="mailing-lists.html" title="Mailing Lists">Mailing Lists</A><BR>
<A href="committers.html" title="Committers">Committers</A><BR>
<A href="chinese-portal.html" title="Chinese Portal">Chinese Portal </A> <SPAN class="image-wrap" style=""><IMG src="community.data/chinese.jpg" style="border: 0px solid black"></SPAN><BR>
<A href="projects-using-tuscany.html" title="Projects Using Tuscany">Powered By</A></P>
</DIV></DIV>
<DIV class="panel" style="background-color: #ECF4D1;border-color: #b4b4b5;border-style: solid;border-width: 1px;"><DIV class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: #b4b4b5;background-color: #C3CDA1;"><B>Tuscany SCA</B></DIV><DIV class="panelContent" style="background-color: #ECF4D1;">
<P><A href="sca-overview.html" title="SCA Overview">SCA Overview</A><BR>
<A href="sca-java.html" title="SCA Java">SCA Java</A><BR>
<A href="sca-native.html" title="SCA Native">SCA Native</A><BR>
<A href="php-sca.html" title="PHP SCA">SCA PHP</A></P>
</DIV></DIV>


<DIV class="panel" style="background-color: #ECF4D1;border-color: #b4b4b5;border-style: solid;border-width: 1px;"><DIV class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: #b4b4b5;background-color: #C3CDA1;"><B>Tuscany SDO</B></DIV><DIV class="panelContent" style="background-color: #ECF4D1;">
<P><A href="sdo-overview.html" title="SDO Overview">SDO Overview</A><BR>
<A href="sdo-java.html" title="SDO Java">SDO Java</A><BR>
<A href="sdo-cpp.html" title="SDO CPP">SDO C+&#43;</A><BR>
<A href="sdo-php.html" title="SDO PHP">SDO PHP</A></P>
</DIV></DIV>
<DIV class="panel" style="background-color: #ECF4D1;border-color: #b4b4b5;border-style: solid;border-width: 1px;"><DIV class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: #b4b4b5;background-color: #C3CDA1;"><B>Tuscany DAS</B></DIV><DIV class="panelContent" style="background-color: #ECF4D1;">
<P><A href="das-overview.html" title="DAS Overview">DAS Overview </A><BR>
<A href="das-java.html" title="DAS Java">DAS Java</A><BR>
<A href="das-c.html" title="DAS C++">DAS C++ </A></P>
</DIV></DIV></TD><TD class="confluenceTd" valign="top" width="85%">

<H2><A name="TuscanySCAWebApplicationIntegrationStory-WebApplicationIntegrationstorygoals"></A>Web Application Integration story goals</H2>

<UL class="alternate" type="square">
	<LI>Simplify the web application as a client application story</LI>
	<LI>Use a simple approach, familiar to all web application developers</LI>
</UL>


<H2><A name="TuscanySCAWebApplicationIntegrationStory-IntegratingusingServletContextLister"></A>Integrating using ServletContextLister</H2>

<P>This approach register a context listener on the application web.xml that will bootstrap the runtime when the web-app is started, and closes the runtime when the web-app is shutdown.</P>

<P>Necessary updates in web.xml</P>
<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java">
&lt;listener&gt;
 &lt;listener-class&gt;org.apache.tuscany.sca.webapp.TuscanyContextListener&lt;/listener-class&gt;
&lt;/listener&gt;
</PRE>
</DIV></DIV>

<P>Then, once this integration part is defined, developers only need to get a reference to the SCADomain in their JSP and then get a reference to a service and start consuming it<BR>
Below, you can find the JSP code snippet to get a SCARuntime reference :</P>
<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java">
SCADomain domain = (SCADomain) application.getAttribute(<SPAN class="code-quote">&quot;org.apache.tuscany.sca.SCADomain&quot;</SPAN>);
</PRE>
</DIV></DIV>

<P>In order to use this approach, you will need to specify a sca-contribution.xml inside the META-INF directory of your web-app, this file will be used to identify the root of the contribution as well as the list of deployable composites.</P>

<P>Here is a sample sca-contribution.xml used in the calculator-web application:</P>

<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java">
&lt;?xml version=<SPAN class="code-quote">&quot;1.0&quot;</SPAN> encoding=<SPAN class="code-quote">&quot;UTF-8&quot;</SPAN>?&gt;
&lt;contribution xmlns=<SPAN class="code-quote">&quot;http:<SPAN class="code-comment">//www.osoa.org/xmlns/sca/1.0&quot;</SPAN>&gt;
</SPAN>   &lt;deployable composite=<SPAN class="code-quote">&quot;Calculator&quot;</SPAN>/&gt;
&lt;/contribution&gt;
</PRE>
</DIV></DIV>


<P>Tuscany also supports the scenario where you would drop the SCA composite files inside the META-INF\sca-deployables directory, and this would also be used to identify the root of the contribution and the list of deployable composites.</P>

<P><B>pros</B>: Consistent programming model between JSP and Servlets<BR>
<B>cons</B>: require web.xml integration and sca-contribution.xml, although the trend is to make web apps simpler and web.xml is optional in newer specs of J2EE</P>

<H2><A name="TuscanySCAWebApplicationIntegrationStory-IntegratingusingpureJSPcode"></A>Integrating using pure JSP code</H2>

<P>Integration using useBean tag: This approach would be very simple, and would basically ask the developer to add a useBean to instantiate the domain, and a setProperty to set the deployableComposite/</P>
<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java">
&lt;jsp:useBean id=<SPAN class="code-quote">&quot;SCADomain&quot;</SPAN> class=<SPAN class="code-quote">&quot;org.apache.tuscany.host.embedded.SCADomainBean&quot;</SPAN> scope=<SPAN class="code-quote">&quot;application&quot;</SPAN>&gt;
 &lt;jsp:setProperty property=<SPAN class="code-quote">&quot;deployableComposite&quot;</SPAN> value=<SPAN class="code-quote">&quot;Calculator.composite&quot;</SPAN> /&gt;
&lt;/jsp:useBean&gt;
...
&lt;%
 SCADomain domain = (SCADomain) application.getAttribute(<SPAN class="code-quote">&quot;SCADomain&quot;</SPAN>);
 CalculatorService calculatorService = domain.getService(CalculatorService.class, <SPAN class="code-quote">&quot;CalculatorServiceComponent&quot;</SPAN>);
%&gt;
</PRE>
</DIV></DIV>
<P>Optional attributes can be defined by using the &lt;jsp:setProperty&gt; calls, if no attributes are specified, the sca-contribution.xml will be used to hint the root of the contribution as well as to find the deployable composites.</P>

<P>In this scenario, the SCADomain is stopped when the application goes out of scope and the garbage collection process the termination of the SCADomain.</P>

<P><B>pros</B>: simple, does not involve changes on web.xml<BR>
<B>cons</B>: leaves toping the sca domain/runtime to when garbage collection process the application scope bean, also introduce different programming model between JSP and Servlets.</P>



<H2><A name="TuscanySCAWebApplicationIntegrationStory-References"></A>References</H2>

<P><A href="http://java.sun.com/j2ee/1.4/docs/tutorial/doc/" class="external-link" rel="nofollow">http://java.sun.com/j2ee/1.4/docs/tutorial/doc/</A><BR>
<A href="http://java.sun.com/products/jsp/docs.html#syntax" class="external-link" rel="nofollow">http://java.sun.com/products/jsp/docs.html#syntax</A><BR>
<A href="http://java.sun.com/products/jsp/tags/11/syntaxref11.fm14.html" class="external-link" rel="nofollow">http://java.sun.com/products/jsp/tags/11/syntaxref11.fm14.html</A><BR>
<A href="http://java.sun.com/products/javabeans/docs/spec.html" class="external-link" rel="nofollow">http://java.sun.com/products/javabeans/docs/spec.html</A></P>
</TD></TR></TBODY></TABLE>
							</DIV>
						</DIV>
					</DIV>	
		            <!-- pageContent macro end -->
					
                </TD>
            </TR>
        </TABLE>

		<!-- footer macro -->
				<SCRIPT src="http://www.google-analytics.com/urchin.js" type="text/javascript">
		</SCRIPT>
		<SCRIPT type="text/javascript">
		   _uacct = "UA-1174707-5";
		   urchinTracker();
		</SCRIPT>
		
				<A href="http://www.statcounter.com/" target="_blank"><IMG src="http://c26.statcounter.com/counter.php?sc_project=2619156&java=0&security=94bd7e7d&invisible=0" alt="website stats" border="0"></A>    

		<DIV class="footer">
			Copyright � 2003-2012, The Apache Software Foundation&nbsp;&nbsp;</BR>
                        Apache Tuscany and the Apache Tuscany project logo are trademarks of The Apache Software Foundation.
		</DIV>
		<!-- footer macro end -->

    </BODY>
</HTML>