Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Moving the Guidewire platform to OSGi - Paul D'Albora

573 views

Published on

OSGi DevCon 2012

Guidewire Software builds advanced applications for the insurance industry. With over a hundred customers in a dozen countries, including global giants like AXA, Geico, and Tokyo Marine, our applications handle tens of billions of dollars worth of business every year.

The Guidewire platform provides core services to its applications, and is oriented toward a high degree of customer extensibility. This talk is about the first phase of our project to migrate the Guidewire platform to OSGi. We describe our motivations for moving to OSGi, challenges we faced in "getting off the ground," and how we expect to take advantage of OSGi. Topics include:

Using bnd to build OSGi metadata
Using fragments to create an initial "mega bundle"
Embedding an OSGi container inside a J2EE app server
Bundling 3rd-party jars
Using Declarative Services as our component model
Integrating tools like bnd into a custom build and development environment
We also discuss how we plan to leverage OSGi, including:

Replacing a proprietary plugin architecture with OSGi services
Reducing the cognitive burden within development through truly separate components
Enabling testing in isolation, both at the class level and at the bundle level

Published in: Technology
  • Be the first to comment

Moving the Guidewire platform to OSGi - Paul D'Albora

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

×