| /******************************************************************************* |
| * Copyright (c) 2010-2014 SAP AG and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * SAP AG - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.skalli.core.feed.jpa; |
| |
| import java.io.IOException; |
| import java.text.MessageFormat; |
| import java.util.Collection; |
| |
| import javax.persistence.EntityManager; |
| import javax.persistence.EntityTransaction; |
| |
| import org.eclipse.skalli.services.feed.FeedEntry; |
| import org.eclipse.skalli.services.feed.FeedPersistenceService; |
| import org.eclipse.skalli.services.persistence.EntityManagerServiceBase; |
| import org.osgi.service.component.ComponentConstants; |
| import org.osgi.service.component.ComponentContext; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| public class JPAFeedPersistenceComponent extends EntityManagerServiceBase implements FeedPersistenceService { |
| |
| private static final Logger LOG = LoggerFactory.getLogger(JPAFeedPersistenceComponent.class); |
| |
| @Override |
| protected void activate(ComponentContext context) { |
| super.activate(context); |
| LOG.info(MessageFormat.format("[FeedPersistenceService][jpa] {0} : activated", |
| (String) context.getProperties().get(ComponentConstants.COMPONENT_NAME))); |
| } |
| |
| @Override |
| protected void deactivate(ComponentContext context) { |
| LOG.info(MessageFormat.format("[FeedPersistenceService][jpa] {0} : deactivated", |
| (String) context.getProperties().get(ComponentConstants.COMPONENT_NAME))); |
| super.deactivate(context); |
| } |
| |
| @Override |
| public void merge(Collection<FeedEntry> entries) throws IOException { |
| for (FeedEntry entry : entries) { |
| EntityManager em = getEntityManager(); |
| EntityTransaction tx = null; |
| try { |
| tx = em.getTransaction(); |
| tx.begin(); |
| em.merge(entry); |
| tx.commit(); |
| } catch (Exception e) { |
| if (tx != null && tx.isActive()) { |
| tx.rollback(); |
| } |
| throw new IOException(MessageFormat.format("Failed to persist {0} ({1})", |
| EntryJPA.class.getSimpleName(), entry.getProjectId().toString()), e); |
| } finally { |
| em.close(); |
| } |
| } |
| } |
| |
| |
| |
| @Override |
| public EntryJPA createEntry() { |
| return new EntryJPA(); |
| } |
| |
| } |