Wednesday, February 29, 2012

Managing content with Authoring tools components of JSR 286 Web content viewer Portlet

Hello Folks,


This is a very basic requirement that business personnels does not want to navigate through IBM Lotus Web Content Management authoring portlet. Instead, they want to create, read, edit, delete, approve, or reject content items with some user friendly interface. This can be achieved using Authoring tools components rendered in a JSR 286 Web content viewer portlet. For more details please visit IBM Information Center.

Thanks & Regards,
Chirag.

Wednesday, February 22, 2012

Enabling Developer Mode in IBM WebSphere Portal 7

Hello Friends,

The server start up time can be reduced to half when you enable developer mode in websphere portal 7.When portlet application application is developed on your local box it is very annoying to wait for server startup taking 15 to 20 minutes. IBM WebSphere portal version 7 facilitates a developer to start the server in a Developer mode.

This setting will disable non-essential applications from started when the server starts.  In the event that one of these applications are required after the server has started WebSphere will lazy load the application.  From the end users view this means that the first time someone tries to render a portlet they could receive a portlet unavailable message.  In the background the application will be started and the next time the user renders the portlet the application will be available.  Without a lot of custom applications, enabling developer mode can improve the startup time by about 50%.

Here are the steps to enable developer mode:

1.      Stop the server
2.      Go to <portalserver_root>\wp_profile\ConfigEngine
3.      Execute the following command
a.       ConfigEngine.bat enable-develop-mode-startup-performance
4.      Start the server


Steps to disable Developer Mode

1.      Stop the server
2.      Go to  <portalserver_root>\wp_profile\ConfigEngine
3.      Execute the following command
a.       ConfigEngine.bat disable-develop-mode-startup-performance
4.      Start the server


Trust me, as a developer you will save a lot of time!

Thanks,
Chirag.



Tuesday, February 14, 2012

Interportlet communication in different war files (portlet applications) – Part 2.


Inter-portlet communication between multiple portlets in different portlet applications has been made easy with JSR 286 portlet API. It has brought a new revolution in portlet development. In JSR 168 a.k.a portlet specification 1.0, inter-portlet communication between portlets in different war files was not possible. The only way to achieve it was through IBM URL Generation classes. But JSR 286 gives you more flexibility to achieve this functionality.

There are 2 ways to achieve interportlet communication between portlets in different portlet applications:
1. By using public render parameters of JSR 286 portlet development API.
2. By using processEvent() method.

I will be discussing the second approach in this article. The first approach was discussed in the Part 1 of this article. In the first method you can pass only string params while the second one gives you flexibility to pass complex collection objects. I have created sample applications for both approaches.

The sample application uses IBM websphere portal 7, JSR 286 portlet development API, Annotation based Spring MVC Portlet framework 3.1. There are 2 portlets applications PortletApplication 1 which has TestPortlet1 and PortletApplication2 which has TestPortlet2.

Listing 1: TestPortlet1Controller.java
@Controller
@RequestMapping("VIEW")
public class TestPortlet1Controller{
@RenderMapping
protected ModelAndView defaultHandleRenderRequest(RenderRequest request,RenderResponse response) throws Exception {
ModelAndView mav = new ModelAndView("list1");
return mav;
}

@ActionMapping(params = "action=insert")
public void insert(ActionRequest request, ActionResponse response) {
String address = request.getParameter("address");
QName qName = new QName("http://bcbsfl.com","testEvent");
response.setEvent(qName, address);
}
}

Listing 1.1 TestPortlet1.xml:
<portlet>
<supported-publishing-event>
<qname xmlns:customns="http://bcbsfl.com">customns:testEvent</qname>
</supported-publishing-event>
<event-definition>
<qname xmlns:customns="http://bcbsfl.com">customns:testEvent</qname>
<value-type>java.lang.String</value-type>
</event-definition>
</portlet>

Listing 2: TestPortlet2Controller.java
@Controller
@RequestMapping("VIEW")
public class TestPortlet2Controller{
@RenderMapping
protected ModelAndView defaultHandleRenderRequest(RenderRequest request,
RenderResponse response) throws Exception {
ModelAndView mav = new ModelAndView("list2");
String address = request.getParameter(“address”);
mav.addObject("address",address);
return mav;
}

@EventMapping(value="{http://bcbsfl.com}testEvent")
public void processEvent(EventRequest request, EventResponse response)
{
Event e = request.getEvent();
System.out.println("SelectController2.processEvent()=======Got an event");
System.out.println("QName: " + e.getQName());
System.out.println("Event Name: " + e.getName());
System.out.println("Event Value:========== " + e.getValue());
response.setRenderParameter("address",(String)e.getValue());
}
}

Listing 2.1 TestPortlet2.xml:
<portlet>
<supported-processing-event>
<qname xmlns:customns="http://bcbsfl.com">customns:testEvent</qname>
</supported-processing-event>…
<event-definition>
<qname xmlns:customns="http://bcbsfl.com">customns:testEvent</qname>
<value-type>java.lang.String</value-type>
</event-definition>
</portlet>

After coding part is completed you have to create wires via websphere portal admin GUI and you are all set.

Friday, February 10, 2012

Interportlet communication in different war files (portlet applications) – Part 1

Inter-portlet communication between multiple portlets in different portlet applications has been made easy with JSR 286 portlet API. It has brought a new revolution in portlet development. In JSR 168 a.k.a portlet specification 1.0, inter-portlet communication between portlets in different war files was not possible. The only way to achieve it was through IBM URL Generation classes. But JSR 286 gives you more flexibility to achieve this functionality.
There are 2 ways to achieve interportlet communication between portlets in different portlet applications.
1. By using public render parameters of JSR 286 portlet development API.
2. By using processEvent() method.
I will be discussing the first method in this article. The second approach will be discussed in the next article. In the first method you can pass only string params while the second one gives you flexibility to pass complex collection objects. I have created sample applications for both approaches.
The sample application uses IBM websphere portal 7, JSR 286 portlet development API, Annotation based Spring MVC Portlet framework 3.1. There are 2 portlets applications PortletApplication 1 which has TestPortlet1 and PortletApplication2 which has TestPortlet2.
Listing 1: TestPortlet1Controller.java
@Controller
@RequestMapping("VIEW")
public class TestPortlet1Controller{
@RenderMapping
protected ModelAndView defaultHandleRenderRequest(RenderRequest request,RenderResponse response) throws Exception {
ModelAndView mav = new ModelAndView("list1");
return mav;
}
@ActionMapping(params = "action=insert")
public void insert(ActionRequest request, ActionResponse response) {
String name = request.getParameter("name");
response.setRenderParameter("name", name);
}
}
Listing 1.1 TestPortlet1.xml:
<portlet>
<supported-public-render-parameter>name</supported-public-render-parameter>
<public-render-parameter>
<identifier>name</identifier>
<qname xmlns:customns="http://testportlet1_params/">customns:name</qname>
</public-render-parameter>
</portlet>
Listing 2: TestPortlet2Controller.java
@Controller
@RequestMapping("VIEW")
public class TestPortlet2Controller{
@RenderMapping
protected ModelAndView defaultHandleRenderRequest(RenderRequest request,
RenderResponse response) throws Exception {
ModelAndView mav = new ModelAndView("list2");
String name = request.getParameter("name");
System.out.println("TestPortlet2Controller========"+name);
mav.addObject("name",name);
return mav;
}
}
Listing 2.1 TestPortlet2.xml:
<portlet>
<supported-public-render-parameter>name</supported-public-render-parameter>
<public-render-parameter>
<identifier>name</identifier>
<qname xmlns:customns="http://testportlet1_params/">customns:name</qname>
</public-render-parameter>
</portlet>

Sunday, December 18, 2011

Migrating Struts portlet application to IBM WebSphere Portal 7

Hi Folks,

Currently I am working on migrating all the existing portlet applications that are running on IBM WebSphere Portal Server 6 to IBM WebSphere Portal Server 7.0.0.1. I came across a very helpful article from IBM. I followed the steps given in this article and was able to successfully migrate the portlet application to IBM WebSphere Portal 7.

Here is the link to that article to migrate legacy struts portlet application to websphere portal 7:

http://www-10.lotus.com/ldd/portalwiki.nsf/dx/Migrating_portlets_built_with_Struts_Portlet_Framework_zos7

Thanks & Regards,
Chirag Rana.

Tuesday, October 18, 2011

Managing IBM Workplace WebContent Management Library

Here are few basic points which you should know while dealing with IBM Workplace Webcontent Management(IWWCM) Library or wcm library.
Webcontent Library or wcm library:
Libraries are (new) data-partitioning feature in wcm (6.0). The web content management library contains your website structure. This repository includes all of the components that make up the website, such as: authoring and presentation templates, and menu and link components that take the advantage of the dynamic structure web content management offers. These components help you easily manage the content and avoid broken links on the website.

There are 2 methods to assign roles to whole library and the item types within it:
  • Additive: You apply the User or Privileged User role to the entire library and deselect the propagation check box. It will give it access to the library and any authoring portlets configured to use the library. The Administrator then applies Contributor, Editor, Manager, or Administrator roles to specific item types to grant additional access to specified users or groups.
  • Subtractive: The administrator applies the Manager or Administrator role to the entire library, then applies Contributor, Editor, Privileged User, or User roles to specific item types, and deselects the inheritance check box. This reduces the access to different item types for specified users or groups.

The difference between Manager and Administrator roles within Web Content Management: if you assign an Administrator role to an entire library, you cannot then remove this role from any item type views. This is not true for a Manager role.

Advantages of library:
  • By using libraries, you can split up large sites and manage them separately.
  • Separate presentation storage from content storage. It means one library would only contain Sites and Content and another library would contain Presentation Templates and Components.

N.B:If a library is no longer required, it can be deleted or disabled. Deleting a library means also deleting all objects within that library. Disabling a library prevents a user from accessing it from an authoring portlet or updating any items stored in the library. Any items referenced from this library will still be rendered by the rendering portlet.

The following conditions may prevent a library from being deleted:
  • A library cannot be deleted if it contains any draft or locked items.
  • A library containing items with complex relationships may not be able to be deleted due to referential integrity issues. You will need to delete these items before deleting the library.
  • Libraries containing a large number of items may not be able to be deleted. You will need to reduce the number of items in the library.
If a library cannot be deleted after addressing the previous issues, you may need to delete all items from the library before it can be deleted.

Sunday, October 17, 2010

Steps to Install/activate IBM WCM Authoring Portlet

Installing the Authoring portlet

The Authoring portlet configuration task will automatically create IBM Workplace Web Content Management pages(IWWCM) and install the Authoring portlet and Local Rendering portlets.
Stop the portal server if already running.

Running the configuration task:(<PortalServer root>\config>)

  1. Open a command prompt.
  2. Run the configure-wcm-authoring task:
    • Windows and UNIX: Run the following command from the <portal_server_root>/config directory:
      • Windows: WPSconfig.bat configure-wcm-authoring -DPortalAdminPwd=password
      • UNIX: ./WPSconfig.sh configure-wcm-authoring -DPortalAdminPwd=password
    • where profile_root is the name of the WebSphere Application Server profile where WebSphere Portal is installed; for example,wp_profile.
  3. Log out of the portal and log back in.
  4. Select Web Content from the main menu to access the Authoring portlet.
  5. In a clustered environment, sometimes the authoring portlet does not get displayed. In such cases you may need to activate the portlet manually or synchronize the nodes in cluster.