/* * JBoss, Home of Professional Open Source. * Copyright 2008, 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.cmp2.optimisticlock.ejb; import org.jboss.test.cmp2.optimisticlock.interfaces.CmpEntityLocal; import org.jboss.test.cmp2.optimisticlock.interfaces.CmpEntityLocalHome; import org.jboss.test.cmp2.optimisticlock.interfaces.FacadeHome; import org.jboss.logging.Logger; import javax.ejb.SessionBean; import javax.ejb.CreateException; import javax.ejb.SessionContext; import javax.ejb.FinderException; import javax.naming.NamingException; import javax.naming.InitialContext; /** * @ejb.bean * name="Facade" * type="Stateless" * jndi-name="FacadeBean" * view-type="remote" * * @author <a href="mailto:aloubyansky@hotmail.com">Alex Loubyansky</a> */ public class FacadeBean implements SessionBean { // Attributes -------------------------------------------- static Logger log = Logger.getLogger(FacadeBean.class); private FacadeHome myHome; // Business methods -------------------------------------- /** * @ejb.interface-method */ public void createCmpEntity(String jndiName, Integer id, String stringGroup1, Integer integerGroup1, Double doubleGroup1, String stringGroup2, Integer integerGroup2, Double doubleGroup2) throws Exception { if(log.isDebugEnabled()) { log.debug("createCmpEntity> jndiName=" + jndiName + ", id=" + id + ", stringGroup1=" + stringGroup1 + ", integerGroup1=" + integerGroup1 + ", doubleGroup1=" + doubleGroup1 + ", stringGroup2=" + stringGroup2 + ", integerGroup2=" + integerGroup2 + ", doubleGroup2=" + doubleGroup2); } CmpEntityLocalHome entityHome = getCmpEntityHome(jndiName); entityHome.create(id, stringGroup1, integerGroup1, doubleGroup1, stringGroup2, integerGroup2, doubleGroup2); } /** * @ejb.interface-method */ public void safeRemove(String jndiName, Integer id) throws Exception { log.debug("safeRemove> jndiName=" + jndiName + ", id=" + id); try { CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.remove(); } catch(FinderException e){} } /** * @ejb.interface-method */ public void testNullLockedFields(String jndiName, Integer id) throws Exception { log.debug("testNullLockedFields> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setDoubleGroup1(new Double(11.11)); entity.setDoubleGroup2(new Double(22.22)); entity.setIntegerGroup1(new Integer(11)); entity.setIntegerGroup2(new Integer(22)); entity.setStringGroup1("str1 modified in testNullLockedFields"); entity.setStringGroup2("str2 modified in testNullLockedFields"); log.debug("testNullLockedFields> done"); } /** * @ejb.interface-method */ public void testKeygenStrategyPass(String jndiName, Integer id) throws Exception { log.debug("testKeygenStrategyPass> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testKeygenStrategyPass"); entity.getDoubleGroup1(); log.debug("testKeygenStrategyPass> done"); } /** * @ejb.interface-method */ public void testKeygenStrategyFail(String jndiName, Integer id) throws Exception { log.debug("testKeygenStrategyFail> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testKeygenStrategyFail"); entity.getDoubleGroup1(); myHome.create().modifyGroup1InRequiresNew(jndiName, id); log.debug("testKeygenStrategyFail> done"); } /** * @ejb.interface-method */ public void testTimestampStrategyPass(String jndiName, Integer id) throws Exception { log.debug("testTimestampStrategyPass> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testTimestampStrategyPass"); entity.getDoubleGroup1(); log.debug("testTimestampStrategyPass> done"); } /** * @ejb.interface-method */ public void testTimestampStrategyFail(String jndiName, Integer id) throws Exception { log.debug("testTimestampStrategyFail> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testTimestampStrategyFail"); entity.getDoubleGroup1(); myHome.create().modifyGroup1InRequiresNew(jndiName, id); log.debug("testTimestampStrategyFail> done"); } /** * @ejb.interface-method */ public void testVersionStrategyPass(String jndiName, Integer id) throws Exception { log.debug("testVersionStrategyPass> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testVersionStrategyPass"); entity.getDoubleGroup1(); log.debug("testVersionStrategyPass> done"); } /** * @ejb.interface-method */ public void testVersionStrategyFail(String jndiName, Integer id) throws Exception { log.debug("testVersionStrategyFail> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testVersionStrategyFail"); entity.getDoubleGroup1(); myHome.create().modifyGroup1InRequiresNew(jndiName, id); log.debug("testVersionStrategyFail> done"); } /** * @ejb.interface-method */ public void testGroupStrategyPass(String jndiName, Integer id) throws Exception { log.debug("testGroupStrategyPass> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testGroupStrategyPass"); entity.getDoubleGroup1(); myHome.create().modifyGroup1InRequiresNew(jndiName, id); log.debug("testGroupStrategyPass> done"); } /** * @ejb.interface-method */ public void testGroupStrategyFail(String jndiName, Integer id) throws Exception { log.debug("testGroupStrategyFail> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup2("modified in testGroupStrategyPass"); entity.getDoubleGroup1(); myHome.create().modifyGroup2InRequiresNew(jndiName, id); log.debug("testGroupStrategyFail> done"); } /** * @ejb.interface-method */ public void testReadStrategyPass(String jndiName, Integer id) throws Exception { log.debug("testReadStrategyPass> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.getStringGroup1(); entity.getDoubleGroup1(); myHome.create().modifyGroup2InRequiresNew(jndiName, id); log.debug("testReadStrategyPass> done"); } /** * @ejb.interface-method */ public void testReadStrategyFail(String jndiName, Integer id) throws Exception { log.debug("testReadStrategyFail> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.getStringGroup2(); entity.getDoubleGroup1(); myHome.create().modifyGroup2InRequiresNew(jndiName, id); log.debug("testReadStrategyFail> done"); } /** * @ejb.interface-method */ public void testModifiedStrategyPass(String jndiName, Integer id) throws Exception { log.debug("testModifiedStrategyPass> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(111)); entity.setStringGroup1("modified in testModifiedStrategyPass"); entity.setDoubleGroup1(new Double(111.111)); myHome.create().modifyGroup2InRequiresNew(jndiName, id); log.debug("testModifiedStrategyPass> done"); } /** * @ejb.interface-method */ public void testModifiedStrategyFail(String jndiName, Integer id) throws Exception { log.debug("testModifiedStrategyFail> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setStringGroup2("modified by testModifiedStrategyFail"); myHome.create().modifyGroup2InRequiresNew(jndiName, id); log.debug("testModifiedStrategyFail> done"); } /** * @ejb.interface-method * @ejb.transaction type="RequiresNew" */ public void modifyGroup2InRequiresNew(String jndiName, Integer id) throws Exception { log.debug("modifyGroup2InRequiresNew"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup2(new Integer(222)); entity.setStringGroup2("modified by modifyGroup2InRequiresNew"); entity.setDoubleGroup2(new Double(222.222)); } /** * @ejb.interface-method * @ejb.transaction type="RequiresNew" */ public void modifyGroup1InRequiresNew(String jndiName, Integer id) throws Exception { log.debug("modifyGroup1InRequiresNew"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findByPrimaryKey(id); entity.setIntegerGroup1(new Integer(333)); entity.setStringGroup1("modified by modifyGroup1InRequiresNew"); entity.setDoubleGroup1(new Double(333.333)); } /** * @ejb.interface-method */ public void testUpdateLockOnSync(String jndiName, Integer id) throws Exception { log.debug("testUpdateLockOnSync> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findById(id); entity.setStringGroup1("FIRST UPDATE"); entity = getCmpEntityHome(jndiName).findById(id); entity.setStringGroup1("SECOND UPDATE"); log.debug("testUpdateLockOnSync> done"); } /** * @ejb.interface-method */ public void testExplicitVersionUpdateOnSync(String jndiName, Integer id) throws Exception { log.debug("testExplicitVersionUpdateOnSync> begin"); CmpEntityLocal entity = getCmpEntityHome(jndiName).findById(id); if(entity.getVersionField().longValue() != 1) throw new Exception("entity.getVersionField().longValue() != 1"); entity.setStringGroup1("FIRST UPDATE"); entity = getCmpEntityHome(jndiName).findById(id); if(entity.getVersionField().longValue() != 2) throw new Exception("entity.getVersionField().longValue() != 2"); entity.setStringGroup1("SECOND UPDATE"); log.debug("testExplicitVersionUpdateOnSync> done"); } // SessionBean implementation ---------------------------- public void setSessionContext(SessionContext ctx) { myHome = (FacadeHome)ctx.getEJBHome(); } public void ejbCreate() throws CreateException {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} // Private ----------------------------------------------- private CmpEntityLocalHome getCmpEntityHome(String entityJndiName) throws NamingException { InitialContext ic = new InitialContext(); CmpEntityLocalHome cmpEntityHome = (CmpEntityLocalHome) ic.lookup(entityJndiName); return cmpEntityHome; } }