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