2014-09-17 2 views
1

Я пытаюсь создать проект нескольких субмодулей в PlayFramework (play framework 2.2.1).имена пакетов (пространства имен) в классах подпроектов в платформе воспроизведения

Как я могу назвать пакет в подмодулях?

F.E. У меня есть структуру следующим образом:

  • приложение
  • конф
  • док
  • журналы
  • модули:
    • общая:
      • приложение:
        • контроллеры
        • модели
        • просмотров
      • конф:
        • common.routes
      • build.sbt
  • проект
  • общественного
  • целевой
  • тест

Как пакет (имен) я назвал в файле:

/modules/common/app/controllers/Aplication.java

Какой бы он ни был:

package controllers; 
package controllers.common; 
package common.app.controllers; 

на самом деле у меня так:

package controllers.common; 
public class Index extends Controller {} 

Та же проблема у меня с моей модели классов в подмодулей. F.e. в файле: /modules/common/app/models/User.java

Wich один он должен быть:

package models; 
package models.common; 
package common.app.models; 

на самом деле у меня есть так:

package models.common; 
public class User {} 

ошибка времени выполнения, что я get:

[IllegalArgumentException: Unknown entity: models.Cart] 
+0

Вы называете папку «Модули», но ее нужно обрабатывать как «Sub Projects»? В игре вы можете выбрать, какое именно имя пакета вы хотите. Насколько я знаю, никаких ограничений нет. В этом вопросе отсутствует сообщение об ошибке? Какую ошибку вы получаете при использовании пользовательского пространства имен? – adis

+0

Я получаю ошибку времени выполнения: [IllegalArgumentException: Неизвестный объект: models.Cart] Я не знаю, почему это происходит. Я думал, что это вызвано именем пакета. – masterdany88

+0

Очень неясный вопрос, вы опубликовали 3 соглашения об именах пакетов, но какой из них вы используете? Вы пробовали другой? Все ли они вызывают одно и то же сообщение об ошибке? Отправьте проект на github. – adis

ответ

1

Я нашел решение.

Не важно, как я назвал пакеты.Одно требование от рамки игры, чтобы начать имя пакета с:

  • контроллеров - в случае присвоения имен пакета контроллера (к: package controllers.common;)
  • модели - в случае обозначения модели пакета (Fe: package models.common;, или просто package models;)

ошибка выполнения:

[IllegalArgumentException: Unknown entity: models.Cart] 

обусловлена ​​конфигурацией JPA/Hibernate. Проблема в том, что Jpa/Hibernate видит мои сущности (отметка by annotation @Entity) во время компиляции, но во время выполнения dosn't. Чтобы исправить, что я вручную указать все свои модели класса (entitites) в persistance.xml файле следующим образом:

/conf/META-INF/persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0"> 

    <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <non-jta-data-source>DefaultDS</non-jta-data-source> 
      <class>models.AppMode</class> 
      <class>models.Customer</class> 
      <class>models.Complaint</class> 
     <properties> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> 
      <property name="hibernate.show_sql" value="true"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Смотрите подробнее здесь: How to persist models entity in playframework submodule using jpa/hibernate

+0

Хорошая работа! Но помните, что для Play не требуются имена пакетов. У меня есть рабочие примеры, где пакеты начинаются с 'nl.package'. Но я использовал Ebean вместо Hibernate. – adis

+0

У меня возникла другая проблема. Вы можете помочь? http://stackoverflow.com/questions/25912001/playframework-how-to-access-routes-in-view-from-other-submodule-view – masterdany88

Смежные вопросы