Вы используете функции Java EE в среде Java SE. Это не сработает.
Контейнер Java EE отвечает за внедрение зависимостей, поэтому PersisteneContext
и PersistenceUnit
имеют смысл только в среде контейнера Java EE (например, Glassfish или JBoss).
Если вы определите что-то вроде этого:
@PersistenceContext(unitName = "Fr14_07_Nezdolij_lab3PU")
private EntityManager em;
@PersistenceUnit(unitName="Fr14_07_Nezdolij_lab3PU")
private EntityManagerFactory emf;
public FirmEJB() {
emf = Persistence.createEntityManagerFactory("Fr14_07_Nezdolij_lab3PU");
em = emf.createEntityManager();
}
вы определяете внедрение зависимостей с помощью аннотаций и в то же время вы сами создаете экземпляры EMF и EM. Аннотации бессмысленны в вашем случае.
Более того:
- в
persistence.xml
вы определяете для использования тип транзакции RESOURCE_LOCAL
и в то же время вы определяете элемент <jta-data-source>
(что означает, что вы будете использовать транзакции JTA),
- Я предполагаю, что вы используете EclipseLink, поэтому
<exclude-unlisted-classes>false</exclude-unlisted-classes>
работает. Помните, что это не переносимое решение - чтобы быть уверенным, что в среде Java SE ваши сущности будут видны провайдеру JPA, вы должны определить их, используя элемент <class>
.
И, наконец, что не менее важно, если вы выполняете свой код в среде Java SE, как это, и не запускаете какой-либо контейнер Embedded EJB, тогда @Stateless
не требуется, потому что ваш класс не имеет никакого EJB природа . POJO, аннотированный как @Stateless
или @Stateful
, получает природу EJB, будучи выполненным в контейнере EJB. В этом случае он действует как обычный класс Java.
Остерегайтесь - даже если бы вы использовали контейнер Embedded EJB, код, который вы показали, будет , а не , для создания экземпляра EJB. Вы не можете использовать new FirmEJB()
с EJB. Контейнер должен отвечать за предоставление вам экземпляра EJB.
В этом весь смысл абстракции - вы зависите от абстракции, а не от творчества.
Вас может заинтересовать дальнейшее чтение, например OpenJPA JPA Concepts или Документация OpenEJB .