Korzystam z serwera WildFly i mam problem ponieważ nie chcę ręcznie zarządzać transakcjami i chce używać @PersiatnceContext ale nie wiem jak sobie to ustawić?
W przyszłości chce korzystać z Springa czy w nim można korzystać z JTA?
Korzystam z serwera WildFly i mam problem ponieważ nie chcę ręcznie zarządzać transakcjami i chce używać @PersiatnceContext ale nie wiem jak sobie to ustawić?
W przyszłości chce korzystać z Springa czy w nim można korzystać z JTA?
Potrzebujesz klasy w tym stylu?
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
/**
* Created by kgoralski on 20/07/16.
*/
@ApplicationScoped
public class EntityManagerProducer {
@PersistenceUnit
private EntityManagerFactory emf;
@Produces
@Default
@RequestScoped
public EntityManager create() {
return emf.createEntityManager();
}
public void close(@Disposes EntityManager em) {
if (em.isOpen()) {
em.close();
}
}
}
no i persistance.xml w resources.
<?xml version="1.0" encoding="UTF-8"?>
<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="PersistenceUnit">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
Jeżeli używasz serwera Wildfly to rozumiem że jest to Java EE, jeśli tak to aby skorzystać z automatycznych transakcji na metodach użyj adnotacji @Stateless
na klasie. Przykład:
@Stateless
public class UserService {
@PersistenceContext
private EntityManager entityManager;
public void addUser(User user) {
entityManager.save(user);
}
}
Jeżeli używasz Springa to do transakcji służy adnotacja @Transactional
.
w Java EE też jest:
javax.transaction.Transactional;
Dziękuje za odpowiedzi. Możecie mi powiedzieć co to jest <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> i jak to się ustawia?
Znacznik <jta-data-source> definiuje źródło bazy danych, które jest skonfigurowane w serwerze aplikacyjnym (w Twoim przypadku na serwerze Wildfly). String "java:jboss/datasources/ExampleDS" to ścieżka JNDI do tej konfiguracji bazy danych.