Как создать узлы в хранилище на этапе начальной загрузки - PullRequest
1 голос
/ 22 августа 2011

Позвольте мне создать узлы в репозитории alfresco на этапе начальной загрузки, чтобы использовать их позже, как я могу это сделать?

Я использую файл .amp, чтобы установить настройку расширения в alfresco.war, так что у меня есть module-context.xml и внутри него я пишу инструкцию импорта, ссылаясь на bootstrap-context.xml, у которого есть bean-компонент, подобный этому

<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>

, и, как вы видите, у bean-компонента есть набор свойстввнедрено из пружинного фреймворка.

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", "admin@localhost", "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)

Итак, может кто угоднопомогите мне решить эту проблему.

Спасибо, Мухаммед Амр |Цифровая серия |Старший системный разработчик

1 Ответ

2 голосов
/ 22 августа 2011

Я бы предложил не использовать Node Service для этого.

Если вы посмотрите, как новые системные папки добавляются в Alfresco (во время обновлений и новых установок), они обычно выполняются как ACP.Используя ACP, вам не нужно заботиться об особых случаях на этапе начальной загрузки (когда не все репо готовы, и не все сервисы полностью доступны).Вместо этого вы просто указываете свой контекстный файл начальной загрузки на ACP, в котором есть содержимое и узлы, и все готово.

Если вам нужен простой пример создания папки, вы можете попробовать посмотреть /config/alfresco/bootstrap/scheduledActionsFolder.xmlв стандартной установке для простого руководства.

...