Project

General

Profile

Sample-spring-basic » History » Version 17

Henning Blohm, 09.11.2013 14:11

1 8 Henning Blohm
h1. A basic Spring with Z2 modularity sample
2 2 Henning Blohm
3
The sample contained in the repository "z2-samples.spring-basic":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic is a clean room example on how to use the Spring integration features described in [[how_to_spring]].
4
5 10 Henning Blohm
There is no further pre-requisite to running this sample, and you may proceed as described in [[How to run a sample]]. Here's the really fast version:
6
7 11 Henning Blohm
<pre><code class="ruby">
8 10 Henning Blohm
mkdir install
9
cd install 
10
git clone -b master http://git.z2-environment.net/z2-base.core
11
git clone -b master http://git.z2-environment.net/z2-samples.spring-basic
12
13 11 Henning Blohm
# on Linux / Mac OS:
14 10 Henning Blohm
cd z2-base.core/run/bin
15
./gui.sh
16
17
# on Windows:
18 12 Henning Blohm
cd z2-base.core\run\bin
19 10 Henning Blohm
gui.bat
20
</code></pre>
21
22 15 Henning Blohm
If you want to inspect the code using Eclipse, please create a workspace in install (i.e. *install/workspace*) and import the Git repositories and projects (see also [[Step_3_-_First_steps_with_Z2_on_Git|First steps]]).
23 2 Henning Blohm
24 16 Henning Blohm
There are three modules contained in this sample. For the moment only consider the following two:
25 2 Henning Blohm
26
h2. com.zfabrik.samples.spring-basic.services
27
28 6 Henning Blohm
This module has a classpath defined "applicationContext":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic/revisions/master/entry/com.zfabrik.samples.spring-basic.services/java/src.impl/META-INF/applicationContext.xml and exposes an annotation defined bean "ComputationServiceImpl":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic/revisions/master/entry/com.zfabrik.samples.spring-basic.services/java/src.impl/com/zfabrik/samples/impl/services/ComputationServiceImpl.java bean from it as a service to be consumed from another module: The *computations* bean.
29 2 Henning Blohm
30 17 Henning Blohm
The application context enables discovery of Spring beans that are marked by annotations such as @Service, @Component, @Repository:
31
32
<pre><code class="xml">
33
<beans ...>
34
	<!-- Turn on annotation based config -->
35
	<context:annotation-config/>
36
	<!-- Turn on auto discovery -->
37
	<context:component-scan base-package="com.zfabrik.samples.impl"/>
38
</beans>
39
</code></pre>
40
41
The *computations" bean implementation implements the interface "IComputationService":https://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic/revisions/master/entry/com.zfabrik.samples.spring-basic.services/java/src.api/com/zfabrik/samples/services/IComputationService.java and is itself not visible to consumers. It's structure is roughly like this:
42
43
<pre><code class="java">
44
@Service("computations")
45
public class ComputationServiceImpl implements IComputationService {
46
47
...
48
49
}
50
</code></pre>
51
52
The *computations* bean is exposed via the Z2 component "com.zfabrik.samples.spring-basic.services/computations":https://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic/revisions/master/entry/com.zfabrik.samples.spring-basic.services/computations.properties:
53
54
<pre><code class="ruby">
55
com.zfabrik.component.type=org.springframework.bean
56
57
#
58
# the context that defines the bean (more than one
59
# bean can be exposed like this)
60
#
61
bean.context=com.zfabrik.samples.spring-basic.services/applicationContext
62
63
#
64
# the bean name
65
#
66
bean.name=computations
67
</code></pre>
68
69
Note that the Z2 Bean component names its application context. At runtime this means that an attempt to retrieve the bean will make sure the application context is loaded - and not any earlier.
70
71 4 Henning Blohm
h2. com.zfabrik.samples.spring-basic.frontend
72 1 Henning Blohm
73 17 Henning Blohm
This module has a Web application with an application context defined in "WEB-INF/applicationContext":https://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic/revisions/master/entry/com.zfabrik.samples.spring-basic.frontend/web/WebContent/WEB-INF/applicationContext.xml. It uses Spring AspectJ based annotation driven configuration to inject dependencies into instances of "ControllerServlet":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic/revisions/master/entry/com.zfabrik.samples.spring-basic.frontend/java/src.impl/com/zfabrik/samples/impl/frontend/ControllerServlet.java.
74 1 Henning Blohm
75 17 Henning Blohm
Note the Java component descriptor that, apart from referencing the service module, holds the minimum declaration to make sure of Spring with AspectJ supported, compile-time-woven annotation based configuration:
76
77
<pre><code class="ruby">
78
com.zfabrik.component.type=com.zfabrik.java
79
80
java.privateReferences=\
81
	com.zfabrik.servletjsp,\
82
	org.springframework.transaction,\
83
	org.springframework.orm,\
84
	org.springframework.web,\
85
	com.zfabrik.springframework,\
86
	com.zfabrik.samples.spring-basic.services
87
88
java.privateIncludes=\
89
	org.springframework.foundation/aspects
90
91
java.compile.order=java,spring_aspectj
92
</code></pre>
93
94
95
It's "application context":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-spring-basic/revisions/master/entry/com.zfabrik.samples.spring-basic.frontend/web/WebContent/WEB-INF/applicationContext.xml imports the *computations* service from the other module above and enables the use of Spring configuration (note: Unlike above it does not enable discovery of Spring beans):
96
97
<pre><code class="xml">
98
<beans ... >
99
	<!-- turn on @Configurable support -->
100
	<context:spring-configured/>
101
	<!-- Turn on annotation based config -->
102
	<context:annotation-config/>
103
 	<!-- application config: Bind the bean at samples.spring.simplemodules.services/computations --> 
104
	<bean id="computations" class="com.zfabrik.springframework.ComponentFactoryBean">
105
		<property name="componentName" value="com.zfabrik.samples.spring-basic.services/computations"/>
106
		<property name="className" value="com.zfabrik.samples.services.IComputationService"/>
107
	</bean>
108
</beans>
109
</code></pre>
110 7 Henning Blohm
111 9 Henning Blohm
h2. Finally
112
113
Open a browser and navigate to http://localhost:8080/frontend to verify you get this:
114
115 1 Henning Blohm
!frontend.png!
116 16 Henning Blohm
117
h1. An extended Spring with Z2 modularity and some Spring Security sample
118
119
The third module *com.zfabrik.samples.spring-basic.secured* contained in the sample repository implements a very similar basic frontend to the one above but illustrating in addition:
120
121
* How to use Spring Security to secure the access to a Web application
122
* How to use Spring Security to secure methods of a bean
123
* How to use Spring Security with Spring AspectJ weaving
124
125
tbc