JavaScript Micro Services

advertisement
JavaScript Micro Services
Simon Kaegi
27 March 2012
What are Micro Services?
• OSGi minus the modularity
… about software development in a browser
Orion and OSGi Modularity
• e4 – OSGi style modularity in JavaScript
{ "Bundle-SymbolicName":"sample.jsbundle",
"Bundle-Version":"1.0",
"Bundle-ScriptPath":"script.js",
"Import-Package":"a.resource;version=[1.0.0,2.0.0)",
"Export-Package":"sample.resource;version=1.0.0",
"Require-Bundle:"some.other.bundle“
}
• AMD – RequireJS
define(["dojo", "orion/serviceregistry", "dojo/DeferredList"],
function(dojo, mServiceregistry){… return exports});
Orion Plugins
• Orion applications are NOT made up of plugins
• Orion pages are designed to be 'extended' with plugins
• Orion plugins are 'separate' HTML pages hosted in non-visible IFrames
• Can be cross origin and communicate using HTML5 postMessage which is
ASYNC
• Plugins are isolated and secure against direct modification of the hosting
page
Java Web Application / OSGi
Web Application
Front-end
Web Client
Proxy Server / Portal
Web Application
Front-end
Web Client
Web Application
Front-end
Proxied Service
Web Application
Front-end
Web Server
7
Web Application
WebPlugin
Application
Front-end
Web
Application
Front-end
Plugin
Front-end
Plugin
Web Application
Front-end
Web Server
Web Application
Front-end
Proxied Service
Orion way / Client-side Extension
Web Application
Front-end
Web Client
Web Application
Front-end
Plugin
Web Application
Front-end
Plugin
Web Application
Front-end
Web Server
Web Application
Front-end
Web Server
Web Application
Front-end
Web Server
Eclipse IDE Extensibility
Orion Extensibility
registerService(INTERFACE_NAME, IMPLEMENTATION, PROPERTIES)
In-page
Plugin
Comparing OSGi and Orion Service APIs
• Orion provides a nearly complete implementation of the Service API from
OSGi BundleContext
• ServiceReference, ServiceRegistration, …
• service listeners, event types
• Use Strings instead of java.lang.class when referencing Service interfaces
• All Service calls return a “promise” – needed to abstract asynchronous
service implementations
• No ServiceTracker currently
• originally built into getService but this was a mistake
What’s next
• Declarative Services
• wire.js – extends Asynchronous Module Definition
define([“wire!aService", “wire!anotherService],
function(aService, anotherService){…});
• Configuration Admin and Metatype Services
• Permission Policy and Admin
http://eclipse.org/orion/
14
Download