This wiki does not contain official documentation and is currently deprecated and read only. Please try reading the documentation on the Liferay Developer Network, the new site dedicated to Liferay documentation. DISCOVER Build your web site, collaborate with your colleagues, manage your content, and more. DEVELOP Build applications that run inside Liferay, extend the features provided out of the box with Liferay's APIs. DISTRIBUTE Let the world know about your app by publishing it in Liferay's marketplace. PARTICIPATE Become a part of Liferay's community, meet other Liferay users, and get involved in the open source project. Wrapper Plugins
How to use Liferay's Wrapper Plugins#
If you want to extend functionallity of the core classes, there's has been (since Liferay 5.1) an improvement in build-service that creates a wrapper for all models.
(You can search Wrapper in the code and you'll realize that there are wrapper classes for all the portal models)
Note: I'll use a example that extends JournalArticle deletion to be more illustrative.
The steps to do to use this functionallity are the following:
- Create a file called liferay-hook.xml with the following content and place it docroot/WEB-INF:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 5.2.5//EN" "http://www.liferay.com/dtd/liferay-hook_5_2_0.dtd"> <hook> <service> <service-type>com.liferay.portlet.journal.service.JournalArticleLocalService</service-type> <service-impl>com.liferay.portlet.asset.service.impl.JournalArticleLocalServiceWrapperImpl</service-impl> </service> </hook>
The first class is the service you want to extend The second class is the one that implements the modifications
- Create a class that extends the wrapper you want to use and add the basic constructor (in my case it is JournalArticleLocalServiceWrapper):
public class JournalArticleLocalServiceWrapperImpl
extends JournalArticleLocalServiceWrapper{
public JournalArticleLocalServiceWrapperImpl(
JournalArticleLocalService journalArticleLocalService){
super(journalArticleLocalService);
}
}
- Add the methods you want to overwrite in that class:
public void deleteArticle(long groupId, java.lang.String articleId,
double version, java.lang.String articleURL,
com.liferay.portal.service.ServiceContext serviceContext)
throws com.liferay.portal.PortalException,
com.liferay.portal.SystemException {
[... all my custom code here...]
super.deleteArticle(article, articleURL, serviceContext);
}
And that's all: you deploy your portlet/plugin and you'll see it in action!
By the way, you have a great example by Brian Chan in the test-hook-portlet
29473 Views