Architektura aplikace MARBES-JIRA plugin Tým: GRSS Členové: František Schneider Jaroslav Ráb Lukáš Gemela Jaromír Staněk Upravil Verze dokumentu Datum F. Schneider 1.0 25.3.2012 F. Schneider 2.0 25.4.2012
1. Obsah 1. Obsah... 1 2. Účel dokumentu... 2 3. Architektura... 2 3.1 Architektura model-view-controller... 2 3.2 Použité technologie... 2 3.3 Okolí systému... 2 4. Databázový model... 3 4.1 Tabulka MC_CATEGORY... 3 4.2 Tabulka MC_RECORD... 3 4.3 Tabulka MC_ATTACHMENT... 3 5. DataObject Model... 4 6. View model... 4 7. Controller... 4 8. UML model... 6 9. Klíčové třídy a komponenty... 7 9.1 Servlety a JSP... 7 9.1.1 Category balíček... 7 9.1.2 Record balíček... 7 9.1.3 Attachment balíček... 7 9.2 DAO a JavaBeans... 7 9.3 Service... 7 10. Struktura... 7 10.1 atlassian-plugin.xml... 7 10.2 Struktura pluginu... 8 1
2. Účel dokumentu Tento dokument popisuje návrh architektury aplikace, aplikační logiky včetně databázového modelu a použitých návrhových vzorů. Všechny použité techniky jsou zdůvodněny. 3. Architektura 3.1 Architektura model-view-controller Model-view-controller (MVC) je softwarová architekru, která rozděluje datový model aplikace, uživatelské rozhraní a řídící logiku do tří nezávislých komponent tak, že modifikace některé z nich má minimální vliv na ostatní. Proto jsme se ji rozhodli využít, pro případné snadnější změny a celkovou lepší přehlednost system. 3.2 Použité technologie Celá aplikace (systém JIRA) běží na webovém serveru Tomcat. Aplikace (= plugin jira-znalostnibaze-1.0.0-snapshot.jar) je napsán v jazyce JAVA s tím, že jsou použity další technologie a knihovny, které usnadňují samotný vývoj. Pro přístup do databáze je používán databáze HSQL konektor. Plugin využívá závislostí a implementaci ostatních již existujících pluginů, které se v systému JIRA nacházejí. 3.3 Okolí systému 2
4. Databázový model Všechny tabulky splňují štábní kulturu MarbesConsulting pro pojmenováni. Všechny tabulky mají název s prefixem MC_. 4.1 Tabulka MC_CATEGORY Obsahuje seznam všech dostupných kategorií a uchovává informace o nich. ID_MC_CATEGORY identifikátor kategorie NAME název kategorie DESCRIPTION popis kategorie ICON cesta k souboru určující ikonu 4.2 Tabulka MC_RECORD Je vázána na tabulku MC_CATEGORY a obsahuje seznam všech záznamů. ID_MC_RECORD identifikátor záznamu ID_MC_CATEGORY identifikátor kategorie pod kterou záznam padá DESCRIPTION popis záznamu NAME název záznamu PUBLICATION_TIME datum kdy byl záznam zveřejněn LAST_EDIT_TIME poslední modifikace záznamu USER uživatel, který záznam vytvořil IS_PUBLISHABLE určuje, zda je záznam viditelný i pro ostatní uživatele LANGUAGE jazyk záznamu 4.3 Tabulka MC_ATTACHMENT Tabulka obsahující seznam všech příloh pro daný záznam. ID_MC_ATTACHMENT identifikátor přílohy TYPE typ přílohy (doc, pdf, xls) PATH cesta na disku k příslušné příloze ID_MC_RECORD identifikátor záznamu, ke ktérému příloha patří 3
5. DataObject Model Tabulky databáze jsou mapovány na objekty, které obsahují stejné atributy jako samotné tabulky. Každá instance objektu reprezentuje jeden záznam identifikovaného pomocí primárního klíče v databázi. 6. View model View model je realizován pomocí.jsp souborů, které používají webový framework WEBWORK. Každý JSP soubor je nutné registrovat do souboru atlassian-plugin.xml (význam a struktura je popsána níže) pod nějakou vykonávanou akci. 7. Controller Controller je vrstva, která se stará o napojení aplikační logiky s uživatelským rozhraním view. V této vrstvě se nachází JAVA soubory, které se o toto starají v rámci system JIRA. Aby systém JIRA tyto třídy správně interpretoval je třeba aby byly všechny odděděny od abstraktní třídy AbstractMCWebAction(ta je navíc odděděná od JiraWebActionSupport). 4
5
8. UML model Zjednodušený UML model tříd. 6
9. Klíčové třídy a komponenty 9.1 Servlety a JSP Starají se o aplikační logiku a zpracovávají jednotlivé požadavky, které přijdou od uživatele z vyšší vrstvy view. Všechny dědí od AbstractMCWebAction. JSP jsou psány pomocí frameworku WEBWORK. Jednotlivé začleňování má pak na starosti PICO CONTAINER. 9.1.1 Category balíček Třídy pro práci a manipulaci s kategoriemi. CreateCategory.java DeleteCategory.java ListCategory.java ViewCategories.java 9.1.2 Record balíček CreateRecord.java DeleteRecord.java PublishRecord.java ViewRecord.java ViewRecordsAdmin.java 9.1.3 Attachment balíček 9.2 DAO a JavaBeans Práce s perzistentními objekty. 9.3 Service Třídy které jsou používány napříč celým pluginem. LoggingService logování (Log4J) IndexRecordService indexace záznamů (Lucene) a vyhledávání RecordService, CategoryService přístup k databázi vytváření perzistentních objektů 10. Struktura 10.1 atlassian-plugin.xml Tento XML soubor popisuje plugin samotný a definuje dostupné rozhranní a jejich implementace. V tomto souboru se registrují jednotlivé JSP soubory, třídy rozhranní pro DAO objekty a jejich implementace. Dále obsahuje seznam rozhraní pro service třídy a jejich implementace. Tento způsob je používán v pluginu pro vytváření instancí tříd přes reflexi. 7
Zde se rovněž registrují odkazy a akce které se mají provést po kliknutí na odkaz (registrace servletů). 10.2 Struktura pluginu jar - obsahuje JSP soubory, obrázky, java script, css styly src - zdrojové soubory o main java java zdrojové soubory resources atlassian-plugin.xml o templates velocity šablony xml ostatní xml soubory, definice entit a tabulek pro HSQL databázi test adresář pro testování (JUnity ) target přeložené soubory o jira-znalostni-baze-1.0.0-snapshot.jar hotový plugin pro JIRU 8