/**
* Copyright 2011 Carsten Gräf
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package de.twenty11.skysail.server.ext.osgi.eventlogger.internal;
import java.util.HashMap;
import java.util.Properties;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.jpa.osgi.PersistenceProvider;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleEvent;
import org.osgi.framework.BundleListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.twenty11.skysail.server.eclipselink.service.definition.IEntityManagerProvider;
import de.twenty11.skysail.server.ext.osgi.eventlogger.EventLoggerBundleEvent;
import de.twenty11.skysail.server.servicedefinitions.ConfigService;
/**
* listener for bundle events.
*
* @author carsten
*
*/
public class EventLoggerBundleListener implements BundleListener {
/** slf4j based logger implementation. */
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public final void bundleChanged(final BundleEvent event) {
Bundle bundle = event.getBundle();
EventLoggerBundleEvent bundleEvent = new EventLoggerBundleEvent();
bundleEvent.setEventType(event.getType());
bundleEvent.setSymbolicName(bundle.getSymbolicName());
try {
ConfigService configService = ServiceProvider.getConfigService();
Properties properties = configService.getProperties("skysail.defaultDb.");
//HashMap<String, Object> properties = new HashMap<String, Object>();
properties.put(PersistenceUnitProperties.CLASSLOADER, this.getClass().getClassLoader());
// properties.put("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver");
// properties.put("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/skysail");
// properties.put("javax.persistence.jdbc.user", "root");
// properties.put("eclipselink.ddl-generation", "create-tables");
EntityManagerFactory emf = new PersistenceProvider().createEntityManagerFactory(
"skysail.server.ext.osgi.eventlogger",
properties);
EntityManager em = emf.createEntityManager();
if (em == null) {
logger.warn("EntityManager not available, could not persist bundleEvent '{}'", bundleEvent);
return;
}
em.getTransaction().begin();
em.persist(bundleEvent);
em.getTransaction().commit();
em.close();
} catch (Throwable t) {
logger.error("Persisting Entity threw error", t);
logger.warn("Could not persist bundleEvent '{}'", bundleEvent);
}
}
}