Каков наилучший способ сохранить мои POJO в JCR Jackrabbit? - PullRequest
10 голосов
/ 16 декабря 2008

В Jackrabbit я испытал два способа сохранения своих POJO в узлах репозитория для хранения в JCR Jackrabbit:

  1. пишу свой слой и
  2. с использованием Apache Graffito

Написание собственного кода оказалось трудоемким и трудоемким (пришлось писать и запускать много уродливых автоматических тестов), хотя и довольно гибким.

Использование Graffito было разочарованием, потому что он кажется «мертвым» проектом застрял в 2006

Какие есть лучшие альтернативы?

Ответы [ 5 ]

15 голосов
/ 16 декабря 2008

Другая альтернатива - полностью пропустить инфраструктуру OCM и просто использовать javax.jcr.Node как очень гибкий сам DAO. Основная причина существования OCM-фреймворков заключается в том, что в RDBMS необходимо сопоставить объекты с реляционной моделью. С JCR, который уже очень объектно-ориентирован (узел ~ = объект), эта основная причина исчезла. Осталось только то, что с помощью DAO вы можете ограничить доступ ваших программистов к своему коду (в том числе с помощью автозаполнения). Но этот подход на самом деле не использует концепцию JCR, что означает гибкое программирование без схемы . Использование JCR API непосредственно в вашем коде - лучший способ следовать этой концепции.

Представьте, что вы хотите добавить новое свойство к существующему узлу / объекту позднее в жизни вашего приложения - с помощью инфраструктуры OCM вы также должны изменить его и убедиться, что оно все еще работает должным образом. С прямым доступом к узлам это просто единственная точка изменения. Я знаю, это хороший способ получить проблемы с опечатками, например. имена свойств; но этот страх на самом деле не подкрепляется реальностью, поскольку в большинстве случаев вы очень быстро заметите опечатки или несоответствующие имена при тестировании приложения. Хорошим решением является использование строковых констант для общих имен узлов или свойств, даже в составе ваших API, если вы предоставляете им JCR API. Это по-прежнему дает вам возможность быстро добавлять новые свойства без использования слоев OCM.

Для того, чтобы иметь некоторые ограничения на то, что разрешено или что является обязательным (например, "полу-схема"), вы можете использовать типы узлов и миксины (начиная с JCR 2.0 вы также можете изменить тип узла для существующего контента): таким образом, вы можете полностью обрабатывать это на уровне хранилища и не беспокоиться о типизации и ограничениях внутри кода приложения - кроме перехвата исключений; -)

Но, конечно, этот выбор зависит от ваших требований и личных предпочтений.

2 голосов
/ 16 декабря 2008

Возможно, вам захочется взглянуть на Jackrabbit OCM , который жив и готов. Конечно, другой способ - вручную сериализовать / десериализовать POJO. Для этого есть много разных вариантов. Вопрос в том, нужна ли вам схема исправлений для запроса объектов в JCR. Если вы просто хотите сериализовать в XML, то XStream - это очень безболезненный способ сделать это. Если вам нужна более точная схема исправлений, есть также Betwixt от Apache Commons.

1 голос
/ 03 апреля 2013

Существует также https://github.com/ilikeorangutans/omf, очень гибкий объект для картографирования JCR. К сожалению, пока нет поддержки записи. Однако мы успешно используем этот фреймворк в большой установке CMS.

1 голос
/ 02 апреля 2012

Это зависит от ваших потребностей. Когда вы напрямую используете javax.jcr.node, это означает, что ваш код сильно связан с базовым механизмом. В средних и даже небольших проектах это не очень хорошая идея. Очевидно, что вопрос будет в том, как перейти от узла к своей модели домена. Проблема довольно схожа с переходом от Jdbc ResultSet к вашей модели домена. Имейте в виду, я имею в виду, что с технической точки зрения проблема похожа. С функциональной точки зрения существуют огромные различия между использованием JDBC и JCR.

Другим решающим фактором является то, можете ли вы наложить структуру в вашем контенте JCR или нет. Некоторые домены приложений могут (но все же лучше соответствуют JCR, чем JDBC), в других доменах контент может быть сильно неструктурированным по природе. В таком случае OCM явно перебор. Я бы все же посоветовал написать свой слой-обертку вокруг javax.jcr. * Classes.

1 голос
/ 17 января 2011

Существует также проект JCROM на http://code.google.com/p/jcrom/. Этот проект не работал в течение нескольких лет, но по состоянию на лето 2013 года было выпущено несколько новых версий.

...