package net.lr.tasklist.persistence.impl;
import java.util.Collection;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaQuery;
import javax.transaction.Transactional;
import org.ops4j.pax.cdi.api.OsgiServiceProvider;
import org.ops4j.pax.cdi.api.Properties;
import org.ops4j.pax.cdi.api.Property;
import net.lr.tasklist.model.Task;
import net.lr.tasklist.model.TaskService;
@OsgiServiceProvider(classes = {TaskService.class})
// The properties below allow to transparently export the service as a web service using Distributed OSGi
@Properties({
@Property(name = "service.exported.interfaces", value = "*")
})
@Named
@Transactional
public class TaskServiceImpl implements TaskService {
@PersistenceContext(unitName="tasklist")
EntityManager em;
@Override
@Transactional(Transactional.TxType.SUPPORTS)
public Task getTask(Integer id) {
return em.find(Task.class, id);
}
@Override
public void addTask(Task task) {
em.persist(task);
em.flush();
}
@Transactional(Transactional.TxType.SUPPORTS)
public Collection<Task> getTasks() {
CriteriaQuery<Task> query = em.getCriteriaBuilder().createQuery(Task.class);
return em.createQuery(query.select(query.from(Task.class))).getResultList();
}
@Override
public void updateTask(Task task) {
em.merge(task);
}
@Override
public void deleteTask(Integer id) {
em.remove(getTask(id));
}
}