There's a considerable activity in the enterprise Java community about the use of OSGi in Java EE applications. We call such applications "hybrid applications." With hybrid applications, developers can continue to build standard and familiar enterprise application components, such as Java Servlets and EJBs, and take full advantage of:
* Features such as modularity/dependency management, service dynamism, and more provided by OSGi
* Infrastructure services such as transaction management, security, persistence, and more offered by Java EE
This session will present the current state of affairs, discuss the benefits of hybrid applications, and demonstrate development and deployment of such applications.
GlassFish will be used for demonstration.
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development, Sahoo
1. 1
<Insert Picture Here>
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application
Development
Sanjeeb Sahoo
Staff Engineer, Sun Microsystems India Pvt. Ltd.
2. 2
The following is intended to outline our general
product direction. It is intended for information
purposes only, and may not be incorporated into any
contract. It is not a commitment to deliver any
material, code, or functionality, and should not be
relied upon in making purchasing decisions.
The development, release, and timing of any
features or functionality described for Oracle’s
products remains at the sole discretion of Oracle.
Safe Harbor Statements
3. 3
The preceding is intended to outline our general
product direction. It is intended for information
purposes only, and may not be incorporated into any
contract. It is not a commitment to deliver any
material, code, or functionality, and should not be
relied upon in making purchasing decisions.
The development, release, and timing of any
features or functionality described for Oracle’s
products remains at the sole discretion of Oracle.
8. 8
Module Layer
• Bundle – a unit of modularity in OSGi
• Encapsulation
• Lifecycle independent of the JVM
• Versionable
• Packaged as a JAR (classes + Manifest with OSGi
metadata)
• Very explicit dependency specification
• Well defined dependency resolution rules
13. 13
Service Layer
• In-VM SOA
• Service Registry
– Register
– Unregister
• Service is a POJO
• Service Dynamism
– Service tracking
• Service Discovery
– LDAP filter based queries
18. 18
Java EE
Platform of choice for enterprise applications
• Widely used APIs (JPA, JTA, JAXB, JNDI)
• Component Models (Servlet, EJB, JAX-RS)
• Frameworks (JSF, CDI)
• Ease of Use (Annotations, Convention over
Configuration)
• Platform provided infrastructure services
(Transaction, Security, Persistence, Remoting)
• Tools (IDE, Management, Monitoring)
• Ubiquitous deployment platform for enterprise
applications
19. 19
Hybrid Applications
Meeting of the two worlds
• OSGi + Java EE = Hybrid application
• Hybrid application
– An OSGi bundle
– And a Java EE Archive
• Leverage the capabilities of both the platforms
– Enterprise applications can now
• be built as modular OSGi bundles
• use OBR, Config Admin, service tracking, etc.
– OSGi bundles can now use Java EE services like JTA, JPA,
etc.
20. 20
Current State
• OSGi Enterprise Expert Group (EEG)
– Relased OSGi Service Platform Enterprise Specification 4.2
in 2010
• Open source efforts
– Project GlassFish
– Project Aries
– Eclipse Gemini
21. 21
OSGi/Web Application (WAB)
• Web Application Bundle (WAB)
– WAR + OSGi metadata + Web-ContextPath header
• Can use all enterprise APIs (like JPA, JTA)
• Wrapped WAR support
– webbundle: URL scheme
22. 22
Bundle-SymbolicName: com.acme.hellowab
Bundle-Name: Hello World OSGi Web Application
Bundle-Version: 1.0.0
Bundle-ManifestVersion: 2
Bundle-Activator: com.acme.hellowab.MyActivator
Import-Package: javax.servlet; javax.servlet.http; version=3.0,
org.osgi.framework; version=1.5
Bundle-ClassPath: WEB-INF/classes, WEB-INF/lib/foo.jar
Web-ContextPath: /hello
OSGi Metadata of a WAB
25. 25
EE APIs in OSGi
• OSGi/JDBC
– JDBC driver as DataSourceFactory
– Dynamic discovery of driver details
– Multiple versions of same driver
• OSGi/JTA
– JTA artifacts available as OSGi Services
• OSGi/JPA
– Enhancement of JPA entities at runtime
– Same packaging rules as JPA and also deploy entities as a
bundle
– Shared Persistence Unit and thereby shared second level
cache
29. 29
OSGi/EJB Application
• Allows you to develop managed, transactional, secure
OSGi services with very little knowledge of OSGi
• Make your existing EJB service available to OSGi
clients with little effort
• Achieved through simple manifest metadata
– Export-EJB: ALL/None/<names of stateless local EJB>
31. 31
CDI
• Brings type-safe dependency injection to EE platform
– Strong typing and loose coupling
• Well defined life cycle of stateful objects bound to life
cycle contexts
• Ability to decorate and intercept injected Beans
• An event notification model
• An ability to develop portable extensions that
integrates with the container to extend the runtime
32. 32
GlassFish CDI/OSGi Portable Extension
• Use of CDI for type safe injection of OSGi services
@WebServlet(urlPatterns = “/login”)
public class FooServlet implements HttpServlet {
@Inject
@org.glassfish.osgicdi.OSGiService(
dynamic=”true”,
timeout = 200,
serviceCriteria=<an ldap query >)
FooService foo;
}
38. 38
<Insert Picture Here>
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application
Development
Sanjeeb Sahoo
Staff Engineer, Sun Microsystems India Pvt. Ltd.