Monday, November 5, 2012

IBM Websphere Portal 8: Web Experience Factory and the Cloud

Hello Friends,


I was looking for a book on IBM WebSphere Portal 8 sometime back. I came across this book. This book describes the Hands on experience on IBM WebSphere Portal 8. With the release of WebSphere Portal 8, IBM recently added a newer member in WebSphere Portal Family.

As I am PRO in WebSphere Portal and IBM Web Content Management, I found this book very helpful. This book have configurations and code which would help anyone who is looking forward to implement or migrate portal application in the industry. I would surely recommend this book to all who wants to checkout WebSphere Portal 8 and WEF cloud.

Here is the link to access the book
http://www.packtpub.com/ibm-websphere-portal-8-web-experience-factory-cloud/book

Hope you guys will enjoy reading the book.

Thanks,
Chirag.


Saturday, October 13, 2012

IBM withdrawing Support for IBM WebSphere Portal 6.1.x

Hello Friends,

Just for your information that IBM is withdrawing Marketing support for WebSphere Portal 6.1.x effective from 14th November 2012.

The technical support will be provided till 14th November 2014.
This means that any industry using Portal 6.1 should think of upgrading to IBM WebSphere Portal 7 or IBM WebSphere Portal 8.0 in couple of years .

Here is the detail schedule on IBM Website.
http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/4/897/ENUS912-154/index.html&lang=en&request_locale=en

Thanks & Regards,
Chirag.

Thursday, May 3, 2012

IBM WebSphere Portal 8 has been released finally

Hello Friends,

IBM has finally released WebSphere Portal 8 version. It was in Beta stage since long time and recently a stable version has been released. 

The following updates are major enhancements to the new version:
  • Better integration with IBM Web Content Management:  WCM is truly becoming a integrated part of WebSphere Portal.  New features include Managed Pages where Portal Pages are tied directly to WCM site areas.  The new version creates WCM site areas and content when a new portal page is created.  Portal pages can be included with WCM projects so they can go through approval workflows and get published through the syndication process.
  • A new optimized theme.  Portal themes have been undergoing constant changes in the past versions.  I'm hoping that this latest version is really optimized.
  • New Community Pages that integrate IBM Connections more closely into WebSphere Portal.  When creating a community page, you can specify which Connections community is associated with that page and both Connections and WCM will understand that context.
  • OpenID authentication which lets you use external systems like Facebook to authenticate users.
  • Web analytics overlays allow you to see usage analytics right on your pages without having to generate reports.
  • New installation process using IBM's Installation Manager.  This feature promises easier and faster installs of the portal servers.



Enjoy!

Chirag.

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>