org.addsimplicity.anicetus.hibernate.HibernateTest.java Source code

Java tutorial

Introduction

Here is the source code for org.addsimplicity.anicetus.hibernate.HibernateTest.java

Source

/**
 * 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());

    }

}