/*
* Copyright (C) 2015 Red Hat, Inc. and/or its affiliates.
*
* 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 org.jboss.errai.bus.server;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.jboss.errai.bus.client.tests.support.HibernateObject;
import org.jboss.errai.bus.client.tests.support.HibernateRpc;
import org.jboss.errai.bus.client.tests.support.OtherHibernateObject;
import org.jboss.errai.bus.server.annotations.Service;
@Service
public class HibernateRpcImpl implements HibernateRpc {
private static EntityManagerFactory emf = createEntityManagerFactory();
private static EntityManagerFactory createEntityManagerFactory() {
Map<String, String> properties = new HashMap<String, String>();
properties.put("hibernate.connection.driver_class", "org.h2.Driver");
properties.put("hibernate.connection.url", "jdbc:h2:mem:temporary");
properties.put("hibernate.connection.username", "sa");
properties.put("hibernate.connection.password", "");
properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
properties.put("hibernate.hbm2ddl.auto", "update");
properties.put("javax.persistence.validation.mode", "none");
return Persistence.createEntityManagerFactory("HibernateRpcTest", properties);
}
@Override
public HibernateObject getHibernateObject(Integer id) {
EntityManager em = emf.createEntityManager();
try {
HibernateObject o = em.find(HibernateObject.class, id);
o.getOther();
return o;
}
finally {
em.close();
}
}
@Override
public void addHibernateObject(HibernateObject entity) {
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
}
finally {
em.close();
}
}
@Override
public OtherHibernateObject getOther(Integer idOfParent) {
/*
* It is intentional that this entity manager is not closed in this method.
* Since the object we are retrieving is actually a hibernate proxy, the
* entity manager must remain open until the object is marshaled.
*/
EntityManager em = emf.createEntityManager();
OtherHibernateObject other = em.find(HibernateObject.class, idOfParent).getOther();
return other;
}
}