Я работаю над «ресурсным» контроллером, использующим последние Spring3 и JBoss Modeshape (указывающим на объединенное хранилище с использованием коннекторов файловой системы) для извлечения ресурса.
Когда я захожу на любую веб-страницу, используя контроллер, он возвращает большинство изображений, а затем вызывает исключение NullPointerException в вызове "getNode" для других ...
С моей стороны, я не делаю ничего особенного (мои тестовые случаи работают нормально):
- Создание / настройка двигателя (только один раз)
- Войдите и получите сеанс
- Попробуйте найти узел
- Выход из сеанса
Код выглядит примерно так:
session = createSession();
Node node = session.getNode(path);
После первого попадания на страницу (с ошибками), каждое попадание после этого работает идеально, и с этого момента все нормально загружается.
Я перехожу по этой ссылке Тяжелый параллелизм: лучший способ управления сеансами JCR для создания / управления сеансами.
Похоже, что у меня есть несколько потоков, пытающихся настроить JcrNodeDefinition в Modeshape. Если я отмечу enureRequirePrimaryTypesLoaded()
метод как synchronized
, то я никогда не получаю ошибку.
У кого-нибудь есть опыт / предложения по использованию Modeshape, параллелизма и управления сессиями?
Трассировка стека:
java.lang.NullPointerException
at org.modeshape.jcr.JcrNodeDefinition.ensureRequiredPrimaryTypesLoaded (JcrNodeDefinition.java:114)
at org.modeshape.jcr.JcrNodeDefinition.allowsChildWithType (JcrNodeDefinition.java:275)
at org.modeshape.jcr.RepositoryNodeTypeManager.findChildNodeDefinition (RepositoryNodeTypeManager.java:1142)
в org.modeshape.jcr.JcrNodeTypeManager.findChildNodeDefinition (JcrNodeTypeManager.java:433)
в org.modeshape.jcr.SessionCache $ JcrNodeOperations.materialize (SessionCache.java:2711)
в org.modeshape.graph.session.GraphSession $ Node.load (GraphSession.java:1755)
в org.modeshape.graph.session.GraphSession $ Node.getPayload (GraphSession.java:3030)
в org.modeshape.jcr.AbstractJcrNode.getNode (AbstractJcrNode.java:950)
в org.modeshape.jcr.AbstractJcrNode.getNode (AbstractJcrNode.java:96)
в com.acme.beans.contents.FileNodeAdapter. (FileNodeAdapter.java:26)
в com.acme.web.views.ResourceController.getStream (ResourceController.java:77)
на com.acme.web.views.ResourceController.handleResource (ResourceController.java:46)