Как реализовать собственную модель идентификации для портала JBoss? - PullRequest
1 голос
/ 18 ноября 2011

Я хочу реализовать собственную модель идентификации, чтобы подключиться к частному веб-сервису, предоставляющему информацию о пользователе. Поэтому я следовал инструкциям на http://docs.jboss.com/jbportal/v2.7.1/referenceGuide/html/identity.html.

Я использую JBoss Portal 2.7.2 с JBoss AS 4.2.3; Java-версия 1.6.0_29

Вот шаги, которые я сделал:

Создание нового проекта maven, фрагмент pom.xml:

<dependency>
    <groupId>org.jboss.portal.identity</groupId>
    <artifactId>identity-identity</artifactId>
    <version>1.0.7</version>
    <scope>provided</scope>
</dependency>

Реализация пользовательского интерфейса:

package com.mycompany.myIdentity;

import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.User;

public class MyUserImpl implements User {
...
}

Упакован в файл JAR и развернут (= скопирован) на \ JBoss-портал-2.7.2 \ сервер \ умолчанию \ Deploy \ JBoss-portal.sar \ Lib.

Изменения в \ jboss-portal-2.7.2 \ server \ default \ deploy \ jboss-portal.sar \ conf \ identity \ identity-config.xml, замена существующего модуля пользовательского типа на новый (не требуется никакой конфигурации):

<module>
    <type>User</type>

    <service-name>portal:service=Module,type=User</service-name>
    <class>com.mycompany.myIdentity.MyUserImpl</class>

    <config/>
</module>

После запуска сервера двойным щелчком мыши запустите run.bat и просмотрите сайт http://localhost:8080/portal Я получаю следующее исключение:

исключение

javax.servlet.ServletException: org.hibernate.HibernateException: невозможно найти текущую транзакцию JTA org.jboss.portal.server.servlet.PortalServlet.service (PortalServlet.java:278) javax.servlet.http.HttpServlet.service (HttpServlet.java:803) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter (ReplyHeaderFilter.java:96)

первопричина

org.hibernate.HibernateException: невозможно найти текущую транзакцию JTA org.hibernate.context.JTASessionContext.currentSession (JTASessionContext.java:61) org.hibernate.impl.SessionFactoryImpl.getCurrentSession (SessionFactoryImpl.java:544) org.jboss.portal.core.impl.model.portal.PersistentPortalObjectContainer.getObjectNode (PersistentPortalObjectContainer.java:252) org.jboss.portal.core.impl.model.portal.AbstractPortalObjectContainer.getContext (AbstractPortalObjectContainer.java:112) org.jboss.portal.core.impl.model.portal.AbstractPortalObjectContainer.getContext (AbstractPortalObjectContainer.java:81) org.jboss.portal.core.model.portal.DefaultPortalCommandFactory.doMapping (DefaultPortalCommandFactory.java:72) org.jboss.portal.core.controller.Controller.handle (Controller.java:252) org.jboss.portal.server.RequestControllerDispatcher.invoke (RequestControllerDispatcher.java:51) org.jboss.portal.common.invocation.Invocation.invokeNext (Invocation.java:131) org.jboss.portal.common.invocation.Invocation.invoke (Invocation.java:157) org.jboss.portal.server.servlet.PortalServlet.service (PortalServlet.java:252) javax.servlet.http.HttpServlet.service (HttpServlet.java:803) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter (ReplyHeaderFilter.java:96)

Я получаю то же исключение даже без развертывания файла jar, просто изменяя файл identity-config.xml. Итак, я предполагаю что моя банка вообще не загружена. Более того, мой новый модуль не имеет ничего общего с базами данных и поэтому не требует транзакций JTA.

Так чего мне не хватает, чтобы заставить эту штуку работать?

Заранее спасибо за помощь.

ОБНОВЛЕНИЕ 1:

Привет еще раз!

Мне удалось немного продвинуться, внимательно изучив файлы журнала сервера. Сервер не может разобрать XML-файл identity-config.xml, поэтому после некоторых экспериментов я смог заставить его проанализировать этот новый файл:

<identity-configuration>
    <datasources/>
    <modules>
        <module>
            <type>User</type>
            <implementation>CUSTOM</implementation>
            <config/>
        </module>
        <module>
            <type>Role</type>
            <implementation>CUSTOM</implementation>
            <config/>
        </module>
        <module>
            <type>Membership</type>
            <implementation>CUSTOM</implementation>
            <config/>
        </module>
        <module>
            <type>UserProfile</type>
            <implementation>CUSTOM</implementation>
            <config/>
        </module>
    </modules
    <options/>
</identity-configuration>

Мне пришлось добавить следующий код в \ jboss-portal-2.7.2 \ server \ default \ deploy \ jboss-portal.sar \ conf \ identity \ standardidentity-config.xml

<module>
    <type>User</type>
    <implementation>CUSTOM</implementation>

    <service-name>portal:service=Module,type=User</service-name>
    <class>com.myCompany.MyUser</class>

    <config />
</module>
<module>
    <type>Role</type>
    <implementation>CUSTOM</implementation>

    <service-name>portal:service=Module,type=Role</service-name>
    <class>com.myCompany.MyRole</class>

    <config />
</module>
<module>
    <type>Membership</type>
    <implementation>CUSTOM</implementation>
    <service-name>portal:service=Module,type=Membership</service-name>
    <class>com.myCompany.MyMembership</class>
    <config />
</module>
<module>
    <type>UserProfile</type>
    <implementation>CUSTOM</implementation>
    <service-name>portal:service=Module,type=UserProfile</service-name>
    <class>com.myCompany.MyUserProfile</class>
    <config />
</module>

Как видите, я также реализовал роль, членство и профиль пользователя. После этого сервер пожаловался на некоторые недостающие свойства, необходимые для этих классов. Поэтому я добавил следующее каждому из этих четырех классов:

IdentityContext identityContext;
ServiceJNDIBinder jndiBinder;
String moduleType;

public String getModuleType() {
    return moduleType;
}

public void setModuleType(String moduleType) {
    this.moduleType = moduleType;
}

public ServiceJNDIBinder getJndiBinder() {
    return jndiBinder;
}

public void setJndiBinder(ServiceJNDIBinder jndiBinder) {
    this.jndiBinder = jndiBinder;
}

public IdentityContext getIdentityContext() {
    return identityContext;
}

public void setIdentityContext(IdentityContext identityContext) {
    this.identityContext = identityContext;
}

К сожалению, сервер все еще не удовлетворен этим. Теперь я нахожу следующее исключение в моем журнале сервера и Я понятия не имею, как решить эту проблему:

2011-11-21 08: 55: 54,696 ОШИБКА [org.jboss.portal.portlet.impl.container.LifeCycle] Невозможно запустить объект org.jboss.portal.portlet.container.PortletInitializationException: портлет CMSAdminPortlet выбросил портлетисключение во время инициализации в org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.start (PortletContainerImpl.java:284) в org.jboss.portal.portlet.impl.container.PortletContainerLifeCycle.invokeStart (Portlet)org.jboss.portal.portlet.impl.container.LifeCycle.managedStart (LifeCycle.java:92) в org.jboss.portal.portlet.impl.container.PortletFilterLifeCycle.startDependents (PortletFilterLifeCycle.javabo) :74:74portal.portlet.impl.container.LifeCycle.managedStart (LifeCycle.java:128) в org.jboss.portal.portlet.impl.container.PortletApplicationLifeCycle.startDependents (PortletApplicationLifeCycle.java:339) в org.jlet.jp.impl.container.LifeCycle.managedStart (LifeCycle.java:128) в org.jboss.portal.portlet.deployment.jboss.PortletAppDeployment.start (PortletAppDeployment.java:226) в org.jboss.portal.core.deployment.jboss.PortletAppDeployment.start (PortletAppDeployment.java:94) в org.jboss.portal.server.deployment.jboss.DepartConnect.jboss.DepartConnectDeploymentContext.java:99) в org.jboss.portal.server.deployment.jboss.PortalDeploymentInfoContext.add (PortalDeploymentInfoContext.java:86) в org.jboss.portal.server.deployment.jboss.ServerDeployerj.134) в org.jboss.portal.server.deployment.jboss.AbstractDeploymentFactory.registerFactory (AbstractDeploymentFactory.java:113) в org.jboss.portal.server.deployment.jboss.AbstractDeploymentFactory.start (AbstractDepavag15).jboss.portal.portlet.deployment.jboss.PortletAppDeploymentFactory.start (PortletAppDeploymentFactory.java:147) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethol.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.portal.jems.as.system.JBossServiceModelMBean $ ServiceMixin.execute (JBljSMe) (JBossSevice)по адресу org.jboss.portal.jems.as.system.JBossServiceModelMBean $ ServiceMixin.startService (JBossServiceModelMBean.java:452) по адресу org.jboss.system.ServiceMBeanSupport.jbossInternalStart:er.SerbSerg.start (ServiceMBeanSupport.java:196) в org.jboss.portal.jems.as.system.JBossServiceModelMBean $ 6.invoke (JBossServiceModelMBean.java:374) в org.jboss.mx.server.Injococ. Invocis.jpg94) в org.jboss.mx.interceptor.AbstractInterceptor.invoke (AbstractInterceptor.java:133) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.interceptor.ModelMBeanOperationInter.invoke (ModelMBeanOperationInterceptor.java:142) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:264) в org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:659) в org.jboss.system.ServiceController $ ServiceProxy.invoke.jpg службы сервиса ($)Proxy0.start (неизвестный источник) в org.jboss.system.ServiceController.start (ServiceController.java:417) в org.jboss.system.ServiceController.start (ServiceController.java:435) в org.jboss.system.ServiceController.начать (ServiceController.java:435) с org.jboss.system.ServiceController.start (ServiceController.java:435) с org.jboss.system.ServiceController.start (ServiceController.java:435) с org.jboss.system.ServiceControl.start (ServiceController.java:435) в org.jboss.system.ServiceController.start (ServiceController.java:435) в org.jboss.system.ServiceController.start (ServiceController.java:435) вorg.jboss.system.ServiceController.start (ServiceController.java:435) at sun.reflect.GeneratedMethodAccessor9.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.mx.interceptor.ReflectedDispatcher.invoke (ReflectedDispatcher.java:155) в org.jboss.mx.server.Invocation.dispatch (Invocation.java:94) в org.jboss.mx.server.Invocation.invoke (Invocation.java:86) в org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:264) в org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:659) в org.jboss.mx.util.MBeanProxyExt.invoke (MBeanProxyExt.java:210) в $ Proxy4.start (Неизвестный источник) в org.jboss.deployment.SARDeployer.start (SARDeployer.java:304) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.mx.interceptor.ReflectedDispatcher.invoke (ReflectedDispatcher.java:155) в org.jboss.mx.server.Invocation.dispatch (Invocation.java:94) в org.jboss.mx.interceptor.AbstractInterceptor.invoke (AbstractInterceptor.java:133) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke (ModelMBeanOperationInterceptor.java:142) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:264) в org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:659) в org.jboss.mx.util.MBeanProxyExt.invoke (MBeanProxyExt.java:210) в $ Proxy199.start (неизвестный источник) в org.jboss.deployment.XSLSubDeployer.start (XSLSubDeployer.java:197) в org.jboss.deployment.MainDeployer.start (MainDeployer.java:1025) в org.jboss.deployment.MainDeployer.deploy (MainDeployer.java:819) в org.jboss.deployment.MainDeployer.deploy (MainDeployer.java:782) в sun.reflect.GeneratedMethodAccessor26.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.mx.interceptor.ReflectedDispatcher.invoke (ReflectedDispatcher.java:155) в org.jboss.mx.server.Invocation.dispatch (Invocation.java:94) в org.jboss.mx.interceptor.AbstractInterceptor.invoke (AbstractInterceptor.java:133) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke (ModelMBeanOperationInterceptor.java:142) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:264) в org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:659) в org.jboss.mx.util.MBeanProxyExt.invoke (MBeanProxyExt.java:210) в $ Proxy9.deploy (неизвестный источник) в org.jboss.deployment.scanner.URLDeploymentScanner.deploy (URLDeploymentScanner.java:421) в org.jboss.deployment.scanner.URLDeploymentScanner.scan (URLDeploymentScanner.java:634) в org.jboss.deployment.scanner.AbstractDeploymentScanner $ ScannerThread.doScan (AbstractDeploymentScanner.java:263) в org.jboss.deployment.scanner.AbstractDeploymentScanner.startService (AbstractDeploymentScanner.java:336) в org.jboss.system.ServiceMBeanSupport.jbossInternalStart (ServiceMBeanSupport.java:289) в org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle (ServiceMBeanSupport.java:245) at sun.reflect.GeneratedMethodAccessor3.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.mx.interceptor.ReflectedDispatcher.invoke (ReflectedDispatcher.java:155)в org.jboss.mx.server.Invocation.dispatch (Invocation.java:94) в org.jboss.mx.server.Invocation.invoke (Invocation.java:86) в org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:264) в org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:659) в org.jboss.system.ServiceController $ ServiceProxy.invoke (ServiceController.java:978) в $ Proxy0.start (неизвестный источник) в org.jboss.system.ServiceController.start (ServiceController.java:417) at sun.reflect.GeneratedMethodAccessor9.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.mx.interceptor.ReflectedDispatcher.invoke (ReflectedDispatcher.java:155) в org.jboss.mx.server.Invocation.dispatch (Invocation.java:94) в org.jboss.mx.server.Invocation.invoke (Invocation.java:86) в org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:264) в org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:659) в org.jboss.mx.util.MBeanProxyExt.invoke (MBeanProxyExt.java:210) в $ Proxy4.start (Неизвестный источник) в org.jboss.deployment.SARDeployer.start (SARDeployer.java:304) в org.jboss.deployment.MainDeployer.start (MainDeployer.java:1025) в org.jboss.deployment.MainDeployer.deploy (MainDeployer.java:819) в org.jboss.deployment.MainDeployer.deploy (MainDeployer.java:782) в org.jboss.deployment.MainDeployer.deploy (MainDeployer.java:766) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.mx.interceptor.ReflectedDispatcher.invoke (ReflectedDispatcher.java:155) в org.jboss.mx.server.Invocation.dispatch (Invocation.java:94) в org.jboss.mx.interceptor.AbstractInterceptor.invoke (AbstractInterceptor.java:133) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke (ModelMBeanOperationInterceptor.java:142) в org.jboss.mx.server.Invocation.invoke (Invocation.java:88) в org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:264) в org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:659) в org.jboss.mx.util.MBeanProxyExt.invoke (MBeanProxyExt.java:210) в $ Proxy5.deploy (неизвестный источник) в org.jboss.system.server.ServerImpl.doStart (ServerImpl.java:482) в org.jboss.system.server.ServerImpl.start (ServerImpl.java:362) в org.jboss.Main.boot (Main.java:200) в org.jboss.Main $ 1.run (Main.java:508) в java.lang.Thread.run (Thread.java:662) Причина: javax.portlet.PortletException: служба авторизации не найдена в org.jboss.portal.core.cms.ui.admin.CMSAdminPortlet.init (CMSAdminPortlet.java:140) в org.jboss.portlet.JBossPortlet.init (JBossPortlet.java:387) в org.jboss.portal.core.cms.ui.admin.CMSAdminPortlet.init (CMSAdminPortlet.java:151) в org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.initPortlet (PortletContainerImpl.java:417) в org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.start (PortletContainerImpl.java:256) ... еще 134

и

2011-11-21 08: 55: 54 977 ОШИБКА [org.jboss.deployment.scanner.URLDeploymentScanner] Incomplete Список развертывания:

--- MBean-компоненты, ожидающие других MBean-компонентов --- ObjectName: portal: service = Module, type = IdentityServiceController Состояние: FAILED Причина: org.jboss.portal.identity.IdentityException: не удается инициировать Идентификационные модули: Зависит от: portal: service = Hibernate portal: service = IdentityEventManager зависит от меня: портал: Сервис = AuthorizationProvider, тип = К портал: Сервис = Interceptor, тип = Cms, имя = ACL портал: Сервис = ApprovePublish, тип = Workflowportal: service = IdentityUIConfigurationService, тип = IdentityUI portal: service = IdentityUserManagementService, type = IdentityUI portal.management:service=Management,type=Identity,name=Default portal: service = Interceptor, type = Server, name = Пользовательский портал: service =Модуль, тип = Почтовый портал: service = CustomizationManager

--- MBEANS, КОТОРЫЕ ЯВЛЯЮТСЯ ПРИЧИНОЙ ЗАДАЧИ --- ObjectName: portal: service = Module, type = IdentityServiceController Состояние: СБОЙ Причина:org.jboss.portal.identity.IdentityException: Невозможно инициировать модули идентификации: I Зависит от: portal: service = Hibernate portal: service = IdentityEventManager Зависит от меня: portal: service = AuthorizationProvider, тип = cms portal: service = Interceptor, type =Cms, имя = портал ACL: служба = ApprovePublish, тип = портал рабочего процесса: служба = IdentityUIConfigurationService, тип = IdentityUI portal: service = IdentityUserManagementService, type = IdentityUI portal.management:service=Management,type=Identity,name=Default portal: service= Interceptor, тип = Сервер, имя = User portal: service = Module, type = Mail portal: service = CustomizationManager

Возможно, кто-то из вас уже сталкивался с такой ошибкой?

1 Ответ

1 голос
/ 22 ноября 2011

Элемент "class" в standardidentity-config.xml должен ссылаться на соответствующий модуль, например, для пользователя, он должен ссылаться на реализацию UserModule (а не на реализацию самого User: MyUserImpl !!!) и то же самоедля Role, Membership и UserProfile.

Поэтому я реализовал интерфейсы UserModule, RoleModule и т. д. Но не напрямую, а вместо этого расширил UserModuleService, RoleModuleService и т. д., чтобы сохранить некоторую работу.Отсутствующие свойства, о которых я упоминал в своем последнем посте, больше не нужны, и их можно удалить.

Standardidentity-config.xml теперь выглядит следующим образом:

<module>
    <type>User</type>
    <implementation>CUSTOM</implementation>
    <service-name>portal:service=Module,type=User</service-name>
    <class>com.myCompany.MyUserModuleImpl</class>
    <config>
        <option>
            <name>jNDIName</name>
            <value>java:/portal/UserModule</value>
        </option>
    </config>
</module>
<module>
    <type>Role</type>
    <implementation>CUSTOM</implementation>
    <service-name>portal:service=Module,type=Role</service-name>
    <class>com.myCompany.MyRoleModuleImpl</class>
    <config>
        <option>
            <name>jNDIName</name>
            <value>java:/portal/RoleModule</value>
        </option>
    </config>
</module>
<module>
    <type>Membership</type>
    <implementation>CUSTOM</implementation>
    <service-name>portal:service=Module,type=Membership</service-name>
    <class>com.myCompany.MyMembershipModuleImpl</class>
    <config>
        <option>
            <name>jNDIName</name>
            <value>java:/portal/MembershipModule</value>
        </option>
    </config>
</module>
<module>
    <type>UserProfile</type>
    <implementation>CUSTOM</implementation>
    <service-name>portal:service=Module,type=UserProfile</service-name>
    <class>com.myCompany.MyUserProfileModuleImpl</class>
    <config>
        <option>
            <name>jNDIName</name>
            <value>java:/portal/UserProfileModule</value>
        </option>
    </config>
</module>

Для реализации этихинтерфейсы Мне нужно было добавить следующие зависимости в pom.xml:

<dependency>
    <groupId>org.jboss.portal.common</groupId>
    <artifactId>common-common</artifactId>
    <version>1.2.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jboss</groupId>
    <artifactId>jboss-common-client</artifactId>
    <version>3.2.3</version>
    <scope>provided</scope>
</dependency>
...