/*******************************************************************************
* Copyright (c) 2011, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* tware - initial
******************************************************************************/
package org.eclipse.persistence.jpa.rs.service;
import java.util.Collections;
import java.util.HashSet;
import java.util.ServiceLoader;
import java.util.Set;
import javax.annotation.PreDestroy;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jpa.rs.DataStorage;
import org.eclipse.persistence.jpa.rs.PersistenceContextFactory;
import org.eclipse.persistence.jpa.rs.PersistenceContextFactoryProvider;
import org.eclipse.persistence.jpa.rs.exceptions.JPARSExceptionMapper;
/**
* Config class for JPA-RS REST service. This class should remain dependent only on classes from
* the specification since it is designed to work with both Jersey 1.x and Jersey 2.x.
*
* @author tware
*
*/
@ApplicationPath("/persistence/")
public class JPARSApplication extends Application {
private final Set<Class<?>> classes;
/**
* Instantiates a new jPARS application.
*/
public JPARSApplication() {
HashSet<Class<?>> c = new HashSet<Class<?>>();
// Unversioned Resources (resources that do not have version in the url)
c.add(org.eclipse.persistence.jpa.rs.resources.unversioned.PersistenceResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.unversioned.PersistenceUnitResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.unversioned.EntityResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.unversioned.SingleResultQueryResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.unversioned.QueryResource.class);
// Versioned Resources (resources that do have version in the url)
c.add(org.eclipse.persistence.jpa.rs.resources.PersistenceResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.PersistenceUnitResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.EntityResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.SingleResultQueryResource.class);
c.add(org.eclipse.persistence.jpa.rs.resources.QueryResource.class);
// JPARS 2.0
c.add(org.eclipse.persistence.jpa.rs.resources.MetadataResource.class);
// Exception Mapping
c.add(JPARSExceptionMapper.class);
//
classes = Collections.unmodifiableSet(c);
}
/* (non-Javadoc)
* @see javax.ws.rs.core.Application#getClasses()
*/
@Override
public Set<Class<?>> getClasses() {
return classes;
}
/**
* Clean up.
*/
@PreDestroy
public void preDestroy() {
DataStorage.destroy();
ServiceLoader<PersistenceContextFactoryProvider> persistenceContextFactoryProviderLoader =
ServiceLoader.load(PersistenceContextFactoryProvider.class, Thread.currentThread().getContextClassLoader());
for (PersistenceContextFactoryProvider persistenceContextFactoryProvider : persistenceContextFactoryProviderLoader) {
PersistenceContextFactory persistenceContextFactory = persistenceContextFactoryProvider.getPersistenceContextFactory(null);
if (persistenceContextFactory != null) {
persistenceContextFactory.close();
}
}
}
}