Folien zum Vortrag
Transcrição
Folien zum Vortrag
Aufbau des Cyclos Projekts Patrick Arnold Gliederung 1. 2. Einleitung Funktionen 2.1 Mitgliederarten 2.2 Allgemeine Funktionen 2.3 Funktionen des Admins 2.4 Funktionen der Member 2.5 Bewertung 3. Technischer Aufbau 3.1 Allgemeines 3.2 Verzeichnisstruktur 3.3 Workflow 3.4 Class-Verzeichnis 1. Einleitung Cyclos ist... Softwaresystem für regionale Entwicklungsgesellschaften Standardlösung für zahlreiche Unternehmen Open Source Regionale Entwicklungsgesellschaften sind... Unternehmen, die innerhalb einer bestimmten Region wirtschaftliche Transaktionen mittels Ersatzwährungen ermöglichen Im Mittelpunkt stehen Tausche (Bartering) und Talente Beteiligt sind sowohl Unternehmen als auch Privatpersonen Gehandelt werden Güter und Dienstleistungen → Kommunikation und Interaktion sind wichtige Komponenten Anforderungen eines regionalen Entwicklungsunternehmens Allgemeine Anforderungen • Übersichtliches, einfaches Layout • Einfache Bedienbarkeit • Hohe Skalierbarkeit (mehrere 10.000 Kunden möglich) • web-basiert • Hoher Sicherheitsgrad Kooperationsplattform als zentraler Bestandteil • Mitglieder begegnen sich • Stellen sich vor, kommunizieren miteinander • Erstellen Angebote und Gesuche • Suchen Angebote und Gesuche • Schließen Verträge ab, überweisen Beträge Außerdem wünschenswert: • Überblick über alle durchgeführten Transaktionen • Überblick über Kontostand • Hilfesystem • u.v.m. 2. Funktionen Mitgliederarten Scharfe Trennung zwischen Admin und Member Broker: Erweitertes Member • Administrative Fähigkeiten • Kann Mitglieder registrieren und verwalten • Ist logisch aber immer noch ein Member Permission Groups • Untergliederung der Admins, Members und Brokers • Admin kann Einstellungen zu jeder Permission Group vornehmen • Admin kann ggf. weitere Gruppen anlegen oder löschen Beispiele • Full Member, Pending Member, Disabled Member, Removed Member, ... Allgemeine Funktionen Währung: units • Kein Wechselkurs • Anlegen neuer Währungen möglich Kategorien: • Angebots-Kategorien • Nachrichten-Kategorien Sprachen: • Software wird in mehreren Sprachen angeboten • Hinzufügen neuer Sprachen grundsätzlich möglich Funktionen des Admins Sehr hoher Einfluss auf Member und Broker • Kann Mitglieder und Broker registrieren, ausloggen und die Permission Group ändern • Kann das Passwort eines Members/Brokers ändern • Kann Kredite gewähren • u.v.m. Hohe Konfigurierbarkeit • Anpassung des Profils • Anpassung der Kategorien, Währungen, Systemsprache, Permission Groups, Kreditlimit etc. Funktionen der Member Profil Erstellen und Suchen von Angeboten/Gesuchen Nachrichtensystem Bezahlung Weitere Funktionen • Inserate • References (Bewertung von Mitgliedern) • Kontaktliste • Darlehen (loans) • Kontostand • Internes Hilfesystem Bewertung Gute Lösung für regionale Entwicklungsgesellschaften • Bietet alle notwendigen Funktionen für ein solches Unternehmen • Weitreichend konfigurierbar • Kostenlos • Anpassbar, erweiterbar (Open Source) Mögliche Nachteile: • Mehrere Währungen verwenden • Verträge 3. Technischer Aufbau Allgemeines Weitgehend in Java und Java Script geschrieben Cyclos Projekt: /nl/strohalm/cyclos • Relative flache Hierarchie • ca. 1.000 Klassen • ca. 70.000 LOF Voraussetzungen: • Java 1.5 oder höher, MySql 4.1 oder höher • Apache Tomcat 5.0 oder höher Dokumentation: • Quellcode entsprechend der allg. Konventionen • Kaum Dokumentation • Programming Guide (Wiki) als einigermaßen akzeptable Programmbeschreibung Kompilieren → Einarbeitung in das Projekt verhältnismäßig aufwendig Verzeichnisstruktur Zwei grundlegende Verzeichnisse: pages und WEB-INF • pages: Das View (JSP-Pages, JS) • WEB-INF: Alle Libraries, Konfigurationsdaten, Controller + Model (Cyclos-Projekt) Workflow – Struts Zentrale Datei: web.xml • Enthält die Links zu den struts-config-Dateien • Enthält grundlegende Konfigurationen • Enthält die Willkommen-Seite (index.jsp) <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-configs/struts-config.xml, /WEB-INF/struts-configs/struts-config_general.xml, /WEB-INF/struts-configs/struts-config_static.xml, /WEB-INF/struts-configs/struts-config_image.xml, ... Cyclos verwendet mehrere struts-config-Dateien, gruppiert nach Funktionsgruppen • Beispiel: struts-config_currency.xml In Struts-Config-Dateien werden Actions und Forms gemapped Struts leitet dabei von Browser-Requests zu den entsprechenden Action-Classes (Controller) weiter <action path="/admin/listCurrencies" type="nl.strohalm.cyclos.controls.accounts.currencies.ListCurrenciesAction" input="admin/_listCurrencies"> <set-property property="secure" value="true" /> </action> Workflow – Bearbeitung von Actions BaseAction als direkte Schnittstelle zum Struts • Aufruf der Methode execute() • User auf Berechtigung überprüfen • Erzeugung eines ActionContext-Objekts • Aufruf des entsprechenden Controllers (executeAction()) Der Controller kümmert sich um die Verarbeitung der Aktion • Aufruf der entsprechenden Service-Klasse, die dann die Aktion durchführt • Es gibt zu jeder Funktionsgruppe ein Service-Interface und eine entsprechende ServiceImpl-Datei • Services werden in der services.xml zu Beans gemapped Beispiel: CurrencyServiceImpl.listAll() public List<Currency> listAll() { if (cachedCurrencies == null) { cachedCurrencies = currencyDao.listAll(); } return cachedCurrencies; } Services können nicht direkt auf die Datenbank zugreifen • Verwendung eines DAO-Objekts • Zu jeder Funktion gibt es ein DAO-Interface und eine implementierende Klasse • Abgeleitet von BaseDAOImpl • DAO-Objekte werden in der dao.xml zu Beans gemapped public List<Currency> listAll() { return list("from Currency c order by c.name", null); } Cyclos-Datenbank: ca 67 Tabellen • Entsprechende Entitäts-Klassen im Verzeichnis cyclos/entities • Anbindung über Hibernate • Alle Hibernate-Dateien sind in der persistence.xml eingetragen, um die Dateien im Hibernate persistent zu machen Rückgabe des Ergebnisses an den Controller Controller liefert einen ActionForward zurück, der vom TilesFramework bearbeitet wird Beispiel: ListCurrencyAction protected ActionForward executeAction(ActionContext context) throws Exception { HttpServletRequest request = context.getRequest(); List<Currency> currencies = currencyService.listAll(); request.setAttribute("currencies", currencies); request.setAttribute("editable", getPermissionService().checkPermission("systemCurrencies", "manage")); return context.getInputForward(); } Workflow – Tiles Zentrale Datei: struts-config.xml • Enthält die Links zu den einzelnen tiles-def-Dateien <plug-in className="org.apache.struts.tiles.TilesPlugin"> <set-property property="definitions-config" value=" /WEB-INF/tiles-defs/tiles-defs.xml, /WEB-INF/tiles-defs/tiles-defs_general.xml, /WEB-INF/tiles-defs/tiles-defs_static.xml, /WEB-INF/tiles-defs/tiles-defs_image.xml, /WEB-INF/tiles-defs/tiles-defs_access.xml, ... Tiles-Def-Dateien • Verbinden Actions mit den JSP-Pages (Controller & View) • Letztes Glied in der Prozesskette • Gegliedert nach Funktionsgruppen Tiles-Definitions können Layouts erben <tiles-definitions> <definition name="admin/_listCurrencies" extends=".adminLayout"> <put name="body" value="/pages/accounts/currencies/listCurrencies.jsp"/> </definition> <definition name="admin/_editCurrency" extends=".adminLayout"> <put name="body" value="/pages/accounts/currencies/editCurrency.jsp"/> </definition> </tiles-definitions> Die tiles-def.xml enthält die grundlegenden tiles-definitions, die von anderen tiles-definitions geerbt werden können <definition name=".mainLayout" path="/pages/general/layout/layout.jsp"> <put name="menu" value="" /> <put name="body" value="" /> </definition> Workflow – Zusammenfassung Class-Verzeichnis