Проблема улучшения OpenJPA 2.1.1 на Glassfish 3.1.1 - PullRequest
3 голосов
/ 03 сентября 2011

Моя проблема в этом исключении:

Caused by: <openjpa-2.1.1-r422266:1148538 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "

Я пытаюсь получить очень простое Java-приложение с запущенными jsf и jpa, но, похоже, проблема в улучшении моих сущностей.Насколько я знаю, пытается OpenJPA улучшить мои сущности во время выполнения, которые перечислены в persistence.xml, однако нет агента, чтобы сделать это.Ключевое слово для этого: Enhancing at Runtime, верно?

Я думал, что расширение будет автоматически выполнено сервером приложений при развертывании?Как я могу настроить это?

Моя среда:

  • Glassfish 3.1.1
  • Derby, который интегрирован в Glassfish
  • OpenJPA 2.1.1
  • Mojarra JSF 2.1.3

Обновление № 1:

После некоторых комментариев я добавил следующие строки в свойpersistence.xml:

<property name="openjpa.DynamicEnhancementAgent" value="false"/>
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />

Это работает сейчас, но OpenJPA выдает это предупреждение:

SEVERE: 52  myApp  WARN   [http-thread-pool-8080(5)] openjpa.Enhance - Creating subclass for "[class myApp.model.entities.AbstractEntity, class myApp.model.entities.Post]". 
This means that your application will be less efficient and will consume more memory than it would if you ran the OpenJPA enhancer. Additionally, lazy loading will not be available for one-to-one and many-to-one persistent attributes in types using field access; they will be loaded eagerly instead.

Я думаю, что это не может быть решением.

Обновление № 2:

Обратитесь к ответу fvu, я попытался определить параметр -javaagent jvm в domain.xml и через консоль веб-администратора.После перезапуска снова появилась проблема.

Обновление № 3:

См. Обновление № 2, я немного поиграл.Должно быть выдано сообщение об ошибке, когда используется параметр -javaagent, но файл отсутствует, верно?Да, вот оно:

Waiting for domain1 to start .Command start-domain failed.
Error starting domain domain1.
The server exited prematurely with exit code 1.
Before it died, it produced the following output:

Error occurred during initialization of VM
agent library failed to init: instrument
Error opening zip file or JAR manifest missing : /tmp/openjpa.jar

Если я копирую агента в это местоположение, эта ошибка не появляется, но openjpa все еще не может улучшить мои сущности!

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

Если у вас все еще есть проблемы ... Я настоятельно рекомендую прикусить пулю и настроить время сборки улучшение. В конечном итоге вы будете намного счастливее, если начнете это делать.

1 голос
/ 04 сентября 2011

Пара идей:

  • добавьте Java-агент для улучшения опции JVM в GF, см. эту ссылку для примера того, как установить javaagent и документ OpenJPA 5.2.3, улучшающий во время выполнения. Это эмулирует активацию энхансера в настольных приложениях как можно ближе к IMO.

Однако, когда я читаю главу 5.2.4 документации OpenJPA, она может автоматически подобрать правильный энхансер. Попробуйте скопировать openjpa.jar в каталог библиотеки домена и проверьте, что происходит после перезапуска сервера.

...