Total Pageviews

Saturday, September 29, 2012

LIferay - Using Custom Portlet Services in EXT

Using custom portlet services in theme velocity templates is very easy and ServiceLocator class provides an overloaded method for the same. (See this for example), but for using them in ext is difficult because this class cannot be used in ext. I searched in forum but found only one solution which was suggesting to move the portlet service jar to global class-loader. This solution was working for me as well, but I was thinking not to move jar, instead trying to achieve it by some other way.

So, I tried a few things and the following code snippet worked for me:
For the above mentioned code, consider "example-portlet" is servlet context name, and we are invoking exampleFunction(long userid) method from com.apoorva.portlet.service.ExampleLocalService class, with the following imports:
Hope this will help you some day.

Sunday, August 26, 2012

Automated Undeployment of Liferay EXT

Those who work with Light Weight EXT environment very well know that its redeployment is a bit tricky because it needs its undeployment correctly. I've already written an article for its manual undeployment (see article), but during development it takes good time and efforts, so I thought to get some automated way to get it done and the solution I got is using ANT. There the three variation with change only in invocation method. Lets see it:

NOTE: In all examples, name of ext is considered as : example-ext, and following scripts are to added in build.xml file inside the ext folder of sdk. We need to shutdown the server, run this target, start the server and deploy ext again.

1. EXT context name is hardcoded inside ANT script.


Now this can be invoked, as the following:

2. Secondly, we all make the "build.${user.name}.properties" (eg. build.apoorva.prakash.properties") in which we generally set app.server.dir property with path of our web server path. We can create a new property in the same file with the name of ext instead of hard coding the name of ext in ant script, so that it will become a bit of configurable. Advantage of this approach is - as we are allowed to have only one ext in a project and while we create the custom build properties file, we can put the name of the ext in that file along with the name custom app.server.name property. So the custom build file will look as the following:
Now we need to make some minor changes in ANT script, which will look as following:
We can call the target simply as following:

3. Lastly, we can pass name of the ext on the command prompt to make the approach more flexible. If we invoke the ANT script written above as follows, it will supply the name from the command line:
The point to remember is that, don't make the property in the custom build property file.

Hope this will help.

Sunday, August 12, 2012

Using Custom portlet services in Theme Template

Service builders and velocity template are two very important parts of Liferay, and I personally feel joy working with velocity. Today, I am going to write one more article on Velocity templates, which is about the usage of custom portlet services in theme velocity templates. I've already written an article about usage of Liferay services in theme templates (see article). Calling custom portlet services which we build using the service builder is a bit different, however we need to call the same findService method which is overloaded in ServiceLocator class. All difference is we need to pass the servlet context name along with the service class name, as under
The servlet context name is the name of folder of your portlet inside the web-app folder, and if you have doubt, you can use following code to get servlet context name.
One caution, you should have the portlet deployed in the server, whose service you are going to use in theme, otherwise this will give you "Bean Locator is null" exception on server logs.

Hope this will help.