/** * Copyright 2008-2009 Dan Pritchett * * 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.addsimplicity.anicetus.hibernate; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.sql.Date; import java.util.Collection; import java.util.Iterator; import org.addsimplicity.anicetus.TelemetryContext; import org.addsimplicity.anicetus.entity.ExecInfo; import org.addsimplicity.anicetus.entity.GlobalInfo; import org.addsimplicity.anicetus.entity.TelemetrySession; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; /** * @author Dan Pritchett * */ public class HibernateTest { private static ApplicationContext m_context; /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { m_context = new ClassPathXmlApplicationContext( new String[] { "org/addsimplicity/anicetus/hibernate/HibernateTestBinding.xml" }); } private Session m_sess; @Test public void testEventCycles() throws Exception { TelemetryContext ctx = (TelemetryContext) m_context.getBean("telemetryContext"); TelemetrySession tsess = ctx.getSession(); tsess.setOperationName("testSimpleTransaction"); SessionFactory fact = (SessionFactory) m_context.getBean("sessionFactory"); m_sess = fact.openSession(); SimpleBean b = new SimpleBean(); b.setText("xyzzy"); Transaction t = m_sess.beginTransaction(); m_sess.save(b); t.commit(); ctx.endSession(); JmsTemplate tmpl = (JmsTemplate) m_context.getBean("consumeTempl"); Object obj = tmpl.receiveAndConvert(); assertNotNull("Object received", obj); assertTrue("Type", obj instanceof TelemetrySession); TelemetrySession rsess = (TelemetrySession) obj; Collection<GlobalInfo> childs = rsess.getChildren(); assertEquals("Child count", 1, childs.size()); GlobalInfo c1 = childs.iterator().next(); assertTrue("Child Type", c1 instanceof HibernateTelemetry); HibernateTelemetry telem = (HibernateTelemetry) c1; Collection<String> sqls = telem.getSQLStatements(); assertEquals("SQL Statements", 2, sqls.size()); for (String sql : sqls) { System.out.println(sql); } Collection<HibernateEntity> ents = telem.getHibernateEntities(); assertEquals("Entities", 1, ents.size()); HibernateEntity e = ents.iterator().next(); assertEquals("Operation", HibernateOperation.Create, e.getOperation()); System.out.println("Exec ms " + rsess.getDuration()); } @Test public void testOtherOps() throws Exception { TelemetryContext ctx = (TelemetryContext) m_context.getBean("telemetryContext"); TelemetrySession tsess = ctx.getSession(); tsess.setOperationName("testSimpleTransaction"); SessionFactory fact = (SessionFactory) m_context.getBean("sessionFactory"); m_sess = fact.openSession(); SimpleBean b = new SimpleBean(); b.setText("xyzzy"); Transaction t = m_sess.beginTransaction(); m_sess.save(b); t.commit(); t = m_sess.beginTransaction(); b = (SimpleBean) m_sess.load(SimpleBean.class, Long.valueOf(b.getId())); assertNotNull("Bean found", b); b.setText("abbc"); b.setDate(new Date(System.currentTimeMillis())); m_sess.save(b); t.commit(); t = m_sess.beginTransaction(); m_sess.delete(b); t.commit(); ctx.endSession(); JmsTemplate tmpl = (JmsTemplate) m_context.getBean("consumeTempl"); Object obj = tmpl.receiveAndConvert(); assertNotNull("Object received", obj); assertTrue("Type", obj instanceof TelemetrySession); ExecInfo rsess = (ExecInfo) obj; Collection<GlobalInfo> childs = rsess.getChildren(); assertEquals("Child count", 3, childs.size()); Iterator<GlobalInfo> iter = childs.iterator(); GlobalInfo gi = iter.next(); assertTrue("Type", gi instanceof HibernateTelemetry); HibernateTelemetry ht = (HibernateTelemetry) gi; Collection<HibernateEntity> ents = ht.getHibernateEntities(); assertEquals("Save 1 ents", 1, ents.size()); assertEquals("Save 1 op", HibernateOperation.Create, ents.iterator().next().getOperation()); for (String sql : ht.getSQLStatements()) { System.out.println(sql); } gi = iter.next(); assertTrue("Type", gi instanceof HibernateTelemetry); ht = (HibernateTelemetry) gi; for (String sql : ht.getSQLStatements()) { System.out.println(sql); } ents = ht.getHibernateEntities(); assertEquals("Save 2 ents", 1, ents.size()); assertEquals("Save 2 op", HibernateOperation.Update, ents.iterator().next().getOperation()); gi = iter.next(); assertTrue("Type", gi instanceof HibernateTelemetry); ht = (HibernateTelemetry) gi; for (String sql : ht.getSQLStatements()) { System.out.println(sql); } ents = ht.getHibernateEntities(); assertEquals("Delete ents", 1, ents.size()); assertEquals("Delete op", HibernateOperation.Delete, ents.iterator().next().getOperation()); Collection<String> tabs = ht.getTables(); assertEquals("Tables", 1, tabs.size()); assertEquals("Table Name", "BEANS", tabs.iterator().next()); } }