290 likes | 310 Views
Discover the motivations, challenges, and progress of moving the Guidewire platform to OSGi. Learn about the goals, implementation steps, roadblocks encountered, and practical tips for successful migration. See the current status, next steps, and examples of utilizing services for better modularity.
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