[ 
http://issues.apache.org/jira/browse/HIVEMIND-166?page=comments#action_12363999 
] 

Knut Wannheden commented on HIVEMIND-166:
-----------------------------------------

The problem described in the message you refer to was, as you say, fixed long 
ago. With that fix it seems like HiveMind can actually call openStream() on 
those "jndi:" URLs. That's what I meant by "some URLs work".

You also write that "The issue occurs when hivemind tries to create a sub 
module defined in a jar file". I am now not sure what the issue is. Could you 
send the error message and stack trace being printed?

I unfortunately don't have any Tapestry experience, but this page seems to 
document how you can control the HiveMind registry creation process: 
http://jakarta.apache.org/tapestry/UsersGuide/hivemind.html.

I hope we'll be able to find a satisfactory solution to your problem.

> Hivemind does not work in Oracle/OC4J
> -------------------------------------
>
>          Key: HIVEMIND-166
>          URL: http://issues.apache.org/jira/browse/HIVEMIND-166
>      Project: HiveMind
>         Type: Bug
>   Components: framework
>     Versions: 1.1
>  Environment: Oracle oc4j, from 9.x through 10.1.1
>     Reporter: Drew McAuliffe

>
> Hivemind has problems working in Oracle's OC4J container. The problem is 
> related to how Oracle handles URLs and is probably more Oracle's fault than 
> Hivemind's, but can still be pretty easily fixed. The following is from the 
> Hivemind mailing list and explains the situation fully, and also offers a 
> working code snippet.
> Last October I posted a message about a problem I had getting hivemind
> to work with OC4J 9.0.4.  and a simple code change to fix it.
> (http://mail-archives.apache.org/mod_mbox/jakarta-hivemind-user/200410.mbox/[EMAIL
>  PROTECTED])
> That issue was fixed long ago and everything I did with hivemind has
> worked great, however when I fired up Tapestry 4.0 on OC4J last week I
> discovered a similar problem that does not have as nice of a solution.
> The issue occurs when hivemind tries to create a sub module defined in
> a jar file (like Tapestry 4 does.)   To create the sub module,
> hivemind creates a resource relative to the parent module to retrieve
> the module descriptor.  In the URLResource class this is done by
> converting the internal URL object to a string, removing the parent
> file name, appending the relative resource path, and creating a new
> URL object with the new path.  This is exactly the same kind of issue
> that my original post talked about.  Except this time I can't come up
> with a "nice" solution.  URL objects don't have a method to create
> relative URLs, so converting to a string is the only real option.
> The two not nice solutions I can come up with are:
> 1)      Don't support OC4J 10.1.2 and below.  I have tried hivemind 1.1
> with the latest developer preview of OC4J and the jndi urls go away
> and everything works great as is. So sub modules will work on OC4J
> after its next major release.
> 2)      Put a hack in URLResource to explicitly check for "jndi" urls in
> URLResource.newResource.  The path can transformed to a "jar" url with
> a minimal amount of code.  The only real problem with this is that it
> muddies the code up a bit with an OC4J specific fix, but it shouldn't
> affect any other containers (unless something else also uses a "jndi"
> prefix.)
> I have actually implemented option 2(along with a couple of unit
> tests) just to see if anything else would break on OC4J 10.1.2.
> Everything appears to work once this chunk of code is added, however I
> haven't tried it on anything other than Windows with Sun's JDK.
> I'm attaching that patch to this post, but I'm really hoping someone
> can come up with a better solution.
> Index: 
> C:/workspace/jakarta-hivemind/framework/src/test/org/apache/hivemind/util/TestURLResource.java
> ===================================================================
> --- 
> C:/workspace/jakarta-hivemind/framework/src/test/org/apache/hivemind/util/TestURLResource.java
>       (revision
> 0)
> +++ 
> C:/workspace/jakarta-hivemind/framework/src/test/org/apache/hivemind/util/TestURLResource.java
>       (revision
> 0)
> @@ -0,0 +1,23 @@
> +package org.apache.hivemind.util;
> +
> +import org.apache.hivemind.Resource;
> +import org.apache.hivemind.util.URLResource;
> +
> +import hivemind.test.FrameworkTestCase;
> +
> +public class TestURLResource extends FrameworkTestCase {
> +       public void testOC4JHack()
> +    {
> +        Resource l1 = new
> URLResource("jndi:C:\\jdev1012\\jakarta-struts\\lib\\struts.jar/org/apache/struts/action/Action.class");
> +        Resource l2 = l1.getRelativeResource("test/test.class");
> +
> +        assertEquals("Error generating OC4J safe resource URL",
> "jar:file:///C:\\jdev1012\\jakarta-struts\\lib\\struts.jar!/org/apache/struts/action/test/test.class"
> ,l2.getPath());
> +    }
> +
> +       public void testNormalUrl() {
> +               Resource l1 = new URLResource("http://jakarta.apache.org/";);
> +        Resource l2 = l1.getRelativeResource("hivemind");
> +
> +        assertEquals("Incorrect relative URL generated",
> "http://jakarta.apache.org/hivemind";, l2.getPath());
> +       }
> +}
> Index: 
> C:/workspace/jakarta-hivemind/framework/src/java/org/apache/hivemind/util/URLResource.java
> ===================================================================
> --- 
> C:/workspace/jakarta-hivemind/framework/src/java/org/apache/hivemind/util/URLResource.java
>   (revision
> 209772)
> +++ 
> C:/workspace/jakarta-hivemind/framework/src/java/org/apache/hivemind/util/URLResource.java
>   (working
> copy)
> @@ -50,6 +50,19 @@
>     protected Resource newResource( String path )
>     {
> +       //begin hack to work with OC4J <= 10.1.2
> +       //change jndi:PATH_TO_ARCHIVE/PATH_IN_ARCHIVE to
> jar:file:///PATH_TO_ARCHIVE!/PATH_IN_ARCHIVE
> +       if(path.startsWith("jndi:")) {
> +               //change prefix
> +               path = "jar:file:///" + path.substring(5);
> +
> +               int endOfJar = path.indexOf(".jar") + 4;
> +
> +               //insert "!" between jar file and path to resource
> +               path = path.substring(0, endOfJar) + "!" + 
> path.substring(endOfJar) ;
> +       }
> +       //end hack
> +
>         return new URLResource( path );
>     }
> The following was a response (also on the mailing list), which might offer a 
> hint towards a better solution:
> Hi,
> I had the same problem and fixed it with almost exactly the same code
> but in a slightly different way - by writing my own, very slightly
> modified, version of BuilderFactory (can't subclass because it is final)
> and of XmlModuleDescriptorProvider, and getting them to generate an
> OracleResource (which contains the jndi --> jar code) when the prefix is
> jndi.
> The advantage of this for me is that I don't have to hack the hivemind
> sources every time I update.
> Irritating, like much Oracle stuff, unfortunately.
> Best wishes
> John

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to