org.jboss.test.jpa.entity.EntityTestBean.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.test.jpa.entity.EntityTestBean.java

Source

/*
 * JBoss, Home of Professional Open Source.
 * Copyright 2006, Red Hat Middleware LLC, and individual contributors
 * as indicated by the @author tags. See the copyright.txt file in the
 * distribution for a full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package org.jboss.test.jpa.entity;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.transaction.SystemException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Session;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.event.EventSource;
import org.hibernate.jdbc.JDBCContext;
import org.jboss.ejb3.annotation.JndiInject;

/**
 * Comment
 *
 * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
 * @version $Revision: 113097 $
 */
@Stateless
@Remote(EntityTest.class)
public class EntityTestBean implements EntityTest {
    private @PersistenceContext EntityManager manager;
    private @PersistenceContext Session session;
    private @JndiInject(jndiName = "java:/TransactionManager") TransactionManager tm;
    private static Log log = LogFactory.getLog("org.hibernate.ejb");

    public FieldFlight createFieldFlight(final long id, final String name, final String companyName) {
        final FieldFlight fieldFlight = new FieldFlight();
        fieldFlight.setId(id);
        fieldFlight.setName(name);
        final FieldCompany company = new FieldCompany();
        company.setName(companyName);
        fieldFlight.setCompany(company);
        manager.persist(fieldFlight);
        return fieldFlight;
    }

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public void testOutsideTransaction() {
        Transaction tx = null;
        try {
            tx = tm.getTransaction();
        } catch (SystemException e) {
            throw new RuntimeException(e);
        }
        if (tx != null)
            throw new RuntimeException("THERE IS A TRANSACTION!!!");
        Query q = manager.createQuery("SELECT c FROM Customer c");
        List l = q.getResultList();
        if (l.size() == 0)
            throw new RuntimeException("failed");
        org.hibernate.Query q2 = session.createQuery("FROM Customer c");
        l = q2.list();
        if (l.size() == 0)
            throw new RuntimeException("failed");

    }

    public Customer oneToManyCreate() throws Exception {
        Ticket t = new Ticket();
        //t.setId( new Long(1) );
        t.setNumber("33A");
        Customer c = new Customer();
        //c.setId( new Long(1) );
        Set<Ticket> tickets = new HashSet<Ticket>();
        tickets.add(t);
        t.setCustomer(c);
        c.setTickets(tickets);
        Address address = new Address();
        address.setStreet("Clarendon Street");
        address.setCity("Boston");
        address.setState("MA");
        address.setZip("02116");
        c.setAddress(address);
        manager.persist(c);
        return c;
    }

    public Customer findCustomerById(Long id) throws Exception {
        return manager.find(Customer.class, id);
    }

    public Flight manyToOneCreate() throws Exception {
        Flight firstOne = new Flight();
        firstOne.setId(new Long(1));
        firstOne.setName("AF0101");
        Company frenchOne = new Company();
        frenchOne.setName("Air France");
        firstOne.setCompany(frenchOne);
        manager.persist(firstOne);
        return firstOne;
    }

    public void manyToManyCreate() throws Exception {

        Flight firstOne = findFlightById(new Long(1));
        Flight second = new Flight();
        second.setId(new Long(2));
        second.setName("US1");
        Company us = new Company();
        us.setName("USAir");
        second.setCompany(us);

        Set<Customer> customers1 = new HashSet<Customer>();
        Set<Customer> customers2 = new HashSet<Customer>();

        Customer bill = new Customer();
        bill.setName("Bill");
        customers1.add(bill);

        Customer monica = new Customer();
        monica.setName("Monica");
        customers1.add(monica);

        Customer molly = new Customer();
        molly.setName("Molly");
        customers2.add(molly);

        firstOne.setCustomers(customers1);
        second.setCustomers(customers2);

        manager.persist(second);
    }

    public Flight findFlightById(Long id) throws Exception {
        return manager.find(Flight.class, id);
    }

    public Company findCompanyById(Integer id) throws Exception {
        return manager.find(Company.class, id);
    }

    public FieldCustomer fieldOneToManyCreate() throws Exception {
        FieldTicket t = new FieldTicket();
        //t.setId( new Long(1) );
        t.setNumber("33A");
        FieldCustomer c = new FieldCustomer();
        //c.setId( new Long(1) );
        Set<FieldTicket> tickets = new HashSet<FieldTicket>();
        tickets.add(t);
        t.setCustomer(c);
        c.setTickets(tickets);
        FieldAddress address = new FieldAddress();
        address.setStreet("Clarendon Street");
        address.setCity("Boston");
        address.setState("MA");
        address.setZip("02116");
        c.setAddress(address);
        manager.persist(c);
        return c;
    }

    public FieldCustomer fieldFindCustomerById(Long id) throws Exception {
        return manager.find(FieldCustomer.class, id);
    }

    public FieldFlight fieldManyToOneCreate() throws Exception {
        FieldFlight firstOne = new FieldFlight();
        firstOne.setId(new Long(1));
        firstOne.setName("AF0101");
        FieldCompany frenchOne = new FieldCompany();
        frenchOne.setName("Air France");
        firstOne.setCompany(frenchOne);
        manager.persist(firstOne);
        return firstOne;
    }

    public void fieldManyToManyCreate() throws Exception {
        // flight #1 is created in and used another test
        FieldFlight firstOne = fieldFindFlightById(new Long(3));
        if (firstOne == null)
            throw new IllegalStateException("Flight #3 could not be found");
        FieldFlight second = new FieldFlight();
        second.setId(new Long(2));
        second.setName("US1");
        FieldCompany us = new FieldCompany();
        us.setName("USAir");
        second.setCompany(us);

        Set<FieldCustomer> customers1 = new HashSet<FieldCustomer>();
        Set<FieldCustomer> customers2 = new HashSet<FieldCustomer>();

        FieldCustomer bill = new FieldCustomer();
        bill.setName("Bill");
        customers1.add(bill);

        FieldCustomer monica = new FieldCustomer();
        monica.setName("Monica");
        customers1.add(monica);

        FieldCustomer molly = new FieldCustomer();
        molly.setName("Molly");
        customers2.add(molly);

        firstOne.setCustomers(customers1);
        second.setCustomers(customers2);

        manager.persist(second);
    }

    public FieldFlight fieldFindFlightById(Long id) throws Exception {
        return manager.find(FieldFlight.class, id);
    }

    public FieldCompany fieldFindCompanyById(Integer id) throws Exception {
        return manager.find(FieldCompany.class, id);
    }

    public void testNamedQueries() throws Exception {
        System.out.println("testNamedQueries()");
        ArrayList ids = new ArrayList();
        Airport ap1 = new Airport("OSL", "Oslo");
        manager.persist(ap1);

        Airport ap2 = new Airport("LHR", "London");
        manager.persist(ap2);

        Airport ap3 = new Airport("LAX", "Los Angeles");
        manager.persist(ap3);

        List list = manager.createNamedQuery("allAirports").getResultList();
        if (list.size() != 3)
            throw new RuntimeException("Wrong number returned for allAirports query " + list.size());

        Airport ap = (Airport) manager.createNamedQuery("airportById").setParameter("id", ap2.getId())
                .getSingleResult();
        if (ap == null)
            throw new RuntimeException("No object returned by airportById query");

        FieldAirport fap1 = new FieldAirport("LGW", "London");
        manager.persist(fap1);

        FieldAirport fap2 = new FieldAirport("ORL", "Paris");
        manager.persist(fap2);

        FieldAirport fap = (FieldAirport) manager.createNamedQuery("airportByCode").setParameter("code", "LGW")
                .getSingleResult();
        if (fap == null)
            throw new RuntimeException("No object returned by airportById query");
    }

    public Customer createCustomer(String name) {
        Customer c = new Customer();
        c.setName(name);
        manager.persist(c);
        return c;
    }

    public void changeCustomer(Long id, String name) {
        Customer c = manager.find(Customer.class, id);
        c.setName(name);
    }

    public Customer loadCustomer(Long id) {
        Customer c = manager.find(Customer.class, id);
        return c;
    }

    public boolean isDelegateASession() {
        //has to delegate to the underlying entitymanager
        return (manager.getDelegate() != null) && (manager.getDelegate() instanceof Session);
    }

    public boolean isTrueHibernateSession() {
        //has to implement the private Session interfaces
        return (session instanceof Session) && (session instanceof SessionImplementor)
                && (session instanceof EventSource) && (session instanceof JDBCContext.Context);
    }

    @PostConstruct
    public void construct() {
        manager.find(Customer.class, 1L);
    }
}