For portlets that don't have id attribute defined in <portlet-app> tag in portlet.xml, XMLAccess allows to use the WAR file name as uid in XMLAccess request.
<request
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="PortalConfig_7.0.0.xsd"
type="update"
create-oids="true">
<portal action="locate">
<web-app action="update" active="true" uid="WAR_NAME.webmod">
<url>file:///PATH_TO_THE_WAR_FILE</url>
<portlet-app action="update" active="true" uid="WAR_NAME">
<portlet action="update" active="true" name="TestPortlet" objectid="theTestPortlet" />
</portlet-app>
</web-app>
</portal>
</request>
The script works fine when install a new portlet, however when re-run the same script to update the portlet, it gives a DuplicateAppException that complains EJPPF0181E The id=XXX already exists for stored standard portlet application.
The solution to this problem is to add a uniquename attribute to the <web-app> in XMLAccess script, as shown in below
<request
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="PortalConfig_7.0.0.xsd"
type="update"
create-oids="true">
<portal action="locate">
<web-app action="update" active="true" uid="WAR_NAME.webmod" uniquename="SOME_UNIQUE_NAME">
<url>file:///PATH_TO_THE_WAR_FILE</url>
<portlet-app action="update" active="true" uid="WAR_NAME">
<portlet action="update" active="true" name="TestPortlet" objectid="theTestPortlet" />
</portlet-app>
</web-app>
</portal>
</request>
Now the script can be used to install a new portlet and also to update an existing portlet based on the uniquename attribute value.
No comments:
Post a Comment