1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- ---
- title: Vaadin OSGi Support
- order: 19
- layout: page
- ---
-
- [[advanced.osgi]]
- = Vaadin OSGi Support
-
- IMPORTANT: The OSGi support as described here is currently being developed and only available in the Framework 8.1 prerelease versions, starting from 8.1.0.beta1.
-
- Vaadin applications can be deployed on an OSGi compatible servlet container, or on Liferay 7 as OSGi portlets.
-
- An OSGi application typically consists of multiple bundles that can be deployed separately. Multiple versions of each bundle can be present, and the OSGi runtime resolves their dependencies at run-time based on bundle manifests.
-
- To deploy Vaadin applications as OSGi bundles, static resources (including themes and widget sets) must be published using the appropriate APIs to enable using multiple Vaadin versions on the same server.
-
- The application is typically packaged as a JAR file, and needs to have a valid OSGi bundle manifest which can be created e.g. by the `bnd-maven-plugin`. All the dependencies of the application should be available as OSGi bundles.
-
- [[advanced.osgi.servlet]]
- == Publishing a Servlet With OSGi
-
- To deploy the app as a servlet all we need to do is annotate the [classname]#MyUIServlet# class with [literal]#@Component(service = VaadinServlet.class)#. The Vaadin integration will track this registration and use HttpWhiteboard specification to register a servlet with the location of the Vaadin resources properly configured. This means that the user can specify a set of HttpWhiteboard properties in the [interfacename]#@Component# declaration.
-
- The [interfacename]#@WebServlet# annotation settings will be used to configure the urlPatterns and async parameters.
-
- [source, java]
- ----
- import org.osgi.service.component.annotations.Component;
- ...
- @Component(service = VaadinServlet.class)
- @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
- @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
- public static class MyUIServlet extends VaadinServlet {
- }
- ----
-
-
- [[advanced.osgi.resources]]
- == Publishing Static Resources With OSGi
-
- Vaadin Framework 8.1 and later versions provide two supported ways of publishing static resources for OSGi: by making OSGi services implementing an interface or by explicit calls to a service.
-
- The easiest way to publish a theme or a widgetset is to create a class implementing the interface [interfacename]#OsgiVaadinTheme# or [interfacename]#OsgiVaadinWidgetset# and annotating it with [interfacename]#@Component# to make it an OSGi service. This automatically publishes the theme or the widget set from the bundle at a path that contains the Vaadin Framework version used by the application.
-
- [source, java]
- ----
- @Component
- public class MyTheme extends ValoTheme implements OsgiVaadinTheme {
- public static final String THEME_NAME = "mytheme";
-
- @Override
- public String getName() {
- return THEME_NAME;
- }
-
- }
- ----
-
- Alternatively, an OSGi bundle activator or an SCR Component [interfacename]#@Activate# method can obtain an instance of [classname]#VaadinResourceService# from [classname]#OsgiVaadinResources# and explicitly call its methods to publish a theme, a widget set or an individual file in the bundle as a static resource at the correct path.
-
- [source, java]
- ----
- VaadinResourceService service = OsgiVaadinResources.getService();
- service.publishTheme("mytheme", httpService);
- ----
-
- In addition to these approaches, it is also possible to repackage all the static resources of an application to a single bundle and export the [filename]#/VAADIN# directory. This can be useful e.g. when migrating an old Vaadin OSGi application in an environment that does not support parallel deployments of multiple versions of the application.
|