Я тоже испытываю эту проблему с Glassfish v2 и Glassfish v3.
Могу ли я задать вам вопрос: Вы пытаетесь инициализировать любой объект персистентности при развертывании приложения (через сервлет, загруженный при запуске или прослушиватель контекста)?
Как и bguiz , я заметил, что эта проблема возникает только при повторном развертывании. Новое развертывание на только что перезапущенном сервере Glassfish никогда не вызывало этой проблемы.
Как упомянуто FelixM , я уверен, что это проблема загрузчика классов, однако я не верю, что это проблема с несколькими войнами (у меня только 1 развернут на моем сервере). В Glassfish 3 я вижу, что моя WAR использует 2 «движка» Glassfish. Один для Интернета (война) и один для JPA. Насколько я понимаю, это разные контейнеры, каждый со своим загрузчиком классов. Я предполагаю, что Glassfish v2 работает таким же образом.
Я использую Spring и (пере) инициализирую некоторые объекты персистентности при (пере) развертывании. Я думаю, что пока веб-движок переинициализирует войну, движок jpa все еще использует старые определения классов. Часто, если я повторяю повторное развертывание после этого первоначального сбоя, это может быть успешным (иногда это может потребовать более одной повторной попытки, но в конечном итоге я могу добиться успеха без перезапуска - имея больший успех с Glassfish v3, чем v2).
В данный момент я думаю, что либо эти два загрузчика классов не синхронизированы, либо существует какое-то состояние гонки при повторном развертывании, позволяющее иногда выполнять эту операцию успешно. Я пытался заставить загрузчик классов писать такой код
HashMap<Object, Object> properties = new HashMap<Object, Object>();
properties.put(PersistenceUnitProperties.CLASSLOADER, this.getClass().getClassLoader());
entityManagerFactory = Persistence.createEntityManagerFactory(jpaContext, properties);
но, похоже, это никак не отразилось.
Мне также интересно, может ли устранение инициализации при запуске решить проблему, давая серверу приложений время на повторную синхронизацию обоих механизмов перед использованием любых классов jpa (вот почему я задал свой вопрос для продолжения).