Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
73c65ad
External repository support (Vaadin module) 1.0
Jun 7, 2017
bfc16d3
Integration of CRCE with WebUI (Vaadin) module 1.0
Jun 19, 2017
8e5e0bd
Stable assembly (minor adjustments )
Jun 26, 2017
039605d
Repository UI (pluginForm, creation bufferForm)
Jul 12, 2017
4c6de4e
Merge modules (external and UI) implementations uploadind artefact in…
Aug 8, 2017
e0ef734
Completed acquisition with support Aether, store artefact to buffer
Aug 29, 2017
4eb1a11
Group listing from Central Maven Repository
Aug 31, 2017
30c3e2c
Fix of recognition extension artefact by resolving and uploading func…
Aug 31, 2017
a8e67dc
Indexing function of the central Maven repository
Sep 11, 2017
6b18d75
Repository Web UI (Buffer Form, Store Form, Resource details)
Sep 25, 2017
41b041b
webui and support_external_repository with self-contained modules
Mar 2, 2018
5377917
CRCE from branch dev
Jun 25, 2018
688401b
Small modifications to the new webui module
Aug 7, 2018
e1255d4
Module crce-webui-v2 - edit in the README file
Aug 7, 2018
b306444
added Eclipse project files to ignore
Aug 7, 2018
445b294
Update README.md
pbrada Aug 9, 2018
837f196
Editing the Web UI Module
Aug 14, 2018
8eeaf82
Test
Aug 15, 2018
47f5478
Update from dev
Aug 15, 2018
0487a11
Bug UI - Correction to check form filling Central Maven
Aug 20, 2018
232ebdb
Small modification of the webui module (Path form in the Settings menu)
Aug 21, 2018
7720fc4
solution request - show current buffer contents while in upload
Oct 19, 2018
636c8e6
Fix - BuferForm, StoreForm in the module webui-v2
Oct 24, 2018
4598d88
Added enterprise architect project.
Cajova-Houba Oct 24, 2018
5fe7401
Added functionality - downloading artifacts from the Store
Oct 25, 2018
f5a4595
DaoMongoDb - read connection string from environment settings
vairad Nov 3, 2018
756d1d5
Added script for listing artifact and their parents
Nov 6, 2018
ef7cf3b
Outupt of crce-artifact-finder-script.py added
Cajova-Houba Nov 6, 2018
1ebb66f
Added temporal EA project with analysis of artifact structure in crce
Cajova-Houba Nov 6, 2018
3e98a31
Cleanup. Added detailed diagram of modules structure.
Cajova-Houba Nov 6, 2018
14c698c
Added component model proposal to EA.
Cajova-Houba Nov 7, 2018
d42d0d8
#2: Fixed inner dependencies of shared-build-settings and core modules.
Cajova-Houba Nov 10, 2018
7aab60a
#2: Inner dependencies of modules in module folder fixed.
Cajova-Houba Nov 14, 2018
8b5259b
#6: Added default implementation of Compatibility, Diff and Compatibi…
Cajova-Houba Dec 1, 2018
ff25462
Added updated EA project.
Cajova-Houba Dec 1, 2018
192f14d
#5: Added test for OsgiManifestBundleIndexer.
Cajova-Houba Dec 2, 2018
f9af905
EA model update.
Cajova-Houba Dec 3, 2018
aba11b4
#5: Fixed Ignore dependency.
Cajova-Houba Dec 3, 2018
d1ed6f1
Cajova-Houba/crce#4 move crce-concurrency from modules to core
vairad Dec 3, 2018
243f5d0
Cajova-Houba/crce#7 move provision to /provision
vairad Dec 3, 2018
a3b9f6f
#3: Added dockerfile for building CRCE image.
Cajova-Houba Dec 3, 2018
19da360
Cajova-Houba/crce#7 move felix configuration to provision
vairad Dec 5, 2018
a91bc9a
Cajova-Houba/crce#7 add mising dependencies for provisioning projects
vairad Dec 5, 2018
ff2f063
Cajova-Houba/crce#7 rename root folder provision to deploy
vairad Dec 5, 2018
942a6ac
EA model update.
Cajova-Houba Dec 9, 2018
9c6f308
#3: Dockerfile updated and moved from docker-dev because direct build…
Cajova-Houba Dec 9, 2018
120586a
#8: EA model updated. getIndexedAttributes() method added to Resource…
Cajova-Houba Dec 10, 2018
08f5320
#8: Added default implementation of getIndexedAttributes() to Abstrac…
Cajova-Houba Dec 12, 2018
54a318a
clean EAP project and move to arch folder
vairad Dec 18, 2018
a0de0fe
Cajova-Houba#4 - move crce-compatibility-api to core
vairad Dec 18, 2018
13915e7
Cajova-Houba#4 - update EA project move crce-compatibility-api
vairad Dec 18, 2018
1885188
#8: Removed unused imports.
Cajova-Houba Dec 18, 2018
fb83cf6
#3: Dockerfile moved to deploy dir. Newer version of Felix used.
Cajova-Houba Dec 18, 2018
63042df
#8: Fully qualified names fixed so pmd is ok.
Cajova-Houba Dec 18, 2018
9bd1377
Add documentation placeholder
vairad Dec 29, 2018
a0b3a69
#8: crce-webui module moved to core, version increased to 2.1.2-SNAPS…
Cajova-Houba Jan 3, 2019
8632d3e
no issue - linux auto build script
vairad Jan 7, 2019
2e22575
documentation base
vairad Jan 7, 2019
2bfd121
#4: Fixed dependency issues in mvn (wrong version of moved modules)
Cajova-Houba Jan 8, 2019
ec73a99
#8: Fixed maven dependencies for moved crce-webui module.
Cajova-Houba Jan 8, 2019
7969150
Documentation update.
Cajova-Houba Jan 10, 2019
bdec2cb
update EA model
vairad Jan 10, 2019
ba614a7
#4: Dependencies replaced with crce-core dependency.
Cajova-Houba Jan 10, 2019
cab94e3
#3: Env variable with db connection string added.
Cajova-Houba Jan 10, 2019
3add7c9
#3: Added directory for additional bundles that can be installed in r…
Cajova-Houba Jan 10, 2019
73da802
update doku - spellcheck, move mongo connection, add run mongoDB
vairad Jan 17, 2019
4127fda
update build and run steps
vairad Jan 17, 2019
991d40e
#11: Inner classes from ResourceWrap moved to separate files which ma…
Cajova-Houba Jan 17, 2019
8a6e5bc
#10: Added dependency to jax-abi which should solve build problems wi…
Cajova-Houba Jan 17, 2019
a7ef4b6
Created module for versioning of composite components
Feb 7, 2019
05cb929
Modify crce-component-versioning and crce-webui-v2. Add functionality.
Feb 12, 2019
947842a
Modify crce-component-versioning and crce-webui-v2. Add functionality.
Feb 18, 2019
43b0096
#12: Versions poms fixed so that dependencies point only to current v…
Cajova-Houba Feb 25, 2019
05d5222
#12: Versions of wrapped, third party artifacts updated. Direct depen…
Cajova-Houba Mar 17, 2019
d6ef857
Merge branch 'kiv-sar-project' into rpesek-merge-to-dev
Cajova-Houba Mar 17, 2019
9a9b9ec
#12: Merge of rpesek, kiv-sar-project and dev working.
Cajova-Houba Apr 13, 2019
4414f37
#13: Project can be compiled by java 11 and OSGI environnment can be …
Cajova-Houba May 28, 2019
38a7c62
#13: Unused artifacts removed. Dependency on 'org.ow2.asm:asm-all' re…
Jul 30, 2019
8b702d8
#13: Cleanup and pmd.
Jul 30, 2019
09db6ab
#13: OsgiManifestBundleIndexer pmd.
Jul 30, 2019
68bca18
#13: Readme.
Aug 18, 2019
6e5cb0c
#13: Fixed script for preparing bundles. Enabled remote debugging.
Oct 5, 2019
c3e068f
#13: Used working version of annotations bundle.
Oct 6, 2019
2b373c9
#14: Configuration files for Configuration Admin service are now copi…
Oct 6, 2019
8668f09
#17: Used the newest version of glassfish jersey modules. Added jerse…
Oct 24, 2019
00bb026
#13: Debugging info added.
Oct 24, 2019
77bce56
#13: Added uncommitted pax profile file and pax configuration fixed).
Nov 4, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ tmp/
local.properties
.settings/
.loadpath
.classpath
.project

# Locally stored "Eclipse launch configurations"
*.launch
Expand Down
91 changes: 85 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,67 @@ CRCE is an experimental repository, designed to support research into component-

## Prerequisities

- **JDK 7** set in `JAVA_HOME` environment variable before starting CRCE (there is a problem with running web UI on JDK 8, need to update dependencies), tested on 1.7.0_80
- **JDK 11** set in `JAVA_HOME` environment variable before starting CRCE, tested on OpenJDK 11.0.4
- **MongoDB**, tested on v2.6.10, v3.4.10
- **Maven 3**, tested on 3.5.2

On linux, switching to JDK 7 for development/build can be done via `sudo update-alternatives --config java`.
On linux, switching to JDK 11 for development/build can be done via `sudo update-alternatives --config java`.

## Build

Build process consists of two parts. Compiling and building the code itself and building the docker image.

### Build CRCE

This process can be done automatically by running the `build-code.bash` script placed in the project root directory.

1. `crce-parent` in `/pom` directory
2. `shared-build-settings` in `/build`
3. everything in `/third-party` (bash: `.../third-party$ for d in * ; do cd $d; mvn clean install; cd .. ; done`)
4. `crce-core-reactor` in `/core`
5. `crce-modules-reactor` in `/modules`
6. `provision-reactor` in `/deploy`

On linux, step 3. can be perfomed via `.../third-party$ for d in * ; do cd $d ; mvn clean install ; cd .. ; done`. In case of maven error "Received fatal alert: protocol_version", use `mvn -Dhttps.protocols=TLSv1.2 ...` after https://stackoverflow.com/a/50924208/261891.


### Build docker image

Docker image is placed in directory `/deploy` but before it can be used, bundles must be collected.
Bundles can be collected by running the following commands in `/deploy` directory:

```bash
mvn clean pax:directory
./prepare-bundles.sh

```

The `prepare-bundles.sh` script is needed due to the issues further described in the Issues section.

To finally build the image itself, execute the following commnad in `/deploy` directory:

```bash
docker build . -t ${image-tag}
```

## Start up

Run CRCE using Maven plugin for pax in `crce-modules-reactor` module (i.e. `/modules` directory):
Assuimg the dokcer image is already build, run it by following command:

`mvn pax:provision`
```bash
docker run -it \
-p 8080:8080 \
--add-host mongoserver:172.17.0.1 \
-v /felix/deploy:/felix/deploy \
${image-tag}
```

The output log should write up some info about dependencies terminated by lines similar to the following:
The `-p` parameter maps the port of docker virual machine to the real port on the computer.
The `--add-host` allows docker to connect to the Mongo database running locally (Docker *usually* uses 172.17.0.1 ip to access localhost from the container). The app expects the database to be listening on port 27017 by default.
The `-v` parameter maps directory in container to the real directory in the host machine so that it can be used to install new bundles via CLI.


If everything works, the output log should write up some info about dependencies terminated by lines similar to the following:

```
Listening for transport dt_socket at address: 65505
Expand All @@ -47,17 +85,58 @@ The cause of the latter is a badly loaded binary of mathematical solver which do

Started up, the application is accessible at:

- web UI: http://localhost:8080/crce
- web UI: http://localhost:8080/crce-webui
- REST web services: http://localhost:8080/rest/v2/

Updated (more or less) REST WS documentation is available at [Apiary](https://crceapi.docs.apiary.io/).

### MongoDB

Mongo DB can either be run locally or in docker using following command:

```bash
sudo docker run -d -p 27017:27017 -v ~/data:/data/db mongo
```

Where `~/data` is directory on host machine to be used as a storage by Mongo.

### lpsolve installation

To solve the issue with mathematical solver, you need to install [lpsolve library](https://sourceforge.net/projects/lpsolve/) to your computer. To do that, follow [their guide](http://lpsolve.sourceforge.net/5.5/Java/README.html#install) step by step.

> Note that on Windows, you do not have to place the libs to `\WINDOWS` or `\WINDOWS\SYSTEM32` as the guide states. Put it wherever you wish and add the directory to your `Path`.

## Debugging

Remote debugging is possible when running CRCE in Docker. To enable remote debug, application needs to be started with following flags:

```bash
-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
```

And expose the port 5005 by adding `-p 5005:5005` to the `docker run` command.

Check the `deploy/Dockerfile` to see the difference between running the app in normal and debug mode.

## Code updates

After modifying a part of code, only the parental module needs to be rebuilt (no need to rebuild all). After that, the pax process must be restarted.

## Configuration

Configuration is done via OSGI service called [Configuration Admin](https://osgi.org/specification/osgi.cmpn/7.0.0/service.cm.html).
Details on how it's implemented in Felix can be found in [Apache Felix Configuration Admin Service](https://felix.apache.org/documentation/subprojects/apache-felix-config-admin.html).

By default, Felix will look into the `config` directory for possible configuration (example of such directory can be found in `deploy/conf.default`)


## Issues

### Required runtime environment capability in some bundles

Some bundles (mostly those from the third parties) either require a particular version of OSGi runtime environment or require the capability `osgi.ee` to be set to a specific value. This may or may not work with newer version of Java and to avoid runtime problems, these requirements need to be removed.

To remove them, it is necessary to edit manifest (`META-INF/MANIFEST.MF`) of such bundle and remove lines containing:
`Require-Capability: osgi.ee;` or `Bundle-RequiredExecutionEnvironment: J2SE-`. This is done in the `deploy/prepare-bundles.sh` script.

An ideal solution would be to either found newer version of such bundles or replace them with different bundles with same functionality. This however may introduce compatibility issues (as some other bundles may depend on the current versions) or may not even be possible (replacement bundle does not exist).
8 changes: 8 additions & 0 deletions arch/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ignore vim
*.swp

#ignore tex build
*.aux
*.gz
*.log

Binary file added arch/IndexerApi.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added arch/Modules.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added arch/crce.eap
Binary file not shown.
Binary file added arch/favlogo.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added arch/sar-2018.pdf
Binary file not shown.
172 changes: 172 additions & 0 deletions arch/sar-2018.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
\documentclass[12pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[IL2]{fontenc}
\usepackage[czech]{babel}
\usepackage{graphicx}

\begin{document}
\begin{figure}[h!]
\centering
\includegraphics[bb= 0 0 820 445 , width=75mm]{favlogo.jpg}
\end{figure}

\vspace{5cm}

{\centering
{\huge Architektura CRCE}\\[1em]
{\large KIV/SAR - semestrální práce}\\[7,5cm]
}

\begin{tabular}{l r}
student: & Radek VAIS, Zdeněk VALEŠ\\
mail: & vaisr@students.zcu.cz, valesz@students.zcu.cz\\
datum: & 1.1.2019\\
\end{tabular}

\thispagestyle{empty}
\newpage

%========================================
%========================================
%========================================
%========================================
%========================================
\section{Zadání} %=====================================================================================================

CRCE\footnote{Component Repository supporting Compatibility Evaluation} je komponentové úložiště vyvíjené v rámci výzkumu na Katedře informatiky a výpočetní techniky na Západočeské univerzitě v Plzni. Jeho hlavní vlastností je podpora kontroly kompatibility verzí různých OSGi komponent nebo webových api.

\subsection{Motivace}

Vývoj projektu probíhá již několik let a vystřídalo se na něm mnoho vývojářů, což způsobilo zanesení větších či menších architektonických dluhů. Projekt již můžeme klasifikovat jako velký. Existuje potřeba, aby střídající se vývojáři (např. v rámci bakalářských prací) snadno a rychle zprovoznili základní instalaci a získali tak prostředí, pro rychlý vývoj nových částí.

\subsection{Cíle projektu}

\begin{itemize}
\item Unifikovat proces sestavení aplikace a spuštění.
\item Zdokumentovat současnou architekturu aplikace.
\item Analyzovat závislosti modulů v projektu a ověřit, zda některé moduly mají být součástí jádra.
\item Připravit Docker image pro vývojáře.
\end{itemize}

\newpage
%========================================
%========================================
%========================================
%========================================
%========================================
\section{Analýza~architektury} %============================================================================================

Celý projekt je rozdělen do čtyř hlavních modulů: sdílené nastavení sestavení, jádro, moduly a knihovny třetích stran. Ne zcela jasné je začlenění mechanismu pro nasazení a spuštění v modulu \texttt{CRCE modules} (jedná se o komponentu \texttt{provision}). Závislostí modulů na jádře pozorujeme dva typy. Prvním typem je závislost na agregačním modulu jádra, druhým je jmenovitá závislost na komponentách jádra. Tyto skutečnosti jsou patrné na celkovém diagramu na Obrázku \ref{fig:wholeCRCE}.

\begin{figure}[h!]
\centering
\includegraphics[width=135mm]{wholeCRCE.png}
\caption{Diagram závislostí všech maven komponent projektu CRCE před provedenými úpravami.}
\label{fig:wholeCRCE}
\end{figure}

Během analýzy modulu pro moduly CRCE jsme identifikovali několik kandidátů na přesun do jádra. Za kandidáty jsme volili takové komponenty, které využívá velká část ostatních modulů a zároveň tyto moduly mají závislosti do jádra. Komponenta webového rozhraní (\texttt{crce-webui}) tomuto pravidlu sice odporuje, představuje ale základní komponentu, bez které by úložiště nešlo použít. Přesouvané komponenty jsou: \texttt{crce-compatibility-api}, \texttt{crce-webui}, \texttt{crce-concurrency} (graficky znázorněno na Obrázku \ref{fig:modulesCRCE}).

Po identifikace kandidátů jsme z přesunu vyřadili komponentu metadata-osgi-bundle, kvůli nedostatečné obecnosti. Komponenta je schopna indexovat pouze OSGI komponenty -- přesun do jádra by byl možný, pokud by uměla indexovat obecné JAR. Komponenta \texttt{crce-webui} bohužel obsahuje silnou závislost na této komponentě, která brání přesunu \texttt{crce-webui} do jádra. Závislost spočívá v použití několika konstant, které jsou v definované v metadata-osgi-bundle. Navrhli jsme tedy přidání metody do rozhraní indexeru pro zjištění jaké elementy indexer zpracovává a silnou závislost jsme nahradili slabou závislostí.

\begin{figure}[h!]
\centering
\includegraphics[width=135mm]{modules.png}
\label{fig:modulesCRCE}
\caption{Diagram původních závislostí uvnitř modulu moduly CRCE. Zeleně jsou označeny přesouvané komponenty. Červeně je označena nevhodná závislost.}
\end{figure}

%========================================
%========================================
%========================================
%========================================
%========================================
\section{Provedené~změny} %=======================================================================================

V projektu jsme provedli několik změn, které by měly vést k zjednodušení práce budoucích vývojářů. Pro přehlednost dodávám, že v této sekci pojem \textit{modul} značí maven modul v kořenovém adresáři CRCE a pojem \textit{komponenta} značí jeden z maven modulů obsahující konkrétní implementaci (\textit{crce-webui}, \textit{crce-metadata-api}, ...).

\subsection{Nový modul pro sestavení}
Do kořene CRCE byl přidán nový modul \textit{deploy}, do kterého byla přesunuta komponenta \textit{provision}, používaná ke spouštění CRCE. Jsou zde agregovány všechny komponenty z jádra a komponenty z modulu \textit{modules}, které jsou zachycené v \textit{crce-default-modules}.

Nově přidaná komponenta \textit{crce-default-modules} tedy slouží jako agregátor komponent z modulu \textit{modules}, které mají být použité ve výsledné distribuci.

V rámci přípravy modulu pro sestavení a spuštění byla povýšena verze Felix na 5.0.0. Starší verze způsobovala problémy se spuštěním interaktivního shellu při spuštění pomocí Dockeru.

\subsection{Přesun vybraných modulů do jádra}
Do jádra byly z modulu \textit{modules} přesunuty komponenty: \textit{crce-compatibility-api}, \textit{crce-webui} a \textit{crce-concurrency}. V případě \textit{crce-webui} bylo nutné odstranit závislost na \textit{crce-core} (jinak by se jednalo o kruhovou závislost) a nahradit ji jednotlivými závislostmi na vybraných komponentách z jádra.

V komponentě \textit{crce-compatibility-api} bylo nutné přidat výchozí (prázdnou) implementaci rozhraní \textit{Compatibility} a \textit{Diff}. Pro tyto implementace byl přidán unit test.

Součástí přesunu komponent do jádra bylo přidání unit testu do \textit{crce-metadata-osgi-bundle}, který dokazuje schopnost této komponenty indexovat pouze OSGI bundly a ne obecné JAR.

\subsubsection{Nahrazení silné závislosti v komponentě crce-webui}
Komponenta \textit{crce-webui} obsahovala silnou závislost na komponentě \textit{crce-metadata-osgi-bundle}. Tato závislost spočívala v použití několika konstant, označujících indexované elementy, definovaných v rozhraní \textit{NsOsgiIdentity}. Konstanty byly použity ve třídě \textit{ResourceServlet} k filtrování zobrazovaných OSGI bundlů.

Po dohodě s vyučujícím jsme tuto závislost nahradili slabou závislostí -- konstanty stejného typu jsme dodefinovali i v komponentě \textit{crce-webui}. Silná závislost byla odstraněna, nicméně pokud se v budoucnu změní komponenta \textit{crce-metadata-osgi-bundle}, bude nutné kontrolovat, zda změna neovlivnila \textit{crce-webui} a případné nesrovnalosti opravit.

Aby bylo podobným závislostem v budoucnosti zamezeno, rozhraní indexeru bylo rozšířeno o metodu, která vrací elementy, jež je indexer schopen detekovat. V rámci této práce byla vytvořena defaultní implementace této vlastnosti v AbstractIndexer, která vrací pouze prázdný seznam. Projekt lze bezpečně přeložit, ale momentálně novou funkci rozhraní plně využívá jen OSGiIndexer.

\begin{figure}[h!]
\centering
\includegraphics[width=135mm]{indexerApi.png}
\label{fig:indexerApi}
\caption{Diagram ukazuje upravené rozhraní indexeru, které nově obsahuje metodu getIndexedAttributes, která slouží k získání seznamu vlastností, které daný indexer zpracovává. Dále naznačuje možnost umístit implementaci indexeru do modulu crce-core nebo crce-modules (fiktivní indexery JarIndexer a AnotherIndexer).}
\end{figure}

\subsubsection{Načítání connection stringu}

Součástí příprav pro dockerizaci bylo přidání konfigurace připojení k databázi MongoDB. Ke konfiguraci připojení lze nyní využít proměnnou prostředí \textit{mongo\_connection}, kde aplikace očekává MongoDB connection string\footnote{viz dokumentace: https://docs.mongodb.com/manual/reference/connection-string/}. V případě, že tato proměnná není nastavena, použije se výchozí hodnota (\textit{mongodb://localhost:27017}, která nese připojení k databázi běžící na localhostu a standardním portu. Výhodou tohoto přístupu je možnost konfigurovat connection string v Dockerfile a při změně pouze znovu sestavit image.


\section{Dockerizace projektu}
Do modulu \textit{deploy} byl přidán Dockerfile, kterým je možné sestavit docker image obsahující spustitelnou verzi CRCE. Do takto spuštěného CRCE lze doinstalovávat nové OSGI komponenty a není nutné celý projekt znovu sestavovat.



%========================================
%========================================
%========================================
%========================================
%========================================
\section{Uživatelská~příručka} %======================================================================================

Provedené změny ovlivnily základní používání projektu při vývoji.

Pro sestavení na platformě Linux lze použít bash script \textit{build.bash}\footnote{Teoreticky není nutná platforma Linux. Pro uživatele Windows by měl být dostačující bash interpret nebo Linux subsystem. Tato možnost nebyla testována.}, který automaticky spustí jednotlivé kroky sestavení pomocí nástroje Maven. Script vždy vykonává všechny kroky od začátku, v případě selhání je vhodné po opravě pokračovat v buildu manuálně.

V případě, že databáze neběží na localhostu, nebo standardním portu, je možné nastavit připojení skrze proměnnou prostředí \textit{mongo\_connection}. Tato proměnná by v případě použití měla obsahovat celý connection string. Pokud není nastavená, pro připojení k databázi bude použita výchozí hodnota: \textit{mongodb://localhost:27017}.

\subsection{Docker}
K sestavení Docker image je možné použít Dockerfile, který se nachází v modulu \textit{deploy}. Sestavení image je provedeno příkazem:

\begin{verbatim}
docker build . -t crce-docker
\end{verbatim}

Výsledný image obsahuje distribuci Apache Felix 5.0.0, JDK 1.7 a všechny OSGI bundly z CRCE. Spuštění lze provést příkazem:

\begin{verbatim}
docker run -it \
-p 8080:8080 \
--add-host mongoserver:172.17.0.1 \
-v /felix/deploy:/felix/deploy \
crce-docker
\end{verbatim}

Parametr \textit{add-host} slouží k přidání záznamu do /etc/hosts v kontejneru a image se pak může k databázi běžící na hostovacím stroji dostat pomocí hostname \textit{mongoserver}. IP adresa 172.17.0.1 je adresa, kterou docker přiřazuje hostovacímu stroji. Do adresáře \textit{/felix/deploy} na hostovacím stroji je možné vložit OSGI bundly a ty následně nainstalovat a spustit skrze Gogo shell. K běžící instanci je možné přistoupit na adrese \textit{http://localhost:8080/crce}.

Před spuštěním docker image je třeba spustit instanci MongoDB. Není podstatné, zda bude spuštěna prostřednictvím Dockeru (např. image 3.4-jessie), lokálním stroji nebo na serveru. Jen je třeba před sestavením ověřit nastavení connection string. Není připravena konfigurace docker-compose, protože se nám v rámci konfigurace a testů nepodařilo zprovoznit GoGo shell při použití compose mechanismu, uživatel by byl ochuzen o diagnostické možnosti OSGi runtime.

%========================================
%========================================
%========================================
%========================================
%========================================
\newpage
\section{Závěr} %======================================================================================================

V rámci projektu jsme naplnili cíl usnadnit novým vývojářům spuštění výchozí aplikace, především přípravou docker image. Nepodařilo se nám zjednodušit proces sestavení celé aplikace na jeden Maven příkaz nicméně pro prostředí Linux jsme vytvořili script, který úkony nutné pro sestavení provede automaticky.
Dále jsme přesunuli několik modulů do jádra CRCE z důvodu jejich provázanosti s ostatními nebo nutnosti pro používání.


\end{document}
Binary file added arch/wholeCRCE.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading