RetryDirtyCalls.java revision 0
2362N/A * Copyright 1999 Sun Microsystems, Inc. All Rights Reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 0N/A * published by the Free Software Foundation. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 2362N/A * CA 95054 USA or visit www.sun.com if you need additional information or * @summary When a DGC dirty call fails, RMI's client-side DGC implementation * should attempt to retry the same dirty call a few times, at least until the * known lease for that endpoint has expired, instead of just giving up * renewing that lease at all after the first failure. * @author Peter Jones (inspired by Adrian Colley's test case in 4268258) * @build RetryDirtyCalls_Stub /** how long we wait before declaring that this test has passed */ private final static long TIMEOUT =
20000;
/** true if this object's unreferenced method has been called */ * Return this object. The need for this method is explained below. * Set properties to tweak DGC behavior so that this test will execute * quickly: set the granted lease duration to 10 seconds, the interval * that leases are checked to 3 seconds. * Make idle connections time out almost instantly (0.1 seconds) so * that the DGC implementation will have to make a new connection for * each dirty call, thus going through the socket factory, where we * can easily cause the operation to fail. * The stub returned by UnicastRemoteObject.exportObject() does * not participate in DGC, but it does allow us to invoke a method * on the remote object through RMI. Therefore, we invoke the * getSelf() method through RMI, which returns an equivalent stub * that does participate in DGC. stub =
null;
// in case 4114579 has been fixed * Set the socket factory to cause 3 connections attempts in a row * to fail before allowing a connection to succeed, expecting the * client-side DGC implementation to make at least four attempts. * The unreferenced method was not invoked for some reason, * but the dirty calls were clearly not retried well enough. "test failed because dirty calls not retried enough, " +
"but remote object not unreferenced");
"TEST PASSED: remote object not unreferenced");
* When all is said and done, try to unexport the remote object * so that the VM has a chance to exit.