package at.technikumwien.movies; import javax.annotation.Resource; import javax.annotation.security.RolesAllowed; import javax.ejb.*; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; import javax.persistence.PersistenceContext; import javax.security.enterprise.SecurityContext; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; @Stateless @TransactionManagement(value=TransactionManagementType.CONTAINER) public class StudiosService { private static final Logger LOGGER = Logger.getLogger(StudiosService.class.getName()); @Resource private SessionContext context; @PersistenceContext(unitName = "MoviesPU") private EntityManager em; @Inject private SecurityContext securityContext; public Studio findStudioById(long id) { LOGGER.info("findStudioById() >> id=" + id); Studio studio = em.find(Studio.class, id); if (studio == null) { throw new EntityNotFoundException("can't find studio with id=" + id); } return studio; } public List findAllStudios() { LOGGER.info("findAllStudios)"); return em.createNamedQuery("Studios.selectAllStudios", Studio.class) .getResultList(); } public void removeStudioById(long id) { LOGGER.info("removeStudioById() >> id=" + id); Studio studio = findStudioById(id); em.remove(studio); } // TODO maybe check if the studio already exists? @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public List saveStudio(List studios) { try { List addedStudios = new ArrayList<>(); LOGGER.info("save() >> studios" + studios); for (Studio studioToImport : studios) { addedStudios.add(em.merge(studioToImport)); } return addedStudios; } catch (Exception e) { LOGGER.info("Rollback when adding studio!"); context.setRollbackOnly(); e.printStackTrace(); } return null; } }