Package org.jboss.as.test.integration.ejb.timerservice.entity

Source Code of org.jboss.as.test.integration.ejb.timerservice.entity.SimpleBMPBean

/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt 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.as.test.integration.ejb.timerservice.entity;

import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;

import javax.ejb.EJBException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.NoSuchEJBException;
import javax.ejb.RemoveException;
import javax.ejb.TimedObject;
import javax.ejb.Timer;

import org.jboss.logging.Logger;

/**
* @author Stuart Douglas
*/
public class SimpleBMPBean implements EntityBean, TimedObject {
    private static final Logger log = Logger.getLogger(SimpleBMPBean.class);
    private static final long serialVersionUID = 1L;
    private static final AtomicInteger ID = new AtomicInteger();
    public static final int HOME_METHOD_RETURN = 100;
    private static final int TIMER_TIMEOUT_TIME_MS = 100;

    private String myField;
    private EntityContext entityContext;
    private boolean ejbPostCreateCalled;

    private static volatile CountDownLatch latch = new CountDownLatch(2);
    private static final Map<Integer, String> timerData = Collections.synchronizedMap(new HashMap<Integer, String>());

    public Integer ejbCreateEmpty() {
        int primaryKey = ID.incrementAndGet();
        DataStore.DATA.put(primaryKey, myField);
        return primaryKey;
    }

    public Integer ejbCreateWithValue(String value) {
        int primaryKey = ID.incrementAndGet();
        myField = value;
        DataStore.DATA.put(primaryKey, myField);
        return primaryKey;
    }

    public Integer ejbCreateWithValueAndPk(Integer pk, String value) {
        myField = value;
        DataStore.DATA.put(pk, myField);
        return pk;
    }

    public void ejbPostCreateEmpty() {
        ejbPostCreateCalled = true;
    }

    public void ejbPostCreateWithValue(String value) {
        ejbPostCreateCalled = true;
    }

    public void ejbPostCreateWithValueAndPk(Integer pk, String value) {
        ejbPostCreateCalled = true;
    }

    public int ejbHomeExampleHomeMethod() {
        return HOME_METHOD_RETURN;
    }

    public Integer ejbFindByValue(String value) {
        for(Map.Entry<Integer, String> entry : DataStore.DATA.entrySet()) {
            if(entry.getValue().equals(value)) {
                return entry.getKey();
            }
        }
        return null;
    }

    public Integer ejbFindByPrimaryKey(Integer primaryKey) {
        return DataStore.DATA.containsKey(primaryKey) ?  primaryKey : null;
    }

    public Collection<Integer> ejbFindCollection() {
        final HashSet<Integer> set = new HashSet<Integer>();
        set.add(1000);
        set.add(1001);
        return set;
    }


    @Override
    public void setEntityContext(final EntityContext ctx) throws EJBException, RemoteException {
        this.entityContext = ctx;
    }

    @Override
    public void unsetEntityContext() throws EJBException, RemoteException {
        this.entityContext = null;
    }

    @Override
    public void ejbRemove() throws RemoveException, EJBException, RemoteException {
        DataStore.DATA.remove(entityContext.getPrimaryKey());
    }

    @Override
    public void ejbActivate() throws EJBException, RemoteException {
        log.info("EJB " + ID + " activated [" + entityContext.getPrimaryKey() + "]");
    }

    @Override
    public void ejbPassivate() throws EJBException, RemoteException {
        myField = null;
    }

    @Override
    public void ejbLoad() throws EJBException, RemoteException {
        if(!DataStore.DATA.containsKey(entityContext.getPrimaryKey())) {
            throw new NoSuchEJBException("no EJB with id" + entityContext.getPrimaryKey());
        }
        this.myField = DataStore.DATA.get(entityContext.getPrimaryKey());
    }

    @Override
    public void ejbStore() throws EJBException, RemoteException {
        DataStore.DATA.put((Integer) entityContext.getPrimaryKey(), myField);
    }

    public void setupTimer() {
        entityContext.getTimerService().createTimer(TIMER_TIMEOUT_TIME_MS, null);
    }

    public void setupTimerDefined(int time) {
        entityContext.getTimerService().createTimer(time, null);
    }

    public String getMyField() {
        return myField;
    }

    public void setMyField(final String myField) {
        this.myField = myField;
    }

    public boolean isEjbPostCreateCalled() {
        return ejbPostCreateCalled;
    }

    @Override
    public synchronized void ejbTimeout(final Timer timer) {
        timerData.put((Integer) entityContext.getPrimaryKey(), getMyField());
        latch.countDown();
    }

    public static Map<Integer, String> getTimerData() {
        return timerData;
    }

    public static CountDownLatch getLatch() {
        return latch;
    }

    public static void redefineLatch(int countDownLatchNumber) {
        latch = new CountDownLatch(countDownLatchNumber);
    }

    public Collection<Timer> getTimers() {
        return entityContext.getTimerService().getTimers();
    }
}
TOP

Related Classes of org.jboss.as.test.integration.ejb.timerservice.entity.SimpleBMPBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.