Project

General

Profile

How to Spring » History » Version 9

Henning Blohm, 05.09.2012 18:11

1 2 Henning Blohm
h1. How to Use the Spring Framework in Z2
2
3
There is actually nothing sooo particular about using Spring in Z2. But when knowing how Z2 modularity works, there is much to gain by spending a few minutes reading this How-To. However it is required that you are familiar with the Spring framework as such.
4
5
h2. Pre-Requisites
6
7 3 Henning Blohm
In order to have the Spring libraries available you need to add the repository _z2-addons.spring_ to your environment. Some samples, for example the z2-samples.jta-spring sample explained in [[How to TransactionManager]] does so. To use the master branch version, add a *springRepository.properties* component descriptor to your *environment* module saying
8
9
<pre>
10
com.zfabrik.systemStates.participation=com.zfabrik.boot.main/sysrepo_up
11
12
# git stored component repository
13
com.zfabrik.component.type=com.zfabrik.gitcr
14
15
# true <=> optional repository. If gitcr.uri is invalid, then this gitcr will be ignore silently  
16
gitcr.optional=true
17
18
# this can also point to a remote repository like 
19
# ssh://myserver/some/git/repo
20
gitcr.uri=http://git.z2-environment.net/z2-addons.spring
21
22
# the git branch to use (e.g. 'master')
23
gitcr.branch=master
24
</pre>
25
26
For your own system, you may need to adapt the repository URL and the branch selection accordingly.
27
28
If that sounds like meaningless gibberish to you - sorry please consult the documentation at http://www.z2-environment.eu/v20doc and go back to [[First_steps_with_z2]].
29
30 9 Henning Blohm
Before you get shocked by the amount of details in this How-To, please remember that there is practical samples available to help you check how things can really be assembled to work nicely:
31
32
* z2-samples.jta-spring (LINK)
33
34 4 Henning Blohm
When you added that repository the following modules are available:
35
36
* org.springframework.orm
37
* org.springframework.security
38
* org.springframework.foundation   
39
* org.springframework.transaction
40
* org.springframework.jdbc         
41
* org.springframework.web
42
* com.zfabrik.springframework      
43
* com.zfabrik.springframework.web  
44
45
46
With the exception of those starting with "com.zfabrik", these do, more or less, correspond to the typical Spring modules found out there. 
47
48 2 Henning Blohm
h2. Using Spring in Web Applications
49
50 5 Henning Blohm
This is the simplest and really just the standard case. If you do not strive for re-use across modules that use Spring, then there is not much to worry about. 
51
52
As usual, you define an application context in the WEB-INF folder of the Web application and set up a context listener in WEB-INF/web.xml to have the application 
53
context initialized as the Web app is started.
54
55 6 Henning Blohm
In order to have the minimal set of dependencies satisfied - i.e. not assuming you want to use the (very cool) AspectJ based Spring configuration, you should _add_ (i.e. augment whatever refs you already have) the following references to *java/z.properties*:
56 5 Henning Blohm
57
<pre>
58
java.privateReferences=\
59
	com.zfabrik.springframework.web,\
60
	org.springframework.foundation,\
61
	org.springframework.web
62
63
</pre>
64
65
The reference to *com.zfabrik.springframework.web* is not strictly needed but adds the following capabilities:
66
67 7 Henning Blohm
* You implicitly get *com.zfabrik.springframework*, i.e. the integration features described below
68 5 Henning Blohm
69 7 Henning Blohm
* You can use a parent application context to your Web application application context as easily as you would hope (see below).
70
71
72
73
74 2 Henning Blohm
h2. Using Spring in Re-use Modules
75
76
h2. Using Spring's Aspect/J Configuration
77 7 Henning Blohm
78
h2. Using a Parent Application Context in a Web Application Application Context
79
80
Sometimes, later, when you find that your module has a web app but in addition you want to expose services, from the very same module, i.e. when you have spring configured objects in the web app but also a classpath defined application context that should serve as a _parent application context_ to the one of the web app (admittedly an advanced case), then you will find that that is slightly tricky to achieve (see e.g. http://blog.springsource.org/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/). 
81 8 Henning Blohm
82 7 Henning Blohm
The class *com.zfabrik.springframework.web.ComponentParentContextContextLoaderListener* is a drop-in replacement for Spring's ContextLoaderListener implementation that simplifies that use-case as explained in http://z2spring.z2-environment.net/javadoc/com.zfabrik.springframework.web!2Fjava/api/com/zfabrik/springframework/web/ComponentParentContextContextLoaderListener.html.