|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- ---
- title: OSGi Portlets on Liferay 7
- order: 3
- layout: page
- ---
-
- [[portal.osgi]]
- = OSGi Portlets on Liferay 7
-
- Lifeary 7 supports modular portlet development using OSGi, and enables e.g.
- using multiple different Vaadin versions in different portlets on a page.
-
- For general OSGi considerations with Vaadin Framework such as packaging and
- bundle manifests, and how to publish static resources such as themes and
- widget sets, see
- <<dummy/../../../framework/advanced/advanced-osgi#advanced.osgi,"Vaadin OSGi Support">>.
-
-
- [[portal.osgi.portlet]]
- == Publishing a Portlet With OSGi
-
- Publishing an OSGi portlet on Liferay 7+ can be done in two ways: using
- annotations or using properties.
-
- Annotating a UI class with [interfacename]#@VaadinLiferayPortletConfiguration#
- (available in `vaadin-liferay-integration`) and making it an OSGi service of type
- [classname]#UI# is the easiest way to automatically publish the UI as a portlet
- and configure it to use the correct static resources.
-
- [source, java]
- ----
- @Theme(MyTheme.THEME_NAME)
- @VaadinLiferayPortletConfiguration(name = "Vaadin.Tutorial.1", displayName = "Vaadin Tutorial App")
- @Component(service = UI.class, scope = ServiceScope.PROTOTYPE)
- public class MyUI extends UI {
- ...
- }
- ----
-
- When using this approach, it is not necessary to create all the portlet
- property files that plain JSR-362 portlets require.
-
- Alternatively, the property [literal]#com.vaadin.osgi.liferay.portlet-ui=true#
- can be used when publishing a UI as an OSGi service to publish the UI as a portlet.
-
- The scope of the service should be set to [literal]#ServiceScope.PROTOTYPE#, as new instances
- of the UI will be needed. When this scope set, declarative services annotations can
- be used to get references to other services within a UI instance.
-
- This is not an absolute requirement if you are not using other declarative services
- annotations in your UI besides the [interfacename]#@Component#. If the scope is not
- set to prototype a warning will be logged and the constructor of the UI will be used
- when new instances are needed.
-
- [source, java]
- ----
- @Theme(MyTheme.THEME_NAME)
- @Component(service = UI.class, property = {
- "com.liferay.portlet.display-category=category.vaadin",
- "javax.portlet.name=my.vaadin.app.app.1.0.0",
- "javax.portlet.display-name=Tutorial Portlet",
- "javax.portlet.security-role-ref=power-user,user",
- "com.vaadin.osgi.liferay.portlet-ui=true"},
- scope = ServiceScope.PROTOTYPE)
- public class MyUI extends UI {
- ...
- }
- ----
-
-
- [[portal.osgi.portlet.gradle]]
- == Deployment a Portlet With OSGi (Gradle)
- Here is an example of a Liferay workspace with a portlet module and a short readme on how to deploy that to a Liferay portal.
- link:https://github.com/elmot/liferay-7-solid-portlet-example/[]
-
- [[portal.osgi.portlet]]
- == Deployment a Portlet With OSGi (Maven)
- An OSGi portlet should be packaged as a JAR with a proper OSGi bundle
- manifest, and deployed to a portal that has its required bundles installed.
- The maven archetype `com.vaadin:vaadin-archetype-liferay-portlet` is a good starting point to build an OSGi portlet application.
- The required bundles (and the application as well) can be installed using link:https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/blade-cli[blade client].
- The latest client binary can be downloaded from the link: link:https://releases.liferay.com/tools/blade-cli/latest/blade.jar[]
-
- Here is an example script for doing that (be sure to check the versions required by your project using *mvn dependency:list* ):
- [source, shell]
- ----
- java -jar blade.jar sh start https://repo1.maven.org/maven2/org/jsoup/jsoup/1.11.2/jsoup-1.11.2.jar
- java -jar blade.jar sh start https://repo1.maven.org/maven2/com/vaadin/external/gentyref/1.2.0.vaadin1/gentyref-1.2.0.vaadin1.jar
- java -jar blade.jar sh start https://repo1.maven.org/maven2/com/vaadin/vaadin-shared/8.6.3/vaadin-shared-8.6.3.jar
- java -jar blade.jar sh start https://repo1.maven.org/maven2/com/vaadin/vaadin-server/8.6.3/vaadin-server-8.6.3.jar
- java -jar blade.jar sh start https://repo1.maven.org/maven2/com/vaadin/vaadin-osgi-integration/8.6.3/vaadin-osgi-integration-8.6.3.jar
- java -jar blade.jar sh start https://repo1.maven.org/maven2/com/vaadin/vaadin-client-compiled/8.6.3/vaadin-client-compiled-8.6.3.jar
- java -jar blade.jar sh start https://repo1.maven.org/maven2/com/vaadin/vaadin-themes/8.6.3/vaadin-themes-8.6.3.jar
- java -jar blade.jar sh start https://repo1.maven.org/maven2/com/vaadin/vaadin-liferay-integration/8.6.3/vaadin-liferay-integration-8.6.3.jar
- java -jar blade.jar sh start file:<path_to_liferay_portlet.jar>
- ----
|