OSGi-basierte Webapplikationen

Werbung
OSGi-basierte Webapplikationen
Ein Erfahrungsbericht
Zürich, 18. März 2009
Pascal Nüesch, Software Engineer
1
www.namics.com
Zu meiner Person
» Lehre als Elektroniker mit Schwerpunkt SW-Entwicklung
» Java Applikationsentwickler bei der Metrohm AG
» Informatikstudium an der Hochschule für Technik in
Rapperswil
» Seither bei namics als Software Engineer im Bereich
Java Webapplikationen
2
www.namics.com
Was werden Sie heute nicht hören bzw. sehen...
» OSGi (Spezifikationen) von A bis Z
» Ausführliche Demonstration dm Server
» Vergleiche zwichen OSGi Frameworks
3
www.namics.com
dafür...
» Einführung
– OSGi und Aufbau SpringSource dm Server
» Entwicklung von OSGi Webapplikationen
– Toolunterstützung
– Möglichkeiten und Grenzen
– Probleme und mögliche Lösungen
– Erfahrungen aus dem Projekt
» Ausblick
– Fazit und Wünsche
4
www.namics.com
Einführung
5
www.namics.com
Das OSGi Framework
» OSGi – Open Services Gateway initiative
» Mehrere Versionen des gleichen Javatypes können
parallel in unterschiedlichen Bundles betrieben
werden.
» Bundles haben einen Lifecycle und können im
laufenden Betrieb ausgetauscht werden.
» Services können via OSGi Service Registry
veröffentlicht bzw. genutzt werden.
6
www.namics.com
SpringSource dm Server – Aufbau
SpringSource dm Server
Spring
dm Kernel
Tomcat
Equinox
7
www.namics.com
Deployment Formate
» Allgemeine Formate
– reine OSGi Bundles – JAR
– Web Application Archiv – WAR
» dm Server spezifische Formate
– Web Bundle – JAR
– Platform Archiv – PAR
8
www.namics.com
PAR – Platform ARchive
» Ist ein dm Server spezifisches Packaging Format für
alle Bundles einer Applikation
» Unterliegt somit einem Deployment.
» Auf ein PAR kann von Aussen nicht zugegriffen
werden.
» Somit können allgemeine Konfigurationen etc. nicht in
einem PAR gebunden werden.
9
www.namics.com
PAR – Möglicher Aufbau
PAR
Bundle ONE
Bundle TWO
Common Bundle
Bundle THREE
Bundle FOUR
Erklärung:
10
mögliche Sichtbarkeit
www.namics.com
MANIFEST.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.namics.apps.sample
Bundle-Version: 1.0.2
Bundle-Name: Namics – Sample Application
Bundle-Description: Sample application
Import-Package: org.springframework.osgi.web.context,
org.springframework.osgi.web.servlet,
com.namics.apps.sample.domain;version="1.0.2",
com.namics.apps.sample.service;version=„1.0.2",
com.namics.apps.sample validation;version="1.0.2",
com.namics.apps.sample.utils;version="1.0.2"
Export-Package: com.namics.apps.sample.model:="1.0"
Import-Library:
org.springframework.spring;version="[2.5.2,2.5.4)"
11
www.namics.com
Entwicklung von OSGi Webapplikationen
12
www.namics.com
STS – SpringSource Tool Suite
Eclipse ausgelegt für Spring-basierte Entwicklung
Speziell für dm Server
» Konfigurationsübersicht
» Repository Browser
» Manifest Editor
» Bundle Übersicht
2.0
» Bundle Dependency Graph
» Server Console
13
2.0
2.0
www.namics.com
SpringSource Enterprise Bundle Repository
» Anlaufstelle für OSGi konforme Bundles
» Sauber strukturiertes und übersichtliches Webinterface
» Erweiterte Suche
» Sehr viele Informationen wie Dependencies, Exported
und Imported Packages
» Download von Lizenz, Binary und Source JAR
» http://www.springsource.com/repository/app
14
www.namics.com
Maven – Plugin
» maven-bundle-plugin
– Zum Erstellen eines reinen OSGi Bundle
– http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
» maven-par-plugin
– Zur Erstellung eines Platform Archiv PAR
– http://repo.steademy.com/beta/maven2/
15
www.namics.com
Bundle nicht OSGi konform – was nun?
» Variante A
Man bringt seinen Wunsch bei SpringSource an und
hofft darauf...
» Variante B
Man legt selber Hand an und erstellt ein passendes
Manifest. Dazu gibt es Unterstützung von Peter Kriens
Bnd-Tool (http://www.aqute.biz/Code/Download)
» Beispiel
jTDS JDBC Driver
(seit 4. Februar 2009 im Repository vorhanden)
16
www.namics.com
Logging – Eigene LOG4J Konfiguration
» Ausgangslage
dm Server besitzt ein Logging für Bundles welche aber
über die dm Konfiguration gesteuert wird. Ich will aber
ein eigenes Logging mit eigener LOG4J Konfiguration
» Problem
Es kann keine LOG4J Konfiguration pro Bundle
spezifiziert werden.
» Grund
Es gibt innerhalb des dm Servers nur eine Instanz des
Loggers und der funktioniert logischerweise auch nur
mit einer Konfiguration.
17
www.namics.com
Logging – Eigene LOG4J Konfiguration
» (Teil-)Lösung
Da es pro PAR einen separaten Classloader gibt,
können wir den Logger kapseln. d.h. Wir erzeugen in
jedem PAR ein Logger welcher auch PAR spezifisch
konfiguriert werden kann.
Dazu ist es notwendig in jedem PAR die benötigten
JAR‘s für den Logger einzubinden.
18
www.namics.com
Kein JNDI – was nun?
» Beispiel
Eine DataSource kann nicht über JNDI definiert werden.
» Lösung
Die DataSource wird in einem Bundle konfiguriert und
über die OSGi Registry zur Verfügung gestellt.
» Vorteil
Zur Laufzeit kann eine neue DataSource hinzugefügt
werden ohne den Server neu zu starten.
19
www.namics.com
Konfiguration – Globale Properties
» Ausgangslage
Properties welche im ganzen dm Server zur Verfügung stehen
» Lösung
Properties werden über OSGi Registry publiziert
<!-- export -->
<osgi:service interface="java.util.Properties" ref="properties"/>
<!-- read properties -->
<bean id="properties" class=
"com.namics.apps.common.config.EnvironmentPropertiesFactory">
<property name="propertiesPath" value="classpath:env.properties" />
</bean>
20
www.namics.com
Konfiguration – Globale Properties
<!-– Import -->
<osgi:reference id="propertiesOsgi"
bean-name="properties" interface="java.util.Properties" />
<!-- Binding -->
<bean id="propertyConfigurer" class=
"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties" ref="propertiesOsgi" />
</bean>
<!-- Use -->
<bean id="proxy„ class="com.namics.ProxyFactoryBean">
<property name="serviceUrl" value="${proxy.serverUrl}" />
</bean>
21
www.namics.com
Projekt - Eckdaten
» business 2 business Portal
» diverse Services
» Frontend: Day CQ5 auf Apache Felix Server
» Backend: SpringSource dm Server
» Authentifizierung (SSO): Microsoft ISA Server
» Datenbank: Microsoft SQL Server
» Zugriff über Webservice auf SAP System
22
www.namics.com
Architektur - Übersicht
Authentifizierung (SSO)
Microsoft ISA Server
Frontend
Day Communiqué 5
Apache Felix Server
Backend
eService ONE
eService TWO
eService THREE
SpringSource dm Server
Microsoft SQL Server
23
LDAP
SAP
www.namics.com
Projekt - Setup
Pilot Phase
» 2 Monate mit 3 Entwicklern
» Erste Erfahrungen mit OSGi und dm Server sammeln
» Abklärungen der wichtigsten Hürden
» Aufbau Grundgerüst
Implementierungs Phase
» 2,5 Monate mit 15 Entwicklern
» Implementierung aller eServices inkl. Frontend
24
www.namics.com
Projekt - Entwicklung
» Grundgerüst in kleinem Team erstellen
» Guidelines dazu erfassen
» Review mit Entwickler von SpringSource
» Gute Aufteilung in logische Einheiten (Team/Bundle)
sofern Grundgerüst vorhanden
» Erschwerte Bedingungen durch die Neuheit des
Produktes
» Zum Teil sehr zeitintensive Nachforschungen
25
www.namics.com
Architektur – dm Server
Bundles
Common
Bundles
Security
PAR
eService ONE
PAR
eService TWO
API
API
API
API
IMPL
IMPL
IMPL
IMPL
CONFIG
CLIENT
DAO
DAO
WEB
WEB
WEB
WEB
26
www.namics.com
Ausblick
27
www.namics.com
Fazit
» Tooling wird ständig verbessert
» Momentan wird man bei den meisten Problemen aber
noch der Erste sein
» Stetige Weiterentwicklung
» (In)Stabilität beim Deployment
» Praxistest noch ausstehend
28
www.namics.com
Wünsche
» Bessere Unterstützung ausserhalb der IDE
» Direkt Zugriff vom Server aufs Repository
» Anderes Format für das Manifest
» Stabilität beim Deployment
» Als Windows Service
29
www.namics.com
Fragen?
30
www.namics.com
Besten Dank für Ihre Aufmerksamkeit
[email protected]
31
www.namics.com
Herunterladen