Just wondering.. isn't the java.net.URL not broken and should you use URI?

>From http://java.sun.com/javaone/sf/2007/articles/puzzlers.jsp

"
The important thing the audience learned here is that the URL object's
equals() method is, in effect, broken. In this case, two URL objects are
equal if they resolve to the same IP address and port, not just if they
have equal strings. However, Bloch and Pugh point out an even more
severe Achilles' Heel: the equality behavior differs depending on if
you're connected to the network, where virtual addresses can resolve to
the same host, or if you're not on the net, where the resolve is a
blocking operation. So, as far as lessons learned, they recommend:

    * Don't use URL; use URI instead. URI makes no attempt to compare
addresses or ports. In addition, don't use URL as a Set element or a Map
key.
    * For API designers, the equals() method should not depend on the
environment. For example, in this case, equality should not change if a
computer is connected to the Internet versus standalone.
"

Bart


[EMAIL PROTECTED] wrote:
> Revision: 9315
> Author:   bvanhalderen
> Date:     2007-12-16 22:32:38 +0100 (Sun, 16 Dec 2007)
> 
> Log Message:
> -----------
> HREPTWO-325: get back into working state after conflicting architecture, but 
> should be reconsidered
> 
> Modified Paths:
> --------------
>     
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryImpl.java
>     
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/RepositoryDecorator.java
> 
> Added Paths:
> -----------
>     
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
>     
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/client/ClientManager.java
> 
> Removed Paths:
> -------------
>     
> hippo-ecm/trunk/repository/engine/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
> Copied: 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
>  (from rev 9312, 
> hippo-ecm/trunk/repository/engine/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java)
> ===================================================================
> --- 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
>                                 (rev 0)
> +++ 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
>         2007-12-16 21:32:38 UTC (rev 9315)
> @@ -0,0 +1,32 @@
> +package org.hippoecm.repository;
> +
> +import java.net.URL;
> +
> +import javax.jcr.Session;
> +
> +import org.apache.jackrabbit.classloader.DynamicRepositoryClassLoader;
> +import org.hippoecm.repository.api.HippoNodeType;
> +
> +public class HippoRepositoryClassLoader extends DynamicRepositoryClassLoader 
> {
> +
> +    /** dynamic loading class path
> +     * Jars should be put into /hippo:plugins/<plugin>/<jar>
> +     */
> +    private static final String JARS = HippoNodeType.PLUGIN_PATH + 
> "/*/*/jcr:data";
> +    private static final String[] handles = { JARS };
> +
> +    public HippoRepositoryClassLoader(Session session) {
> +        // This is the preferred method of instantiation, with automatic 
> (on-demand)
> +        // unpacking of newly inserted jars.  However, this fails because of 
> JR bug #???.
> +        super(session, handles, 
> HippoRepositoryClassLoader.class.getClassLoader());
> +    }
> +
> +    // Used by RMI to construct codebase for the classes that have been 
> loaded.
> +    // The "jcr" protocol is not generally available and would have to be 
> +    // registered globally in a J2EE environment.  Assume that the client is 
> using
> +    // a Hippo classloader, i.e. uses the same path in the repository.
> +    @Override
> +    public URL[] getURLs() {
> +        return null;
> +    }
> +}
> 
> Modified: 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryImpl.java
> ===================================================================
> --- 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryImpl.java
>        2007-12-16 21:30:52 UTC (rev 9314)
> +++ 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/HippoRepositoryImpl.java
>        2007-12-16 21:32:38 UTC (rev 9315)
> @@ -35,6 +35,9 @@
>  
>  import org.hippoecm.repository.api.UserTransactionImpl;
>  
> +/* FIXME: [BvH] doubtfull whether we want this dependency here */
> +import org.hippoecm.repository.servicing.RepositoryDecorator;
> +
>  public abstract class HippoRepositoryImpl implements HippoRepository {
>  
>      protected Repository repository;
> 
> Modified: 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/RepositoryDecorator.java
> ===================================================================
> --- 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/RepositoryDecorator.java
>      2007-12-16 21:30:52 UTC (rev 9314)
> +++ 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/RepositoryDecorator.java
>      2007-12-16 21:32:38 UTC (rev 9315)
> @@ -22,6 +22,11 @@
>  import javax.jcr.RepositoryException;
>  import javax.jcr.Session;
>  
> +/* FIXME: [BvH] doubtfull whether classloader should be integrated in
> + * decorating layer
> + */
> +import org.hippoecm.repository.HippoRepositoryClassLoader;
> +
>  /**
>   * Simple [EMAIL PROTECTED] Repository Repository} decorator.
>   */
> 
> Added: 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/client/ClientManager.java
> ===================================================================
> --- 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/client/ClientManager.java
>                             (rev 0)
> +++ 
> hippo-ecm/trunk/repository/connector/src/main/java/org/hippoecm/repository/servicing/client/ClientManager.java
>     2007-12-16 21:32:38 UTC (rev 9315)
> @@ -0,0 +1,27 @@
> +package org.hippoecm.repository.servicing.client;
> +
> +import org.apache.jackrabbit.rmi.client.ClientObject;
> +
> +/* FIXME: [BvH] the decorating layer it probably not the right point for
> + * most of this functionality
> + */
> +
> +public abstract class ClientManager extends ClientObject {
> +
> +    protected ClientManager(LocalServicingAdapterFactory factory) {
> +        super(factory);
> +    }
> +
> +    /**
> +     * Utility routine to set the thread context to the repository class 
> loader.
> +     * Call it when making an RMI call and an object could be returned whose
> +     * class resides in the repository.
> +     */
> +    protected ClassLoader setContextClassLoader() {
> +        ClassLoader current = Thread.currentThread().getContextClassLoader();
> +        LocalServicingAdapterFactory factory = 
> (LocalServicingAdapterFactory) getFactory();
> +        
> Thread.currentThread().setContextClassLoader(factory.getClassLoader());
> +        return current;
> +    }
> +
> +}
> 
> Deleted: 
> hippo-ecm/trunk/repository/engine/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
> ===================================================================
> --- 
> hippo-ecm/trunk/repository/engine/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
>    2007-12-16 21:30:52 UTC (rev 9314)
> +++ 
> hippo-ecm/trunk/repository/engine/src/main/java/org/hippoecm/repository/HippoRepositoryClassLoader.java
>    2007-12-16 21:32:38 UTC (rev 9315)
> @@ -1,32 +0,0 @@
> -package org.hippoecm.repository;
> -
> -import java.net.URL;
> -
> -import javax.jcr.Session;
> -
> -import org.apache.jackrabbit.classloader.DynamicRepositoryClassLoader;
> -import org.hippoecm.repository.api.HippoNodeType;
> -
> -public class HippoRepositoryClassLoader extends DynamicRepositoryClassLoader 
> {
> -
> -    /** dynamic loading class path
> -     * Jars should be put into /hippo:plugins/<plugin>/<jar>
> -     */
> -    private static final String JARS = HippoNodeType.PLUGIN_PATH + 
> "/*/*/jcr:data";
> -    private static final String[] handles = { JARS };
> -
> -    public HippoRepositoryClassLoader(Session session) {
> -        // This is the preferred method of instantiation, with automatic 
> (on-demand)
> -        // unpacking of newly inserted jars.  However, this fails because of 
> JR bug #???.
> -        super(session, handles, 
> HippoRepositoryClassLoader.class.getClassLoader());
> -    }
> -
> -    // Used by RMI to construct codebase for the classes that have been 
> loaded.
> -    // The "jcr" protocol is not generally available and would have to be 
> -    // registered globally in a J2EE environment.  Assume that the client is 
> using
> -    // a Hippo classloader, i.e. uses the same path in the repository.
> -    @Override
> -    public URL[] getURLs() {
> -        return null;
> -    }
> -}
> 
> 
> 
> _______________________________________________
> Hippocms-svn mailing list
> [EMAIL PROTECTED]
> http://lists.hippo.nl/mailman/listinfo/hippocms-svn


-- 

Hippo
Oosteinde 11
1017WT Amsterdam
The Netherlands
Tel  +31 (0)20 5224466
-------------------------------------------------------------
[EMAIL PROTECTED] / http://www.hippo.nl
--------------------------------------------------------------
********************************************
Hippocms-dev: Hippo CMS development public mailinglist

Reply via email to