Using one plug-in portlet services in other plug-in portlet.
In liferay we develop portlets in plug-in portlet environment. Here some time we may develop group of portlets in single plug-in context or sometimes we develop in multiple plug-in contexts.
When we get requirement like we want use one plug-in context liferay services in other plug-in context, we need to follow the some sequence of steps when we share service layer between two different liferay plug-in portlet contexts.
Download Sharing service layer Example portlets from following location
You can find source and war file
This portlet developed in Liferay6.1GA2 EE you can change source based on your liferay version, please go through my previous articles to know more information about this.
Procedure for deploy portlet:
You can use war file and directly place in your portal deploy folder and test or you can also use source to deploy portlet.
First deploy the Child-portlet make sure deployment should be successful.
Second deploy Parent-portlet.
Drag and Drop Parent portlet which in sample category then you can see the child table row data.
Before use this portlet read entire article and then test the portlet
Frits we need to identify required dependent plug-in context
We need to specify the required plug-in context name in liferay-plugin-package.properties file as follows
Note: if multiple contexts then speared by comma
First deploy the liferay plug-in portlet context which we mention in liferay-plugin-package.properties as a property required-deployment-contexts.
Next deploy the second portlet
Assume we have two plug-in contexts Parent-portlet and Child-portlet
In Parent-portlet I have one entity called Parent and in Child-portlet I have entity called Child.
Now I create service builder for both plug-in portlets and run the service builder. Here both are two different plug-in contexts
Now we will get two service jar files in each plug-in portlet WEB-INF/lib directory (Parent-portlet.war/WEB-INF/lib/Parent-portlet-service.jar and Childt-portlet.war/WEB-INF/lib/Child-portlet-service.jar).
Now we want use Child-portlet services in Parent-portlet for this need to specify the Child-portlet context information in Parent-portlet. This information we need provided by liferay-plugin-package.properties of Parent-portlet as follows
Once we mention above property then Child-portlet services will be available in Paretn-portlet means we can use ChildLocalServieUtil, ChildSeriveceUtil and ChildUtil classes in Parent-portlet(As we know our entity in child portlet is child)
Now simple get child information in parent portlet JSP page as follows
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<h1>This is parent portlet</h1>
Now deploy the Child-portlet first
Next and finally we have to deploy the Parent-portlet.
In the development in Liferay IDE/Eclipse when we use child services it will show compile time errors but don’t worry you can deploy the portlet.
If you really don’t want see such compile time errors you can add services jar file in portlet build path.
In above example you can add Child-portlet-service.jar file in Parent-portlet build path. Simple right click on Parent-portlet in eclipse and select build path option add Child-portlet-service.jar before do this you need to run service builder for Child-portlet then only Child-portlet-service.jar file available.
When we want share service layer between two plug-in contexts the services jar file should be available in other portlet plug-in context class path i.e. WEB-INF/lib.
In above example we are sharing Child-portlet services in Parent-portlet so we need to make available Child-portlet-service.jar file in Parent-portlet/WEB-INF/lib so that we can use Child-portlet service classes.
To do above task we need to mention the child context information in parent portlet as I mention above property.
After deployment of two portlet if you see the Parent-portlet/WEB-INF/lib (in server deployment directory) you can find the Child-portlet-service.jar file. Because of this only we able access the child portlet services.
The following is Parent-portlet lib after deployment in the server
Child-portlet with service.xml file
Parent-portlet and we mentioned child deployment context.
The following is Parent-portlet which is accessing Child-portlet services.