/*
* Copyright 2011 Atteo.
*
* 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.atteo.moonshine.hibernate;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.atteo.moonshine.jta.Transaction;
import org.atteo.moonshine.tests.MoonshineConfiguration;
import org.atteo.moonshine.tests.MoonshineTest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
@MoonshineConfiguration(autoConfiguration = true, fromString = ""
+ "<config>"
+ " <hibernate>"
+ " <initSchema>create</initSchema>"
+ " </hibernate>"
+ "</config>")
public class HibernateTest extends MoonshineTest {
@Inject
private UserTransaction transaction;
@Inject
private EntityManagerFactory factory;
@Test
public void shouldSaveUser() {
final User u = new User();
Transaction.require((Transaction.Runnable) () -> {
EntityManager manager = factory.createEntityManager();
u.setId(7);
u.setName("frank");
manager.persist(u);
manager.flush();
manager.close();
});
final int id = u.getId();
Transaction.require((Transaction.Runnable) () -> {
EntityManager manager = factory.createEntityManager();
User loaded = manager.find(User.class, id);
assertNotNull(loaded);
assertEquals(u.getName(), loaded.getName());
manager.close();
});
}
// Based on http://en.wikibooks.org/wiki/Java_Persistence/Transactions
@Test
public void shouldJoinTransaction() throws NotSupportedException, SystemException, RollbackException,
HeuristicMixedException, HeuristicRollbackException {
EntityManager manager = factory.createEntityManager();
User u = new User();
u.setId(8);
u.setName("frank");
manager.persist(u);
int id = u.getId();
transaction.begin();
manager.joinTransaction();
manager.close();
transaction.commit();
transaction.begin();
manager = factory.createEntityManager();
User loaded = manager.find(User.class, id);
assertNotNull(loaded);
assertEquals(u.getName(), loaded.getName());
manager.close();
transaction.rollback();
}
}