2011-11-18 42 views
1

我想實現一個自定義標識模型,以連接到提供用戶信息的專有Web服務。 所以我按照http://docs.jboss.com/jbportal/v2.7.1/referenceGuide/html/identity.html上的說明操作。如何爲JBoss Portal實現自定義標識模型?

我使用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中的更改, 替換現有的用戶類型模塊(新的它不需要任何配置):

例外

<module> 
    <type>User</type> 

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

    <config/> 
</module> 

通過啓動服務器雙擊run.bat中UND瀏覽網站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。服務(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.getCurrentSes (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文件即可獲得相同的異常。所以我假設 我的jar沒有加載。此外,我的新模塊與數據庫無關,因此不需要JTA事務。

那麼我錯過了什麼讓這個東西工作?

在此先感謝您的幫助。

更新1:

又見面了!

通過仔細檢查服務器日誌文件,我能夠取得一些進展。服務器無法解析 xml文件身份-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的門戶 - 2.7 0.2 \服務器\ DEFAULT \部署\ jboss的-portal.sar \的conf \標識\ 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:54696 ERROR [org.jboss.portal.portlet.impl.container .LifeCycle]無法啓動 對象 org.jboss.portal.portlet.container.PortletInitializationException:本 門戶CMSAdminPortlet在 org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.start(PortletContainerImpl初始化時拋出一個portlet例外。 java:284) at org.jboss.portal.portlet.impl.container.PortletContainerLifeCycle.invokeStart(PortletContainerLifeCycle.java:76) at 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) 在 org.jboss.portal.portlet.impl.container.LifeCycle.managedStart(LifeCycle.java:128) 在 org.jboss.portal.portlet.deployment.jboss.PortletAppDeployment.start(PortletAppDeployment.java:226) 在 org.jbos s.portal.core.deployment.jboss.PortletAppDeployment.start(PortletAppDeployment.java:94) 在 org.jboss.portal.server.deployment.jboss.DeploymentContext.start(DeploymentContext.java:99) 在 組織。 jboss.portal.server.deployment.jboss.PortalDeploymentInfoContext。添加(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。啓動(PortletAppDeploymentFactory.java:147) 在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.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.start(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.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.system。 ServiceController的$ ServiceProxy.invoke(ServiceController.java:995) 在$ Proxy0.start(來源不明)在 org.jboss.system.ServiceController.start(ServiceController.java:417) 在 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) 在 org.jboss。 system.ServiceController.start(ServiceController.java:435) at org.jboss.system.ServiceController.start(ServiceController.java:435) at org.jboss.system.ServiceController.s餡餅在 org.jboss.system.ServiceController.start(ServiceController.java:435)(ServiceController.java:435) 在sun.reflect.GeneratedMethodAccessor9.invoke(未知來源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:25) at org.jboss上的java.lang.reflect.Method.invoke(Method.java:597) org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 。 mx.server.Invocation.dispatch(Invocation.java:94) org.jboss.mx.server.Invocation.invoke(Invocation.java:86)at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker。的java:264) 在 org.jboss.mx.server.MBeanServerImpl。調用(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.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法): 25) at org.jboss.mx.server上的java.lang.reflect.Method.invoke(Method.java:597) org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 。 Invocation.dispatch(Invocation.java:94) org.jboss.mx.int 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)at org.jboss.deployment.MainDeployer.start(MainDeployer.java :1025)處,在 sun.reflect.GeneratedMethodAccessor26.invoke org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782) org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)(未知源)在 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) at org。 jboss.mx.server.Invocation.invoke(Invocation.java:88)at org.jboss.mx.interceptor.ModelMBeanOp erationInterceptor.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(Abstrac tDeploymentScanner.java:263) 在 org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336) 在 org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289) 在 有機.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245) 在sun.reflect.GeneratedMethodAccessor3.invoke(未知來源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang中。在org.jboss.mx.server.Invocation中反映。方法.invoke(Method.java:597) org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 。發送(Invocation.java:94) 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) 在 org.jboss.system.ServiceController $ ServiceProxy.invoke(ServiceController.java:978) 在$ Proxy0.start(來源不明)在 org.jboss.system.ServiceController.start(ServiceController.java:417) 在sun.reflect.GeneratedMethodAccessor9.invoke(未知來源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java的.lang.reflect.Method.invoke(Method.java:597)at 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:81 9)在 org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)處 sun.reflect.NativeMethodAccessorImpl.invoke0 org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)(本機方法)在 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 org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 在org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)。 interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) at org.jboss.mx.server.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.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)at java.lang.Thread.run(Thread.java:662)導致: javax.portlet.PortletException:未在 組織中找到授權服務。 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:54977錯誤[org.jboss.deployment.scanner.URLDeploymentScanner]不完整 部署上市:

---的MBean等待其他MBeans --- ObjectName:portal:service = Module,type = IdentityServiceController狀態:FAILED 原因:org.jboss.portal.identity.IdentityException:無法啓動 身份模塊:I取決於:portal:service = Hibernate 門戶:服務=鑑定者tityEventManager取決於我: 門戶:服務= AuthorizationProvider,類型= CMS 門戶:服務=攔截,類型= CMS,名字= ACL 門戶:服務= ApprovePublish,類型=工作流 門戶:服務= IdentityUIConfigurationService,類型= IdentityUI portal:service = IdentityUserManagementService,type = IdentityUI portal.management:service=Management,type=Identity,name=Default portal:service = Interceptor,type = Server,name = User portal:service = Module,type = Mail portal :service = CustomizationManager

--- MBEANS是問題的根本原因--- ObjectName:portal:service = Module,type = IdentityServiceController狀態:FAILED 原因:org.jboss.portal.identity.IdentityException:無法啓動 身份模塊:I取決於:portal:service = Hibernate portal:service = IdentityEventManager取決於我: portal:service = AuthorizationProvider,type = CMS 門戶:服務=攔截,類型= CMS,名字= ACL 門戶:服務= ApprovePublish,類型=工作流 門戶:服務= IdentityUIConfigurationService,類型= IdentityUI 門戶:服務= IdentityUserManagementService,類型= IdentityUI portal.management :service = Management,type = Identity,name = Default portal:service = Interceptor,type = Server,name = User portal:service = Module,type = Mail portal:service = Cus tomizationManager

也許你們中的任何人都遇到過這樣的錯誤?

回答

1

standardidentity-config.xml的元素「class」必須引用相應的模塊,例如,對於用戶,它必須 引用UserModule的實現(而不是用戶本身的實現: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> 
相關問題