[jboss-jira] [JBoss JIRA] Commented: (AS7-1562) Ability to add custom java url protocol handler

David Lloyd (JIRA) jira-events at lists.jboss.org
Wed Aug 17 18:30:17 EDT 2011


    [ https://issues.jboss.org/browse/AS7-1562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12621756#comment-12621756 ] 

David Lloyd commented on AS7-1562:
----------------------------------

In AS7, this is just a question of calling {{org.jboss.modules.Module#registerURLStreamHandlerFactoryModule()}} with the name of the module containing the handler factory for your protocol, and ensuring that that module has a {{META-INF/services/java.net.URLStreamHandler}} file in it.  Alternatively, you can specify the module name in the {{jboss.protocol.handler.modules}} system property, which works similarly to {{java.protocol.handler.pkgs}} except rather than accepting a list of package names from the application class path, it accepts a list of module names from the boot module loader.

It is important to remember that each time you add such a handler, you create a *permanent* static reference to it.  This means that if your handler is in a deployment, the handler (and thus the deployment) class loader hangs around *forever*, even if you try to undeploy it.  This can appear as a leak if you repeatedly redeploy a module with such a handler in it which registers itself upon deployment.  Thus it is recommended that any custom URL handlers be registered from static modules.  In addition, if there is a URL protocol type that should be made available by default, then it should be noted so that it can be added to the AS 7 bootstrap.

Note that at first blush, a URL scheme of "classpath" seems a poor fit in a modular environment though.


> Ability to add custom java url protocol handler
> -----------------------------------------------
>
>                 Key: AS7-1562
>                 URL: https://issues.jboss.org/browse/AS7-1562
>             Project: Application Server 7
>          Issue Type: Feature Request
>          Components: Server
>         Environment: JBoss EAP 5.1
>            Reporter: Brad Maxwell
>              Labels: URLStreamHandlerFactory, custom, handler, java, url
>
> Looking in the source code for org.jboss.system.server.ServerImpl [1]
> - this class is setting the URLStreamHandlerFactory and also calling preload and specifying the java.protocol.hanlder.pkgs. 
> URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory());
>   
> // Preload JBoss URL handlers
> URLStreamHandlerFactory.preload()
> ...
> System.setProperty("java.protocol.handler.pkgs", handlerPkgs);
> So it looks like there isn't a way to change the URLStreamHandlerFactory that is used and the instance of URLStreamHandlerFactory created is not accessible to add new protocols.
> Is there anything I'm missing, it looks like this should be a feature, I've found a few posts on the net mentioning other app servers allow you to specify the Factory class to use.
> The exception is:
> java.net.MalformedURLException: unknown protocol: classpath
> [1] http://anonsvn.jboss.org/repos/jbossas/tags/JBPAPP_4_3_0_GA_CP08/system/src/main/org/jboss/system/server/ServerImpl.java
> [2] http://anonsvn.jboss.org/repos/common/common-core/tags/jboss-common-core-2.0.4.GA/src/main/java/org/jboss/net/protocol/URLStreamHandlerFactory.java
> [3] http://community.jboss.org/message/288238?tstart=0

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list