Project

General

Profile

Sample-vaadin-spring-hibernate » History » Version 3

Henning Blohm, 06.10.2012 16:00

1 1 Henning Blohm
h1. A sample using Vaadin with Hibernate JPA and Spring on Z2
2
3
This sample is similar to [[Sample-spring-hibernate]] but differs (or rather extends) in that it show cases
4
the use of the "Vaadin":http://www.vaadin.com user interface toolkit in conjunction with Spring implemented annotation based
5
dependency injection over Z2 modularity. 
6
7
As Spring is used throughout - in all modules - this is another practical application of [[How to Spring]].
8
9
This sample is stored in "z2-samples.vaadin-spring-hibernate":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-vaadin-spring-hibernate.
10
11
h2. Prerequisites
12
13
You need to run Java DB as network server on localhost. This is explained next.
14
15
The application will create a database "z2-samples"
16
17
{{include(How to run Java db)}}
18
19
20
h2. Run it
21
22
Like all samples, also this sample can be run as in [[How to run a sample]]. If you have the database, the fastest way to verify whether it runs is:
23
24
<pre><code class="ruby">
25
mkdir install
26
cd install 
27
git clone -b master http://git.z2-environment.net/z2-base.core
28
git clone -b master http://git.z2-environment.net/z2-samples.vaadin-spring-hibernate
29
30
# on Linux / Mac OS:
31
cd z2-base.core/run/bin
32
./gui.sh
33
34
# on Windows:
35
cd z2-base.core\run\bin
36
gui.bat
37
</code></pre>
38
39
When running, go to http://localhost:8080/vaadin-spring-hibernate. You should see this:
40
41
!vaadin-spring-hibernate.png!
42
43
h2. Details
44
45 3 Henning Blohm
As in the other samples we have a re-use domain module. That is a recurring theme for many good reasons. In this case, the domain module "com.zfabrik.samples.vaadin-spring-hibernate.domain":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-vaadin-spring-hibernate/revisions/master/show/com.zfabrik.samples.vaadin-spring-hibernate.domain is essentially like the similarly named module of [[Sample-spring-hibernate]]. The only difference is some more data access methods in the "ThingyRepository":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-vaadin-spring-hibernate/revisions/master/entry/com.zfabrik.samples.vaadin-spring-hibernate.domain/java/src.api/com/zfabrik/samples/vaadin_spring_hibernate/thingies/ThingyRepository.java.
46 1 Henning Blohm
47 3 Henning Blohm
The Vaadin Web application is defined in the module "com.zfabrik.samples.vaadin-spring-hibernate.web":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-vaadin-spring-hibernate/revisions/master/show/com.zfabrik.samples.vaadin-spring-hibernate.web. It has the usual Spring application context in "web/WebContent/WEB-INF/applicationContext.xml":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-vaadin-spring-hibernate/revisions/master/entry/com.zfabrik.samples.vaadin-spring-hibernate.web/web/WebContent/WEB-INF/applicationContext.xml that imports the thingy repository:
48 1 Henning Blohm
49 3 Henning Blohm
<pre><code class="xml">
50
        <!-- import external components -->
51
        <bean id="thingyRepository" class="com.zfabrik.springframework.ComponentFactoryBean">
52
                <property name="componentName" value="com.zfabrik.samples.vaadin-spring-hibernate.domain/repository" />
53
                <property name="className" value="com.zfabrik.samples.vaadin_spring_hibernate.thingies.ThingyRepository" />
54
        </bean>
55
</code></pre>
56
57
The Vaadin application class "ApplicationImpl":http://redmine.z2-environment.net/projects/z2-samples/repository/z2-samples-vaadin-spring-hibernate/revisions/master/entry/com.zfabrik.samples.vaadin-spring-hibernate.web/java/src.impl/com/zfabrik/samples/impl/vaadin_spring_hibernate/ApplicationImpl.java constructs a simple view hierarchy that containes a table view based on a "lazy query container add-on":https://vaadin.com/directory#addon/lazy-query-container data model that is fed from the domain module. To do so the corresponding query implementation (in lazy query container speak) has the repository injected:
58
59
<pre><code class="java">
60
@Configurable
61
public class ThingiesQuery implements Query {
62
	@Autowired
63
	private ThingyRepository repository;
64
	private Integer size;
65
	private boolean asc;
66
67
// ...
68
}
69
</code></pre>