/**
* Copyright (C) 2010 Talend Inc. - www.talend.com
*/
package server;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import org.apache.cxf.jaxrs.ext.search.SearchContextProvider;
import org.apache.cxf.jaxrs.provider.json.JSONProvider;
import service.advanced.PersonExceptionMapper;
import service.advanced.PersonInfoStorage;
import service.advanced.PersonServiceImpl;
import service.advanced.SearchService;
/*
* Class that can be used (instead of XML-based configuration) to inform the JAX-RS
* runtime about the resources and providers it is supposed to deploy. See the
* ApplicationServer class for more information.
*/
@ApplicationPath("/personservice")
public class PersonApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>();
}
@Override
public Set<Object> getSingletons() {
Set<Object> classes = new HashSet<Object>();
PersonInfoStorage storage = new PersonInfoStorage();
try {
Class.forName("org.hsqldb.jdbcDriver");
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("persistenceUnitOpenJPA");
storage.setEntityManager(emFactory.createEntityManager());
Map<String, String> beanPropertiesMap = new HashMap<String, String>();
beanPropertiesMap.put("fatherName", "father.name");
beanPropertiesMap.put("father", "father.name");
beanPropertiesMap.put("childName", "children.name");
storage.setBeanProperties(beanPropertiesMap);
storage.init();
} catch (Throwable ex) {
throw new RuntimeException(ex);
}
PersonServiceImpl personService = new PersonServiceImpl();
personService.setStorage(storage);
classes.add(personService);
SearchService searchService = new SearchService();
searchService.setStorage(storage);
classes.add(searchService);
// custom providers
classes.add(new PersonExceptionMapper());
JSONProvider<?> provider = new JSONProvider<Object>();
provider.setIgnoreNamespaces(true);
classes.add(provider);
classes.add(new SearchContextProvider());
return classes;
}
}