我想实现一个自定义身份模型,以便连接到提供用户信息的专有 Web 服务。所以我按照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-portal-2.7.2\server\default\deploy\jboss-portal.sar\lib。
\jboss-portal-2.7.2\server\default\deploy\jboss-portal.sar\conf\identity\identity-config.xml 中的更改,将现有的 User-type 模块替换为新的(不需要任何配置):
<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。句柄(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(回复HeaderFilter.java:96)doFilter(ReplyHeaderFilter.java:96)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>
如您所见,我还实现了 Role、Membership 和 UserProfile。之后,服务器抱怨在这些类中缺少一些它需要的属性。因此,我在这四个类中的每一个中添加了以下内容:
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:portlet CMSAdminPortlet 在初始化期间抛出了 portlet 异常在 org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.start(PortletContainerImpl.java:284) 在 org.jboss.portal.portlet.impl.container.PortletContainerLifeCycle.invokeStart(PortletContainerLifeCycle.java:76) 在 org.jboss .portal.portlet.impl.container.LifeCycle.managedStart(LifeCycle.java:92) 在 org.jboss.portal.portlet.impl.container.PortletFilterLifeCycle.startDependents(PortletFilterLifeCycle.java:74) 在 org.jboss.portal.portlet .impl.container.LifeCycle.managedStart(LifeCycle.java:128) 在 org.jboss.portal.portlet.impl.container.PortletApplicationLifeCycle。startDependents(PortletApplicationLifeCycle.java:339) at org.jboss.portal.portlet.impl.container.LifeCycle.managedStart(LifeCycle.java:128) at 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.DeploymentContext.start(DeploymentContext.java:99)在 org.jboss.portal.server.deployment.jboss.PortalDeploymentInfoContext.add(PortalDeploymentInfoContext.java:86) 在 org.jboss.portal.server.deployment.jboss.ServerDeployer.registerFactory(ServerDeployer.java:134) 在 org.jboss .portal.server.deployment.jboss.AbstractDeploymentFactory.registerFactory(AbstractDeploymentFactory.java:113) 在 org.jboss.portal.server.deployment.jboss。AbstractDeploymentFactory.start(AbstractDeploymentFactory.java:152) 在 org.jboss.portal.portlet.deployment.jboss.PortletAppDeploymentFactory.start(PortletAppDeploymentFactory.java:147) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect。 NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.portal.jems .as.system.JBossServiceModelMBean$ServiceMixin.execute(JBossServiceModelMBean.java:486) 在 org.jboss.portal.jems.as.system.JBossServiceModelMBean$ServiceMixin.startService(JBossServiceModelMBean.java:452) 在 org.jboss.system.ServiceMBeanSupport .jbossInternalStart(ServiceMBeanSupport.java:289) 在 org.jboss.system.ServiceMBeanSupport。开始(ServiceMBeanSupport.java:196)在 org.jboss.portal.jems.as.system.JBossServiceModelMBean$6.invoke(JBossServiceModelMBean.java:374) 在 org.jboss.mx.server.Invocation.dispatch(Invocation.java:94 ) 在 org.jboss.mx.interceptor.ModelMBeanOperationInterceptor 的 org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 的 org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)。在 org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 在 org.jboss 的 org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 调用(ModelMBeanOperationInterceptor.java:142) .mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 在 org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:995) 在 $Proxy0.start(Unknown Source) 在 org.jboss.system。服务控制器。start(ServiceController.java:417) at org.jboss.system.ServiceController.start(ServiceController.java:435) at org.jboss.system.ServiceController.start(ServiceController.java:435) at org.jboss.system.ServiceController .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 org.jboss.system.ServiceController.start(ServiceController.java:435) at org.jboss.system.ServiceController.start(ServiceController.java:435) at sun.reflect.GeneratedMethodAccessor9 .invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) 在 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) at $Proxy4.start(Unknown Source) at org.jboss.deployment.SARDeployer.start(SARDeployer.java:304) at 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) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java: 133) 在 org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) 在 org.jboss.mx.server.Invocation 的 org.jboss.mx.server.Invocation.invoke(Invocation.java:88) .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) at $Proxy199.start(Unknown Source) at org.jboss.deployment.XSLSubDeployer.start(XSLSubDeployer.java:197) at 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(Unknown Source) 在 sun .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) at org.jboss.mx.server.Invocation.invoke( Invocation.java:88) 在 org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 在 org.jboss.mx.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) 在 org.jboss.mx 。服务器。AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) at $ org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634) 的 org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634) 的 org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421) 的 Proxy9.deploy(未知来源)。 deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263) at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336) at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java: 289) 在 org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245) 在太阳。reflect.GeneratedMethodAccessor3.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.mx.interceptor。 ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) at org .jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController .java:978) 在 $Proxy0.start(Unknown Source) 在 org.jboss.system.ServiceController.start(ServiceController.java:417) 在 sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) 在 sun.reflect。DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) at 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) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) at $Proxy4.start(Unknown Source)在 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。在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 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.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) 在 org.jboss.mx.server 的 org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)。 Invocation.invoke(Invocation.java:88) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 在 org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 在 org.jboss.mx.util 的 org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) .MBeanProxyExt.invoke(MBeanProxyExt.java:210) at $Proxy5.deploy(Unknown Source) at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482) at org.jboss.system.server.ServerImpl。 start(ServerImpl.java:362) at org.jboss.Main.boot(Main.java:200) at org.jboss.Main$1.run(Main.java:508) at java.lang.Thread.run(Thread. java:662) 原因:javax.portlet.PortletException:在 org.jboss.portlet.JBossPortlet 的 org.jboss.portal.core.cms.ui.admin.CMSAdminPortlet.init(CMSAdminPortlet.java:140) 中找不到授权服务.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) at org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.start(PortletContainerImpl.java:256) ... 134 更多
和
2011-11-21 08:55:54,977 错误 [org.jboss.deployment.scanner.URLDeploymentScanner] 不完整的部署列表:
--- MBean 等待其他 MBean --- ObjectName:portal:service=Module,type=IdentityServiceController 状态:失败原因:org.jboss.portal.identity.IdentityException:无法启动身份模块:我依赖:portal:service= Hibernate portal:service=IdentityEventManager 取决于我:portal:service=AuthorizationProvider,type=cms portal:service=Interceptor,type=Cms,name=ACL portal:service=ApprovePublish,type=Workflow portal:service=IdentityUIConfigurationService,type=IdentityUI portal:service=IdentityUserManagementService,type=IdentityUI portal.management:service=Management,type=Identity,name=默认portal:service=Interceptor,type=Server,name=用户portal:service=Module,type=Mail portal:service=定制经理
--- MBean 是问题的根本原因 --- 对象名:portal:service=Module,type=IdentityServiceController 状态:失败原因:org.jboss.portal.identity.IdentityException:无法启动身份模块:我依赖: portal:service=Hibernate portal:service=IdentityEventManager 取决于我:portal:service=AuthorizationProvider,type=cms portal:service=Interceptor,type=Cms,name=ACL portal:service=ApprovePublish,type=Workflow portal:service=IdentityUIConfigurationService ,type=IdentityUI portal:service=IdentityUserManagementService,type=IdentityUI portal.management:service=Management,type=Identity,name=默认portal:service=Interceptor,type=Server,name=用户portal:service=Module,type=Mail门户:服务=CustomizationManager
也许你们中的任何人已经遇到过这样的错误?