Как программно добавить портлет на панель управления Портал JBoss конкретного пользователя? Есть ли удаленный API портала JBoss для этого? Веб-служба SOAP, может быть API на основе MBean? Конечно, в крайнем случае я могу реализовать такой сервис сам и развернуть его на портале JBoss, но в идеале он не должен требовать развертывания чего-либо на JBoss.
Мне нужно сделать это из приложения, не развернутого на JBoss. Он работает на отдельном экземпляре Tomcat. Приложение знает адрес портала, оно знает имя пользователя и учетные данные, я могу установить любые требуемые доверительные отношения между приложением и порталом.
Более подробное описание: у меня есть Гаджет Google, и я хочу создать в своем приложении кнопку, которая добавит гаджет в качестве портлета на мой портал. Итак, пользователь открывает мое приложение, нажимает кнопку «Добавить в панель управления», и гаджет Google добавляется на панель управления портала.




Надеюсь, этот кусок кода поможет:
//container
container = (CustomizationManager)MBeanProxy.get(CustomizationManager.class, new ObjectName("portal:service=CustomizationManager"), MBeanServerLocator.locateJBoss());
//transaction manager
tm = (TransactionManager) new InitialContext().lookup("java:/TransactionManager");
tm.begin();
//dashboard
dashboard = container.getDashboard(new org.jboss.portal.identity.User() {
public boolean validatePassword(String arg0) {
return false;
}
public void updatePassword(String arg0) throws IdentityException {
}
public String getUserName() {
return userId;
}
public Object getId() {
return null;
}
});
System.out.println("!!! Portlal: " + dashboard.toString());
//default page
defaultPage = dashboard.getPage("default");
System.out.println("!!! Page: " + defaultPage.toString());
//gets page windows
Collection<PortalObject> objects = defaultPage.getChildren();
if (objects != null && objects.size() > 0) {
for (PortalObject object : objects) {
System.out.println("!!! PageChild: " + object.getName());
System.out.println("!!! WindowRegion: " + object.getDeclaredProperty("theme.region"));
String windowPortletName = object.getDeclaredProperty("portletName");
if (StringUtils.equals(object.getDeclaredProperty("theme.region"), "column1"))
{
column1Windows.add(object.getName());
System.out.println("!!! Column1Window: " + object.getName());
System.out.println("!!! Column1WindowPortletName: " + object.getDeclaredProperty("portletName"));
//removes from portlets list if already exists
Iterator iterator = portlets.iterator();
while (iterator.hasNext())
{
Portlet tempPortlet = (Portlet) iterator.next();
if (StringUtils.equals(tempPortlet.getSystemName(), windowPortletName))
{
iterator.remove();
}
}
}
else if (StringUtils.equals(object.getDeclaredProperty("theme.region"), "column2"))
{
column2Windows.add(object.getName());
System.out.println("!!! Column2Window: " + object.getName());
//removes from portlets list if already exists
Iterator iterator = portlets.iterator();
while (iterator.hasNext())
{
Portlet tempPortlet = (Portlet) iterator.next();
if (StringUtils.equals(tempPortlet.getSystemName(), windowPortletName))
{
iterator.remove();
}
}
}
}
}
tm.commit();
Везде, где вам нужно манипулировать панелью управления портала Jboss. Конечно, этот код должен работать внутри экземпляра портала JBoss.
Куда бы вы поместили этот код?