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