Project

General

Profile

How to use the hub cr » History » Version 10

Henning Blohm, 20.07.2013 18:41

1 2 Henning Blohm
h1. How to use the Hub Component Repository (beta)
2 1 Henning Blohm
3 3 Henning Blohm
h2. Principles
4
5 2 Henning Blohm
(See also "Z2V2.1 is out – working on v2.2":http://www.z2-environment.net/blog/2012/12/z2v2-1-is-out-working-on-v2-2/)
6
7
By default, a Z2 installation (a z2 Home) accesses the version controlled storage that holds the system definition directly to download and prepare (and compile) modules as needed. This is the underpinnings of the system centric, pull-deployment based approach. In some situations however, it is not desirable to have source code on production servers at any time. This may be for compliance reasons or for fear of risking theft of intellectual property.
8
9
This is where the HubCR comes in. As a principle, all modules, all component resources, essentially anything the Z2 runtime knows about is served by component repository implementations.  There are implementations for Subversion, Git, file system folders, development workspaces and now, the latest addition, for another Z2 server that provides a consolidated, source-code free and pre-compiled view onto production resources (the HubCR provider).
10
11
So, instead of having production systems read and process source code directly, an intermediate node provides a semantically equivalent but pre-processed view onto the system definition:
12 1 Henning Blohm
13 4 Henning Blohm
p=. !{width:600px;}hubcr2.png!
14 3 Henning Blohm
15
The way the HubCR does that is by maintaining a pre-compiled and source-code stripped snapshot of the original production configuration. At the same time, the HubCR is just a regular z2 Home that runs the production config.
16
17
To the real production nodes (on the right in the diagram) however, the HubCR presents everything but the HubCR and other remote component repositories.
18
19
As a result, production systems can be completely separated from the source level details of the system definition. They don’t even see authentication details to the configuration store – only those necessary to access the HubCR service. At the same time, the pull semantics are preserved and updates can flow in and will be distributed consistently as for any other Z2-based system.
20
21
h2. How to configure and use
22 5 Henning Blohm
23
The HubCR consists of three parts: For once, there is a repository client implementation that is now part of the Z2 core (necessarily so that bootstrapping from a HubCR is possible). Secondly there is a z2-base level module that implements the serving side and thirdly there are some important rules that allow to implement the HubCR in a system that can be used in the default development flow as well.
24
25
The latter is a crucial cool feature: Just because a production system makes use of the HubCR, from where we do have access to the configuration source (i.e. the left side of the picture), we can still supply, implement and verify hot fixes without going through the HubCR.
26 6 Henning Blohm
27
h3. Consuming from a Hub
28
29 7 Henning Blohm
In order to connect a z2 <home> to a HubCR, you simply configure a repository to read from as in all the other cases. In case of the HubCR however, the home would only read from one repository (whereas the HubCR serving side may read from many). A HubCR consuming declaration of @com.zfabrik.boot.config/hubRepository.properties@  (see in particular [[How to create your own system]] to learn about repository topology) may look like this:
30 6 Henning Blohm
31
<pre><code class="bash">
32
com.zfabrik.systemStates.participation=com.zfabrik.boot.main/bootrepo_up
33
#
34
# hub stored component repository
35
#
36
com.zfabrik.component.type=com.zfabrik.hubcr
37
#
38
# The URL to the source repo. Typically this is of the form http://<server>:<port>/z_hubcr
39
#
40
hubcr.url=http://myhub:8080/z_hubcr
41
#
42
# Connection timeout in ms for connecting to the providing side (defaults to 10000)
43
#
44
hubcr.timeout=10000
45
#
46
# The remote user to use (optional but required by default)
47
#	
48 8 Henning Blohm
hubcr.user=hubcr_accessor
49
hubcr.password=admin
50 6 Henning Blohm
#
51
# The priority of the repository (defaults to 500)
52
#
53
hubcr.priority=500
54 1 Henning Blohm
</code></pre>
55 7 Henning Blohm
56 1 Henning Blohm
As mentioned above, when configuring a HubCR in a home, you will typically not connect to any other repository. So check carefully, if there are other effective repository configurations in @Z2_HOME/run/local/com.zfabrik.boot.config@.
57
58 8 Henning Blohm
See also the "ComponentRepositoryImpl":http://www.z2-environment.net/javadoc/com.zfabrik.boot.hubcr!2Fjava/impl/com/zfabrik/impl/hubcr/ComponentRepositoryImpl.html javadocs.
59
60 1 Henning Blohm
h3. Serving from a Hub
61 8 Henning Blohm
62
On the serving side, i.e. the node in the middle of the diagram above, the following configurations need to be applied:
63
64
# The Web application *com.zfabrik.hubcr/web* needs to be enabled, typically by a state dependency. This configuration needs to be applied in your system repository at (equivalently!) "com.zfabrik.hubcr/web/z.properties":https://redmine.z2-environment.net/projects/z2-base/repository/base/revisions/master/entry/com.zfabrik.hubcr/web/z.properties 
65
# Secondly the operational configuration at *com.zfabrik.hubcr/manager* should be revisited. As above, this needs to be done in your system repository at (equivalently!) "com.zfabrik.hubcr/manager.properties":https://redmine.z2-environment.net/projects/z2-base/repository/base/revisions/master/entry/com.zfabrik.hubcr/manager.properties. Details are given in the "Javadocs":http://www.z2-environment.net/javadoc/com.zfabrik.hubcr!2Fjava/impl/com/zfabrik/impl/hubcr/store/HubCRResource.html. 
66
67
One important concept to understand is how new revisions of the contents the HubCR serves come into existence. It is important to understand that not every update in the repositories that are read from the HubCR server create a new revision for HubCR consumers. As the HubCR needs to provide a consistent view onto its repository content, regardless of when a consumer asks for a specific resource, the HubCR builds a complete repository content structure at specific points in time to be served to its clients.
68
69
There are two alternatives:
70
71
h4. hubcr.scanOnSync=true
72
73
In that case, every synchronization of the HubCR serving Z2 updates the HubCR provided repository content. This procedure is simple and effective. 
74
75
h4. hubcr.scanOnSync=false
76
77 9 Henning Blohm
If you would prefer to sync the HubCR server without effecting consumers, you can choose this mode. In that case, updates on the HubCR repository content can be triggered from the (very basic) HubCR management interface (same login as /adm, user "z*" with password "z" by default) at "http://<server>:<port>/z_hubcr":http://localhost:8080/z_hubcr:
78
79
p=. !{width:600px;}manage_hubcr.png!
80
81 10 Henning Blohm
Finally, the JMX MBean @zfabrik:type=com.zfabrik.impl.hubcr.store.HubCRResource@ offers methods to check HubCR status and to trigger an update.
82 8 Henning Blohm
83
84
h3. One system, many homes with different provisioning