001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: F_mnb_CRW_EC2.java 10108 2007-03-28 09:21:26Z durieuxp $
023: * --------------------------------------------------------------------------
024: */package org.objectweb.jonas.jtests.clients.entity;
025:
026: import java.util.ArrayList;
027: import java.util.Collection;
028: import java.util.Enumeration;
029: import java.util.Hashtable;
030:
031: import javax.naming.NamingException;
032: import javax.rmi.PortableRemoteObject;
033:
034: import junit.framework.Test;
035: import junit.framework.TestSuite;
036:
037: import org.objectweb.jonas.jtests.beans.relation.mnb.AHomeRemote;
038: import org.objectweb.jonas.jtests.beans.relation.mnb.ARemote;
039: import org.objectweb.jonas.jtests.beans.relation.mnb.BHomeRemote;
040: import org.objectweb.jonas.jtests.beans.relation.mnb.BRemote;
041:
042: /**
043: * For testing many-to-many bidirectional relationships
044: * @author Ph Durieux
045: **/
046: public class F_mnb_CRW_EC2 extends A_mnb {
047:
048: private static String BEAN_HOME_A = "relation_mnb_AtxHome";
049: protected static AHomeRemote ahome = null;
050: private static String BEAN_HOME_B = "relation_mnb_BtxHome";
051: protected static BHomeRemote bhome = null;
052:
053: public F_mnb_CRW_EC2(String name) {
054: super (name);
055: }
056:
057: public AHomeRemote getAHome() {
058: if (ahome == null) {
059: try {
060: ahome = (AHomeRemote) PortableRemoteObject.narrow(ictx
061: .lookup(BEAN_HOME_A), AHomeRemote.class);
062: } catch (NamingException e) {
063: fail("Cannot get bean home: " + e.getMessage());
064: }
065: }
066: return ahome;
067: }
068:
069: public BHomeRemote getBHome() {
070: if (bhome == null) {
071: try {
072: bhome = (BHomeRemote) PortableRemoteObject.narrow(ictx
073: .lookup(BEAN_HOME_B), BHomeRemote.class);
074: } catch (NamingException e) {
075: fail("Cannot get bean home: " + e.getMessage());
076: }
077: }
078: return bhome;
079: }
080:
081: public void testRollback() throws Exception {
082: ARemote a = getAHome().findByPrimaryKey("a1");
083: BRemote b = getBHome().findByPrimaryKey("b2");
084: Collection orig = a.retrieveB();
085: int colsz = orig.size();
086:
087: // disassociate and commit
088: utx.begin();
089: a.assignB(new ArrayList());
090: utx.commit();
091: assertEquals("cmr not reset to null", 0, a.retrieveB().size());
092: assertEquals("B must not be changed in a M-N relation", 2, b
093: .retrieveA().size());
094:
095: // revert to original state outside of a user transaction
096: a.assignB(orig);
097:
098: // sync(false) here forces test to pass
099:
100: // retrieveB inside a transaction
101: utx.begin();
102: assertEquals("CMR not reset to original value", colsz, a
103: .retrieveB().size());
104: utx.rollback();
105:
106: // verify that retrieveB returns correct value after rollback
107: try {
108: assertEquals("rollback should not modify B value", 3, b
109: .retrieveA().size());
110: assertEquals("rollback should not modify A value", colsz, a
111: .retrieveB().size());
112: } finally {
113: // force sync to cleanup
114: sync(true);
115: }
116: checkIsInitialState();
117: }
118:
119: public static Test suite() {
120: return new TestSuite(F_mnb_CRW_EC2.class);
121: }
122:
123: public static void main(String args[]) {
124: String testtorun = null;
125: // Get args
126: for (int argn = 0; argn < args.length; argn++) {
127: String s_arg = args[argn];
128: Integer i_arg;
129: if (s_arg.equals("-n")) {
130: testtorun = args[++argn];
131: }
132: }
133: if (testtorun == null) {
134: junit.textui.TestRunner.run(suite());
135: } else {
136: junit.textui.TestRunner.run(new F_mnb_CRW_EC2(testtorun));
137: }
138: }
139:
140: }
|