Author: peter_firmstone Date: Sun Jul 15 07:53:42 2012 New Revision: 1361646
URL: http://svn.apache.org/viewvc?rev=1361646&view=rev Log: Fixing URI / URL issues on windows, fixing Thread.sleep replacements for Thread.yield Added: river/jtsk/trunk/src/org/apache/river/impl/net/ river/jtsk/trunk/src/org/apache/river/impl/net/UriString.java - copied, changed from r1361523, river/jtsk/trunk/src/org/apache/river/api/security/UriString.java Removed: river/jtsk/trunk/src/org/apache/river/api/security/UriString.java Modified: river/jtsk/trunk/qa/build.xml river/jtsk/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java river/jtsk/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java river/jtsk/trunk/src/com/sun/jini/start/SharedActivationPolicyPermission.java river/jtsk/trunk/src/org/apache/river/api/security/DefaultPolicyParser.java Modified: river/jtsk/trunk/qa/build.xml URL: http://svn.apache.org/viewvc/river/jtsk/trunk/qa/build.xml?rev=1361646&r1=1361645&r2=1361646&view=diff ============================================================================== --- river/jtsk/trunk/qa/build.xml (original) +++ river/jtsk/trunk/qa/build.xml Sun Jul 15 07:53:42 2012 @@ -368,7 +368,7 @@ <target name="run-categories" depends="james-brown" description="Execute QA test categories"> <!-- categories can be found under packages com.sun.jini.test.impl and com.sun.jini.test.spec, some of them: --> <!--<property name="test.categories" value="id,loader,policyprovider,locatordiscovery,activation, - config,constraint,discoverymanager,discoveryservice,joinmanager,url, + config,constraint,discoverymanager,discoveryservice,joinmanager,url,lookupservice, eventmailbox,jeri,iiop,jrmp,reliability,scalability,thread,renewalservice"/>--> <property name="run.categories" value="joinmanager"/> <testrun> Modified: river/jtsk/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java?rev=1361646&r1=1361645&r2=1361646&view=diff ============================================================================== --- river/jtsk/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java (original) +++ river/jtsk/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java Sun Jul 15 07:53:42 2012 @@ -2427,11 +2427,19 @@ class FiddlerImpl implements ServerProxy */ final long endTime = System.currentTimeMillis()+MAX_UNEXPORT_DELAY; boolean unexported = false; - /* Unexport only if there are no pending or in-progress calls*/ - while(!unexported && (System.currentTimeMillis() < endTime)) { - unexported = serverExporter.unexport(false); - if(!unexported) Thread.yield(); - }//end loop + boolean interrupted = false; + /* Unexport only if there are no pending or in-progress calls*/ + while(!unexported && (System.currentTimeMillis() < endTime)) { + unexported = serverExporter.unexport(false); + if(!unexported) try { + Thread.sleep(500L); + } catch (InterruptedException ex) { + interrupted = true; + continue; + } + }//end loop + // Restore the interrupt. + if (interrupted) Thread.currentThread().interrupt(); if(!unexported) {//Not yet unexported. Forcibly unexport serverExporter.unexport(true); }//endif Modified: river/jtsk/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java?rev=1361646&r1=1361645&r2=1361646&view=diff ============================================================================== --- river/jtsk/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java (original) +++ river/jtsk/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java Sun Jul 15 07:53:42 2012 @@ -1045,9 +1045,7 @@ abstract class NormServerBaseImpl } try { // Give other threads a chance to run - long expires = set.getExpiration() - System.currentTimeMillis(); - // Thread sleep time decreases as it approaches the lease expiration. - Thread.sleep(expires / 2); + Thread.sleep(100L); // Thread.yield(); } catch (InterruptedException ex) { // Reset the interrupt status. @@ -1617,9 +1615,7 @@ abstract class NormServerBaseImpl if (!unexported) { // Thread.yield(); try { - // Sleep time decreases as we approach the max delay - // and retries increase. - Thread.sleep((end_time - System.currentTimeMillis())/2); + Thread.sleep(100L); } catch (InterruptedException e){ // Reset interrupt status Thread.currentThread().interrupt(); Modified: river/jtsk/trunk/src/com/sun/jini/start/SharedActivationPolicyPermission.java URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/com/sun/jini/start/SharedActivationPolicyPermission.java?rev=1361646&r1=1361645&r2=1361646&view=diff ============================================================================== --- river/jtsk/trunk/src/com/sun/jini/start/SharedActivationPolicyPermission.java (original) +++ river/jtsk/trunk/src/com/sun/jini/start/SharedActivationPolicyPermission.java Sun Jul 15 07:53:42 2012 @@ -21,13 +21,18 @@ package com.sun.jini.start; import java.io.File; import java.io.FilePermission; import java.io.Serializable; +import java.net.URISyntaxException; import java.net.URL; import java.net.MalformedURLException; +import java.net.URI; import java.security.Permission; import java.security.PermissionCollection; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.river.impl.net.UriString; /** * {@link Permission} class used by the @@ -97,6 +102,36 @@ public final class SharedActivationPolic policyPermission = init(policy); } +// /** +// * Contains common code to all constructors. +// */ +// private Permission init(final String policy) { +// /* +// * In order to leverage the <code>FilePermission</code> logic +// * we need to make sure that forward slashes ("/"), in +// * <code>URLs</code>, are converted to +// * the appropriate system dependent <code>File.separatorChar</code>. +// * For example, +// * http://host:port/* matches http://host:port/bogus.jar under +// * UNIX, but not under Windows since "\*" is the wildcard there. +// */ +// if (policy == null) throw new NullPointerException("Null policy string not allowed"); +// String uncanonicalPath = null; +// try { +// URL url = new URL(policy); +// uncanonicalPath = url.toExternalForm(); +// uncanonicalPath = uncanonicalPath.replace('/', File.separatorChar); +// if (DEBUG) { +// System.out.println("SharedActivationPolicyPermission::init() - " +// + policy + " => " + uncanonicalPath); +// } +// } catch (MalformedURLException me) { +// uncanonicalPath = policy; +// } +// +// return new FilePermission(uncanonicalPath, "read"); +// } + /** * Contains common code to all constructors. */ @@ -114,15 +149,17 @@ public final class SharedActivationPolic String uncanonicalPath = null; try { URL url = new URL(policy); - uncanonicalPath = url.toExternalForm(); - uncanonicalPath = uncanonicalPath.replace('/', File.separatorChar); + uncanonicalPath = UriString.escapeIllegalCharacters(url.toExternalForm()); + uncanonicalPath = new File(new URI(uncanonicalPath)).getPath(); if (DEBUG) { System.out.println("SharedActivationPolicyPermission::init() - " + policy + " => " + uncanonicalPath); } } catch (MalformedURLException me) { uncanonicalPath = policy; - } + } catch (URISyntaxException ex){ + uncanonicalPath = policy; + } return new FilePermission(uncanonicalPath, "read"); } Modified: river/jtsk/trunk/src/org/apache/river/api/security/DefaultPolicyParser.java URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/api/security/DefaultPolicyParser.java?rev=1361646&r1=1361645&r2=1361646&view=diff ============================================================================== --- river/jtsk/trunk/src/org/apache/river/api/security/DefaultPolicyParser.java (original) +++ river/jtsk/trunk/src/org/apache/river/api/security/DefaultPolicyParser.java Sun Jul 15 07:53:42 2012 @@ -22,6 +22,7 @@ package org.apache.river.api.security; +import org.apache.river.impl.net.UriString; import java.io.BufferedReader; import java.io.File; import java.io.InputStream; @@ -284,7 +285,8 @@ class DefaultPolicyParser implements Pol Segment seg = segment(s,p); Collection<String> urls = new ArrayList<String>(); while ( seg.hasNext() ){ - urls.add(seg.next().replace(File.separatorChar, '/')); +// urls.add(seg.next().replace(File.separatorChar, '/')); + urls.add(seg.next()); } return urls; } Copied: river/jtsk/trunk/src/org/apache/river/impl/net/UriString.java (from r1361523, river/jtsk/trunk/src/org/apache/river/api/security/UriString.java) URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/impl/net/UriString.java?p2=river/jtsk/trunk/src/org/apache/river/impl/net/UriString.java&p1=river/jtsk/trunk/src/org/apache/river/api/security/UriString.java&r1=1361523&r2=1361646&rev=1361646&view=diff ============================================================================== --- river/jtsk/trunk/src/org/apache/river/api/security/UriString.java (original) +++ river/jtsk/trunk/src/org/apache/river/impl/net/UriString.java Sun Jul 15 07:53:42 2012 @@ -15,8 +15,9 @@ * limitations under the License. */ -package org.apache.river.api.security; +package org.apache.river.impl.net; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -28,7 +29,7 @@ import java.util.Map; * * @author Peter Firmstone. */ -class UriString { +public class UriString { private final static Map<Character,String> escaped = new HashMap<Character,String>(); private final static Collection<Character> alpha; @@ -78,7 +79,7 @@ class UriString { addArrayToCollection(alpha, upalpha); } - static void escapes(Character [] unicode, String[] escape){ + private static void escapes(Character [] unicode, String[] escape){ int l = unicode.length; if (l != escape.length) throw new IllegalArgumentException("unequal arrays"); for (int i = 0; i < l; i++){ @@ -86,23 +87,28 @@ class UriString { } } - static void addArrayToCollection(Collection<Character> col, char [] chars){ + private static void addArrayToCollection(Collection<Character> col, char [] chars){ int l = chars.length; for ( int i = 0; i < l; i++){ col.add(chars[i]); } } - static String escapeIllegalCharacters(String url){ + public static String escapeIllegalCharacters(String url){ boolean isFile = url.startsWith("file:"); char [] u = url.toCharArray(); int l = u.length; StringBuilder sb = new StringBuilder(); for (int i=0; i<l; i++){ - if (isFile && i == 5 && url.startsWith(":", 6 )) { - //Windows drive letter without leading slashes. - if ( alpha.contains(u[i])){ - sb.append("///"); + if (isFile){ + // Ensure we use forward slashes + if (u[i] == File.separatorChar) u[i] = '/'; + if (i == 5 && url.startsWith(":", 6 )) { + // Windows drive letter without leading slashes doesn't comply + // with URI spec, fix it here. + if ( alpha.contains(u[i])){ + sb.append("///"); + } } } Character c = Character.valueOf(u[i]);
