Как программно добавить портлет на панель инструментов JBoss Portal

Как программно добавить портлет на панель управления JBoss Portal определенного пользователя? Есть ли какой-нибудь удаленный API портала JBoss для этого? Веб-сервис SOAP, может быть API на основе MBean? Конечно, в крайнем случае я могу сам реализовать такой сервис и развернуть его на портале JBoss, но в идеале для этого не нужно ничего развертывать на JBoss.

Мне нужно сделать это из приложения, не развернутого на JBoss. Он работает на отдельном экземпляре Tomcat. Приложение знает адрес портала, оно знает имя пользователя и учетные данные, я могу установить любые необходимые доверительные отношения между приложением и порталом.

Более подробное описание: у меня есть гаджет Google, и я хочу создать в своем приложении кнопку, которая добавит гаджет в качестве портлета на мой портал. Итак, пользователь открывает мое приложение, нажимает кнопку "Добавить на панель инструментов", и гаджет Google добавляется на панель инструментов портала.

1 ответ

Решение

Надеюсь, что этот кодекс помогает:

   //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();        
Другие вопросы по тегам