【问题标题】:Interdependent reference between two models in AlfrescoAlfresco 中两个模型之间的相互依赖引用
【发布时间】:2014-01-16 04:40:02
【问题描述】:

我编写了两个模型文件。对于某些关联,两个模型都引用了另一个文件中的类型。我还更新了上下文文件中bean的依赖标签(一个模型依赖于另一个)(我知道依赖标签是指已经创建的bean)。当我在 tomcat 中运行时,它会抛出错误。

(1) 有没有办法做到以上不报错?

(2)如果没有,把所有类型都放在一个模型文件中,我需要这样做吗?

这是 abc-model-context.xml 中的 bean 声明

<bean id="exampleOne.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
    <property name="models">
        <list>                
            <value>alfresco/extension/model/defModel.xml</value>    
            <value>alfresco/extension/model/abcModel.xml</value>
            <value>alfresco/extension/model/ghiModel.xml</value>
        </list>
    </property>
</bean>

这是错误的堆栈跟踪。

 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'exampleOne.dictionaryBootstrap' defined in file [C:\Alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\extension\abc-model-context.xml]: Invocation of init method failed; nested exception is org.alfresco.service.cmr.dictionary.DictionaryException: 00150001 Could not import bootstrap model alfresco/extension/model/defModel.xml
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
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:4939)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

原因:org.alfresco.service.cmr.dictionary.DictionaryException: 00150001 无法导入引导模型 alfresco/extension/model/defModel.xml 在 org.alfresco.repo.dictionary.DictionaryBootstrap.onDictionaryInit(DictionaryBootstrap.java:158) 在 org.alfresco.repo.dictionary.DictionaryBootstrap.bootstrap(DictionaryBootstrap.java:105) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1544) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1485) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) ... 27 更多 原因:org.alfresco.service.cmr.dictionary.DictionaryException: 00150000 无法编译模型 def:defModel 在 org.alfresco.repo.dictionary.CompiledModel.(CompiledModel.java:108) 在 org.alfresco.repo.dictionary.M2Model.compile(M2Model.java:163) 在 org.alfresco.repo.dictionary.DictionaryDAOImpl.putModelImpl(DictionaryDAOImpl.java:311) 在 org.alfresco.repo.dictionary.DictionaryDAOImpl.putModel(DictionaryDAOImpl.java:294) 在 org.alfresco.repo.dictionary.DictionaryBootstrap.onDictionaryInit(DictionaryBootstrap.java:154) ... 35 更多 原因:org.alfresco.service.namespace.NamespaceException: URI http://www.exampleOne.org/model/abc/1.0 无法导入,因为它没有定义(前缀为 abc 在 org.alfresco.repo.dictionary.CompiledModel.createLocalPrefixResolver(CompiledModel.java:206) 在 org.alfresco.repo.dictionary.CompiledModel.constructDefinitions(CompiledModel.java:130) 在 org.alfresco.repo.dictionary.CompiledModel.(CompiledModel.java:88) ... 39 更多

【问题讨论】:

  • 我不知道您看到了什么错误,所以我无能为力。
  • 我已经在上下文文件中发布了 bean 声明,并从日志文件中发布了错误堆栈跟踪
  • 您说您有 2 个模型文件,但在 context.xml 中列出了 3 个?你有一个 abc:assoc 引用 def:type 和一个 def:assoc 引用 abc:type?请使用命名空间前缀阐明类型/关联位置。

标签: alfresco alfresco-share


【解决方案1】:

我怀疑您的 defModel.xml 文件格式不正确或无效。确保当您在支持 XML 的编辑器中打开它时,它不会报错。您可能还想对照 $TOMCAT_HOME/webapps/alfresco/WEB-INF/classes/alfresco/model 中的 modelSchema.xsd 检查它。

【讨论】:

  • 我接受了 Alfresco 论坛中给出的建议“你不能有两个以循环方式相互依赖的模型。但你也不需要将所有类型移动到一个模型文件中。它应该将关联移动到一个文件就足够了,所以你有一个模型依赖于另一个没有循环路由。移动关联应该很容易 - 你只需要更新名称和目标类“。它现在对我有用。谢谢杰夫
【解决方案2】:

看看http://wiki.alfresco.com/wiki/Data_Dictionary_Guide#Model_Bootstrapping

字典引导 bean 支持模型的列表属性:

  <property name="models">
        <list>
            <value>my/customModel1.xml</value>
            <value>my/customModel2.xml</value>
        </list>
    </property>

因此,最简单的解决方法是在两个模型中只使用一个 bean。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 2011-04-26
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多