290 likes | 310 Views
Moving the Guidewire platform to OSGi. A case study. Paul D’Albora Guidewire Software pdalbora@guidewire.com March 2012. Agenda. Introduction to the Guidewire platform Motivation for moving to OSGi Challenges Where we are and where we’re going Q & (hopefully) A.
E N D
Moving the Guidewire platform to OSGi A case study Paul D’Albora Guidewire Software pdalbora@guidewire.com March 2012
Agenda • Introduction to the Guidewire platform • Motivation for moving to OSGi • Challenges • Where we are and where we’re going • Q & (hopefully) A
The Guidewire Platform – Basics • Supports core system software for the global property/casualty insurance industry • Core services: ORM layer, web UI framework, business rules, workflow, automated upgrade, I18N, customer plugins, messaging and web services integration • High degree of configurability • Supports multiple JEE containers
The Guidewire Platform – Pressures • Constantly adding and improving features for applications • Must not break existing customers • Large code base developed over ten years • Large and growing development team • All of which can lead to …
Goals • Test components in isolation • Reduce learning curve • Contain maintenance costs • Release components independently
OSGi • Module system • Versioning • Manageability • Mature, well-defined specifications • Robust community • Services!
Givens • Application must be delivered as a JEE application (EAR/WAR) • Code divided into coarse-grained “modules” forming a DAG of compile-time dependencies • Non-Eclipse IDE (no PDE) • Custom build system
Plan • Run Equinox embedded in JEE container using servlet bridge • Define a bundle for each existing code “module” • Replace/Convert 3rd-party jars with OSGi equivalents • Get automated tests running in framework • DON’T try to modularize yet
Problem: Split Packages • Same package exists in multiple modules • Framework binds to one of them, causing the other “parts” of the package to effectively disappear • Typical for platform and one or more applications to define classes in the same package • This is pervasive in our code
Solution: Fragments • Define an empty “root” bundle • Every bundle is a fragment of root • Fragment-Host: com.guidewire.root • Simulates one bundle • More closely represents original, non-modular, global classpath environment
Problem: 3rd-party libraries • Lots of them (~102) • Signed jars • Classpath assumptions
Solution: Varied • Public OSGi bundle repositories • Eclipse Orbit • SpringSource • BND • For signed jars, embed jar within jar and use Bundle-ClassPath • Can combine related jars to deal with split packages • TCCL to work around classpath assumptions • Newer jars being packaged as OSGi bundles
Problem: Servlets • No longer registered in web.xml (just the servlet bridge) • How to register platform and application servlets with HttpService • Ordering requirements (<load-on-startup>)
Solution: Components • Felix Http Whiteboard • Declarative Services with Bnd • @Component(provide=Servlet.class, properties="alias=/path") • For ordering-dependent servlets, register in order with HttpService • Component with @Reference to HttpService
Practical Tips • Learn and use BND • Learn the classloading flow chart (R4.2 Spec, Fig 3.19) • Turn off osgi.compatibility.bootdelegation, osgi.context.bootdelegation in Equinox • No Require-Bundle • Lean on automated tests • Use the framework itself
Current Status • Applications and integration tests running successfully in development • Initial performance testing reveals no significant difference in response times or memory usage • Rolled out to application teams with minimal disruption
Next Steps • Define candidate areas for modularization • Use services to de-couple components • Use services to replace ad hoc registries • Educate developers about service-oriented programming
Example: Static Service Registry • Map of interface Class to implementation instance • Initialized by bootstrap class • Accessed via static methods
Questions? Feedback welcome.
Give Feedback on the Sessions 1 Sign In: www.eclipsecon.org 2 Select Session Evaluate 3 Vote