2016-01-19 45 views
3

A 損壞的動態內容模型Alfresco(5.0.d CE)被部署和激活。Alfresco:如何用自舉程序覆蓋(損壞的)動態內容模型?

由腐敗我的意思是,內容模型是無效的,因爲錯誤的類型已被使用,它不存在。例如:

<property name="my:name"> 
    <type>test</type> 
</property> 

其中「測試」顯然無效 - 但模型中的錯誤在這裏並不重要。

所以,這個內容模型,動態地部署到

Repository > Data Dictionary > Models 

,然後不幸的是通過Alfresco的API調用激活(而不是通過分享UI;因爲分享UI通常會檢查,如果模型前不允許實際上是有效的激活它)。

這使得露天倉庫到不能再啓動,但失敗與錯誤:

2016-01-19 18:17:11,780 ERROR [org.springframework.web.context.ContextLoader] [localhost-startStop-1] Context initialization failed 
org.alfresco.service.namespace.NamespaceException: A namespace prefix is not registered for uri my.test.model 

上引導了。

我的問題是現在如何在無法訪問正在運行的Alfresco存儲庫實例的情況下再次停用這個損壞的模型,因此無法再訪問數據字典>模型文件夾。

我已經嘗試過部署customModel.xml和自定義模型context.xml中使用相同的型號名稱等內到/戶外/ tomcat的/共享/類/戶外/擴展文件夾,但這並似乎沒有覆蓋動態模型。 當啓動Alfresco時,我仍然得到上面的錯誤。

任何想法任何人?謝謝!

僅供參考,這是我用它來覆蓋舊的,它只是簡單地具有相同的型號名稱爲腐敗一個修正虛擬customModel.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 

<!-- Custom Model --> 

<!-- Note: This model is pre-configured to load at startup of the Repository. So, all custom --> 
<!--  types and aspects added here will automatically be registered --> 

<model name="my:testModel" xmlns="http://www.alfresco.org/model/dictionary/1.0"> 

    <!-- Optional meta-data about the model --> 
    <description>Custom Model</description> 
    <author></author> 
    <version>1.0</version> 

    <imports> 
     <!-- Import Alfresco Dictionary Definitions --> 
     <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/> 
     <!-- Import Alfresco Content Domain Model Definitions --> 
     <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/> 
    </imports> 

    <!-- Introduction of new namespaces defined by this model --> 
    <!-- NOTE: The following namespace custom.model should be changed to reflect your own namespace --> 
    <namespaces> 
     <namespace uri="my.test.model" prefix="my"/> 
    </namespaces> 

</model> 

回答

5

任何部署到數據字典的模型都將作爲原始XML文件存儲在內容存儲中。在這種情況下,最簡單的解決方案是查找該XML文件並使用已列出的已更正的模型更新其內容。 你應該能夠很容易地通過在alf_node,alf_qname,alf_node_properties,alf_content_data和alf_content_url表,即執行DB查詢做了這樣的查詢

select alf_content_url.content_url 
from alf_node 
    left join alf_qname on alf_node.type_qname_id = alf_qname.id 
    left join alf_node_properties on alf_node_properties.node_id = alf_node.id 
    join alf_content_data on alf_content_data.id = alf_node_properties.long_value 
    left join alf_content_url on alf_content_url.id = alf_content_data.content_url_id 
where 
    alf_qname.local_name = 'dictionaryModel' 
    and alf_content_url.content_url is not null 

找出任何模型文件中的模型進行修正後,重新啓動應因爲只有QNames實際存儲在數據庫中,但其他所有內容總是從XML文件(類路徑或內容存儲)中重新加載。

+0

嗯,是的,你是對的,文件存儲爲原始XML ...我現在回憶。我覺得我之前有點困惑,因爲奇怪的是我實際上在整個alf_data中進行了全文搜索,發現的所有內容都是alf_data/solr/models下的文件,但是沒有在alf_data/contentstore /下。但我用Pathfinder在我的Mac上進行了搜索 - 我認爲它沒有正確搜索/處理帶有.bin擴展名的文件,或者跳過它,不知道。應該用grep來完成它。 –

0

我的解決方案,現在是刪除部分/ alf_data/contentstore /(我大致知道該模型在什麼時間部署)。由於它全部採用.bin格式,我不確定我還刪除了哪些其他文件,但它並不多;-) 之後,Alfresco至少再次啓動。

1

我認爲你可以做一個grep來搜索文件系統中的文件。現在太晚了...

+1

嗯,是的,你是對的,這些文件存儲爲原始XML ...我現在回想起來。我覺得我之前有點困惑,因爲奇怪的是我實際上在整個alf_data中進行了全文搜索,發現的所有內容都是alf_data/solr/models下的文件,但是沒有在alf_data/contentstore /下。但我用Pathfinder在我的Mac上進行了搜索 - 我認爲它沒有正確搜索/處理帶有.bin擴展名的文件,或者跳過它,不知道。應該用grep來完成它。 –