2016-01-19 11 views
3

A модель поврежденного динамического контента до Alfresco (5.0.d CE) был развернут и активирован.Alfresco: как переопределить (поврежденную) модель динамического контента с загрузочным?

По причине коррупции я имею в виду, что модель содержимого недопустима, поскольку использовался неправильный тип, который не существует. Что-то вроде:

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

где «тест», очевидно, недействителен, но ошибка в модели на самом деле не имеет значения.

Таким образом, эта модель контента была развернута динамически в

Repository > Data Dictionary > Models 

, а затем, к сожалению, активируется с помощью API вызова Alfresco (а не через Share UI, так как доля UI обычно проверяет, если модель действует до фактически позволяет для его активации).

Это приводит к хранилищу Alfresco не начинать больше, но завершаться с ошибкой:

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 с таким же названием модели и т.д. внутри в/на открытом воздухе/котом разделяемой/классы/под открытым небом папки// расширение, но это делает похоже, не переопределяют динамическую модель. При загрузке 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 и обновить его содержимое с помощью скорректированной модели, которую вы указали. Вы должны быть в состоянии легко идентифицировать любой файл модели, выполнив DB запросов на alf_node, alf_qname, alf_node_properties, alf_content_data и alf_content_url таблиц, то есть делает запрос, как этот

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 /. Но я выполнил поиск на своем Mac с помощью Pathfinder - я думаю, что он не ищет/обрабатывает файлы с расширением .bin или не пропускает его, не знаю. Должно было сделать это с помощью grep. –

0

Мое решение сейчас было удаление частей/alf_data/contentstore/(я грубо знал, в какое время модель была развернута). Поскольку это все в формате .bin, я не уверен, какие еще файлы я удалил, но это было не так много ;-) Впоследствии, Alfresco, по крайней мере, начинается снова.

1

Я думаю, что вы могли бы сделать grep для поиска файла в файловой системе. Слишком поздно...

+1

Хм, да, вы правы, файлы хранятся как необработанные xml ... Я помню сейчас. Я думаю, что я был немного смущен раньше, потому что странно было то, что я действительно сделал полнотекстовый поиск по всему alf_data, и все, что было найдено, было файлом в файлах alf_data/solr/models, но ни одного из них в alf_data/contentstore /. Но я выполнил поиск на своем Mac с помощью Pathfinder - я думаю, что он не ищет/обрабатывает файлы с расширением .bin или не пропускает его, не знаю. Должно было сделать это с помощью grep. –