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