2011-08-22 43 views
1

让我需要在引导阶段在引导阶段创建一个节点以便稍后使用它们,我该怎么做?如何在引导阶段在存储库中创建节点

我使用.amp文件将扩展定制安装到alfresco.war中,所以我有 module-context.xml,并且在其中我编写了一个import语句,引用了具有类似bean的bootstrap-context.xml这

<bean id="com.ds.module.extensions.Core.securityRequirementBootstrap" 
     class="com.ds.ui.bean.dialog.module.SecurityRequirementBootstrap" 
     init-method="init"> 
    <property name="nodeService"> 
     <ref bean="NodeService" /> 
    </property>   
    <property name="searchService"> 
     <ref bean="SearchService" /> 
    </property>   
    <property name="authenticationService"> 
     <ref bean="AuthenticationService" /> 
    </property> 
    <property name="transactionService"> 
     <ref bean="transactionService" /> 
    </property> 
    <property name="personService"> 
     <ref bean="PersonService" /> 
    </property> 
</bean> 

,正如你看到的豆已经设置从Spring框架注入的属性的。

SecurityRequirementBoostrap是一类,它喜欢,因为这

公共类SecurityRequirementBootstrap {

public void init() throws Exception{ 
    AuthenticationUtil.runAs(new RunAsWork<String>() { 
     public String doWork() throws Exception { 
      try { 
       transaction = transactionService.getUserTransaction(); 
       transaction.begin(); 
       if(!authenticationService.authenticationExists("admin")){ 
        authenticationService.createAuthentication("admin", new char [] {'a','d','m','i','n'}); 
       } 
       if(!personService.personExists("admin")){ 
        personService.createPerson(createDefaultProperties("admin", "admin", "admin", "[email protected]", "admin")); 
       } 
       authenticationService.authenticate("admin", new char [] {'a','d','m','i','n'}); 
       NodeUtil.checkSecurityPreRequesite(searchService,nodeService); 
       transaction.commit(); 
       return ""; 
      } 
      catch(Throwable e){ 
       transaction.rollback(); 
       e.printStackTrace(); 
      } 
      return ""; 
     } 
    }, "admin"); 
} 

private Map<QName, Serializable> createDefaultProperties(String userName, String firstName, String lastName, 
     String email, String password) { 
    HashMap<QName, Serializable> properties = new HashMap<QName, Serializable>(); 
    properties.put(ContentModel.PROP_USERNAME, userName); 
    properties.put(ContentModel.PROP_FIRSTNAME, firstName); 
    properties.put(ContentModel.PROP_LASTNAME, lastName); 
    properties.put(ContentModel.PROP_EMAIL, email); 
    properties.put(ContentModel.PROP_PASSWORD, password); 
    return properties; 
} 


private NodeService nodeService; 
private SearchService searchService; 
private UserTransaction transaction; 
private TransactionService transactionService; 
private MutableAuthenticationService authenticationService; 
private PersonService personService; 
public static Logger LOGGER = Logger.getLogger(SecurityRequirementBootstrap.class); 

public PersonService getPersonService() { 
    return personService; 
} 

public void setPersonService(PersonService personService) { 
    this.personService = personService; 
} 

public MutableAuthenticationService getAuthenticationService() { 
    return authenticationService; 
} 

public void setAuthenticationService(
     MutableAuthenticationService authenticationService) { 
    this.authenticationService = authenticationService; 
} 

public TransactionService getTransactionService() { 
    return transactionService; 
} 

public void setTransactionService(TransactionService transactionService) { 
    this.transactionService = transactionService; 
} 

public NodeService getNodeService() { 
    return nodeService; 
} 

public void setNodeService(NodeService nodeService) { 
    this.nodeService = nodeService; 
} 

public SearchService getSearchService() { 
    return searchService; 
} 

public void setSearchService(SearchService searchService) { 
    this.searchService = searchService; 
} 

}

正如你可以在init方法看,我的目的是管理用户身份验证和后我将使用NodeUtil类来创建所需的节点。 NodeUtil是一个很大的类,但无论引导如何,它都能正常工作。

在任何情况下,我有一个例外,一旦露天自举和异常看起来像这样

$ org.alfresco.repo.audit.model.AuditModelException: 07220000 No registered audit data extractor exists for 'org_alfresco_module_dod5015_userRolesExtractor'. 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl$AuditModelRegistryState.cacheAuditElements(AuditModelRegistryImpl.java:524) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl$AuditModelRegistryState.access$500(AuditModelRegistryImpl.java:240) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl$AuditModelRegistryState$1.execute(AuditModelRegistryImpl.java:389) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl$AuditModelRegistryState$1.execute(AuditModelRegistryImpl.java:375) 
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:381) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl$AuditModelRegistryState$2.doWork(AuditModelRegistryImpl.java:416) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl$AuditModelRegistryState$2.doWork(AuditModelRegistryImpl.java:413) 
at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:508) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl$AuditModelRegistryState.start(AuditModelRegistryImpl.java:412) 
at org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean.start(AbstractPropertyBackedBean.java:458) 
at org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean.start(AbstractPropertyBackedBean.java:440) 
at org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean.getState(AbstractPropertyBackedBean.java:221) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl.getState(AuditModelRegistryImpl.java:165) 
at org.alfresco.repo.audit.model.AuditModelRegistryImpl.getAuditPathMapper(AuditModelRegistryImpl.java:201) 
at org.alfresco.repo.audit.AuditComponentImpl.areAuditValuesRequired(AuditComponentImpl.java:232) 
at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:129) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
at $Proxy56.authenticationExists(Unknown Source) 
at com.ds.ui.bean.dialog.module.SecurityRequirementBootstrap$1.doWork(SecurityRequirementBootstrap.java:29) 
at com.ds.ui.bean.dialog.module.SecurityRequirementBootstrap$1.doWork(SecurityRequirementBootstrap.java:1) 
at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:508) 
at com.ds.ui.bean.dialog.module.SecurityRequirementBootstrap.init(SecurityRequirementBootstrap.java:24) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at 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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1529) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1468) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416) 
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
at org.alfresco.web.app.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:63) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) 
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637) 
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563) 
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498) 
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) 
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
at org.apache.catalina.core.StandardService.start(StandardService.java:519) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:581) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at 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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

所以,任何人都可以帮我解决这个问题。

谢谢 Mohammed Amr |数字系列|高级系统开发人员

回答

2

我建议不要使用节点服务来做到这一点。

如果您看看如何将新的系统文件夹添加到Alfresco(在升级和全新安装期间),它们通常以ACP完成。通过使用ACP,您无需在引导阶段处理特殊情况(当并非所有回购准备就绪,并且并非所有服务都完全可用时)。相反,您只需将您的引导程序上下文文件指向具有内容和节点的ACP即可。

如果您想创建一个文件夹的简单示例,您可以尝试在标准安装中查看/config/alfresco/bootstrap/scheduledActionsFolder.xml以获取简单指南。