Moving the Guidewire platform to OSGi A case study Paul D’Albora Guidewire Software pdalbora@guidewire.com March 2012 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 1 Agenda • Introduction to the Guidewire platform • Motivation for moving to OSGi • Challenges • Where we are and where we’re going • Q & (hopefully) A © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 2 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 3 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 … © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 4 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 5 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 6 Goals • Test components in isolation • Reduce learning curve • Contain maintenance costs • Release components independently © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 7 OSGi • Module system • Versioning • Manageability • Mature, well-defined specifications • Robust community • Services! © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 8 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 9 Step 1 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 10 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 11 Roadblocks © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 12 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 13 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 14 Problem: 3rd-party libraries • Lots of them (~102) • Signed jars • Classpath assumptions © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 15 Solution: Varied • Public OSGi bundle repositories – Eclipse Orbit – SpringSource • BND – For signed jars, embed jar within jar and use BundleClassPath – Can combine related jars to deal with split packages • TCCL to work around classpath assumptions • Newer jars being packaged as OSGi bundles © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 16 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>) © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 17 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 18 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 19 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 20 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 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 21 Example: Static Service Registry • Map of interface Class to implementation instance • Initialized by bootstrap class • Accessed via static methods © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 22 Static Service Registry – Code Sample 1 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 23 Static Service Registry – Code Sample 2 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 24 Static Service Registry – Code Sample 3 © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. 25 Static Service Registry – Replacement © Guidewire Software, Inc. All rights reserved. Do not distribute without permission. Questions? Feedback welcome. Give Feedback on the Sessions 1 Sign In: www.eclipsecon.org 2 Select Session Evaluate 3 Vote