JPA Entity (в нескольких постоянных модулях) в среде OSGi (Spring DM) сбивает меня с толку - PullRequest
0 голосов
/ 02 ноября 2009

Я немного озадачен странным поведением связанных объектов моего JPA. У меня три комплекта:

Пакет пользователя содержит некоторые пользовательские объекты, но в основном это объект User.

Энергетический комплект содержит некоторые связанные с энергией объекты, в частности ConsumptionTerminal, который содержит Список пользователей.

Пакет Index содержит объект Index, который вообще не зависит.

Моя среда OSGi выглядит следующим образом:

  • Пакет DataSource, обеспечивающий 2 услуги : dataSource и jpaVendorAdapter.

  • Три связки. Они потребляют dataSource и jpaVendorAdapter.

    Их module-context.xml файл выглядит так:

    И все они имеют persistence.xml файл:

    • Пользователь

      <?xml version="1.0" encoding="UTF-8"?>
      <persistence>
          <persistence-unit name="securityPU" transaction-type="JTA">
              <jta-data-source>java:/securityDataSourceService</jta-data-source>
              <class>net.nextep.amundsen.security.domain.User</class>
              <!-- [...] -->
              <exclude-unlisted-classes>true</exclude-unlisted-classes>
              <properties>
                  <property name="eclipselink.logging.level" value="INFO" />
                  <property name="eclipselink.ddl-generation" value="create-tables" />
                  <property name="eclipselink.ddl-generation.output-mode" value="database" />
                  <property name="eclipselink.orm.throw.exceptions" value="true" />
              </properties>
          </persistence-unit>
      </persistence>
      
    • Energy

      <?xml version="1.0" encoding="UTF-8"?>
      <persistence>
          <persistence-unit name="energyPU" transaction-type="JTA">
              <jta-data-source>java:/securityDataSourceService</jta-data-source>
              <class>net.nextep.amundsen.security.domain.User</class>
              <class>net.nextep.amundsen.energy.domain.User</class>
              <!-- [...] -->
              <exclude-unlisted-classes>true</exclude-unlisted-classes>
              <properties>
                  <property name="eclipselink.logging.level" value="INFO" />
                  <property name="eclipselink.ddl-generation" value="create-tables" />
                  <property name="eclipselink.ddl-generation.output-mode" value="database" />
                  <property name="eclipselink.orm.throw.exceptions" value="true" />
              </properties>
          </persistence-unit>
      </persistence>
      
    • Индекс: этот файл имеет самый простой файл persistence.xml, содержащий только класс Index (без общего класса).

Я использую именованную аннотацию @PersistenceUnit, например @PersitenceUnit(name = 'securityPU') (для пользовательского пакета).

И, наконец, я использую EclipseLink в качестве провайдера Jpa и Spring DM (+ Spring DM Server в процессе разработки)

Проблема заключается в следующем:

  1. Когда пакет User развернут, я могу сохранить объекты User.
  2. Когда развернуты и пользовательский, и энергетический пакеты, я не могу сохранить объекты пользователя (ни объект энергии). Но у меня нет никаких исключений !
  3. С пакетом Index нет никаких проблем.

Ошибка не зависит от источника данных (до сих пор я пытался использовать PostgreSQL и MySQL).

Мой первый вывод состоял в том, что <class>net.nextep.amundsen.security.domain.User</class> в обоих единицах персистентности вызывало проблему. Я попытался без него (и скрыл зависимый от пользователя объект в комплекте энергии), но он тоже не удался.

Я немного озадачен этой ошибкой. Я также не совсем уверен в управлении транзакциями в этом контексте.

Я не был тем, кто спроектировал эту архитектуру (но я говорю моему стажеру ОК, не проверяя ее .. позор мне), но если бы я мог понять эту ошибку и, возможно, исправить ее без переписывания пакета (и прервать мою стажировку), я был бы признателен. Я делаю что-то неправильно ? (очевидно, но что ..) Я что-то упустил, читая документацию?

Кстати, я также ищу некоторые лучшие практики или советы, когда дело доходит до JPA, EclipseLink (или любого другого провайдера JPA) и Spring DM (и OSGi в целом). Я нашел интересные слайды от Майка Кейта на эту тему (просматривая Stackoverflow).

1 Ответ

0 голосов
/ 05 ноября 2009

Хорошо, кажется глупым отвечать на мой собственный вопрос (потому что на самом деле это не ответ, а шаг к пониманию ошибки). выделенный текст Это может быть связано с ткачеством во время загрузки. Я не совсем в порядке с этой концепцией, поэтому я собираюсь узнать об этом ..

...