J2EE 和外部 URL 处理程序,对设计有疑问

发布于 2024-11-15 15:25:49 字数 679 浏览 1 评论 0原文

我正在 Glassfish 3.1 上开发一个 J2EE 应用程序,它将使用一个严重依赖于 URL 的外部库。 URL 将使用自定义协议(例如db:123,其中123 是数据库中记录的ID)。我对如何实现 URL 协议处理程序(及其 URLConnection 实现)存有疑问,因为该协议处理程序将使用 EJB 从数据库获取数据。

db 协议处理程序需要在 JVM 启动时通过 -Djava.protocol.handler.pkgs 标志进行全局注册。 (我在 Glassfish 中找不到更好的方法来执行此操作。)无论如何,因为它是在 JVM 启动时注册的,所以它不知道在打开 URL 流时可能调用的任何 EJB。所以我所做的是创建一个可以注册数据库处理程序的单例注册表类。每当请求流时,URLConnection 都会使用此注册表(它将在注册表中搜索数据库处理程序并使用它来获取数据)。

然后,EJB 将在 @PostConstruct 方法中将自身注册为数据库处理程序。这样,任何时候使用 db:XXX URL 时,都会间接调用 EJB 来获取数据。

不知何故,我觉得这个设计有点脏,但由于自定义 URL 处理程序,我的能力非常有限。如果您有任何建议或提示可以给我,那就太好了。

I am developing a J2EE application on Glassfish 3.1 which will use one external library that relies heavily on URLs. The URLs will use a custom protocol (e.g. db:123 where 123 is ID of a record in a database). I am having doubts on how to implement the URL protocol handler (and its URLConnection implementation), because this protocol handler will use EJBs to fetch data from the database.

The db protocol handler needs to be registered globally at the moment of JVM startup through -Djava.protocol.handler.pkgs flag. (I couldn't find a better way to do this in Glassfish.) Anyway, because it is registered at JVM startup, it has no knowledge of any EJBs that that it may call at the moment of opening URL streams. So what I did is create a singleton registry class to which database handlers can be registered. This registry is used by URLConnection whenever a stream is requested (it will search the registry for a database handler and use it to fetch data).

Then, an EJB will register itself as database handler in a @PostConstruct method. This way, any time a db:XXX URL is used, EJBs will be called indirectly to fetch the data.

Somehow I feel that this design is a bit dirty, but I'm very limited because of custom URL handlers. If you have any suggestions or tips that you can give me, that would be great.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文