0

我有一个正在尝试移植到 Java EE 的遗留应用程序。目前此应用程序调用 URL.setURLStreamHandlerFactory() 来注册一些自定义 URL 协议处理程序。这个调用在 Glassfish v 2.1 和 3 下失败,因为 glassfish 已经注册了一个工厂。

我尝试使用 java.protocol.handler.pkgs 系统属性,但由于类加载器问题,这对我不起作用。处理程序类都是应用程序的一部分,我并不热衷于尝试提取它们并将 jar 放入容器的类路径中。

我有一点 osgi 包的味道——显然我可以编写一个处理新协议的包。我并不热衷于将这个 Web 应用程序作为 osgi 包(一次一步!首先是 EE,如果需要,然后是 osgi)。

是否可以将捆绑 jar 弹出到我的 WEB-INF/lib 目录并让 Glassfish 将其作为捆绑加载?捆绑包需要从 Web 应用程序(WEB-INF/lib 或 WEB-INF/classes 中的另一个 jar)导入包。如果可以的话,我愿意将此应用程序打包为 EAR,但我无法证明在不了解更多信息的情况下将整个应用程序进行 osgize 是合理的。

4

1 回答 1

1

我已经解决了我的问题。显然,由于 java.protocol.handler.pkgs 系统属性工作正常,我有一些电线交叉。

对于其他任何绊倒的人,我在 $DOMAINDIR/lib/ext/ 以及我的 WAR 的 WEB-INF/lib 目录中放置了一个带有处理程序的 jar。在我的应用程序配置中,我还添加了一个 jvm 选项 -Djava.protocol.handler.pkgs=my.handlers.pkg.prefix

我注意到在 glassfish 2.1 中,如果我将前缀放入一些启动代码中,它可以在没有 jvm 选项的情况下工作,但在 glassfish 3 中,jvm 选项是必要的,因为 felix(正在使用 osgi 实现 glassfish)只咨询服务器上的属性启动,而不是针对每个请求。

于 2009-11-12T12:47:56.417 回答