Quartz RMI Remote类加载如何工作?

时间:2014-12-01 03:00:43

标签: java jar quartz-scheduler rmi codebase

我在使用代码库中的http网址时使用quartz-2.2.1,并使用代码库和安全管理器将其作为第一基础。

我有两个关于RMI类加载的问题:

1)可以通过http RMI请求罐子吗?我在传递给客户端的代码库URL中指定了一个包含完整应用程序的jar。即使罐子被要求并且'#34;服务"通过http服务器,服务器继续接收对包含在jar中的库中的类的请求。

有什么想法在这里发生了什么?我希望服务器将jar添加到其类路径中,但似乎并非如此。

我没有注意到RMIClassLoader中除了类之外的任何其他方法。

2)RMI可以请求除类之外的对象吗?我终于想出了如何从jar中提供类(以解决上述问题),但远程作业未能尝试加载" .txt"资源。它包含在应用程序jar中,但http服务器永远不会看到请求。

我也想知道这些问题对于RMI是一般的还是特定于Quartz的。

由于这是我第一次涉足RMI,所以非常感谢任何评论。

1 个答案:

答案 0 :(得分:0)

  

可以通过http RMI请求jar吗?

  

我在传递给客户端的代码库URL中指定了一个包含完整应用程序的jar。

这是正常的。

  

即使请求并由http服务器“提供”jar,服务器仍继续接收jar中包含的库中包含的类的请求。

啊哈。 “包含在jar中的库”可能无效。您应该通过其他代码库URL单独提供它们。 java.rmi.server.codebase属性是网址的列表,而不仅仅是一个。

  

有什么想法在这里发生了什么?我希望服务器将jar添加到其类路径中,但似乎并非如此。

它最终会在其类加载器集中添加URLClassLoader

  

我没有注意到RMIClassLoader中除了类之外的任何其他方法。

您需要注意RMIClassLoader实际上不是ClassLoader。这是一个奇怪的野兽,但它的类加载最终被委托给URLClassLoader.

  

2)RMI可以请求除类之外的对象吗?

代码库功能适用于您可以通过类加载器检索的任何内容,包括通过getResource()和朋友获取的资源。

  

我终于想出了如何从jar中提供类(以解决上述问题),但远程作业无法尝试加载“.txt”资源。它包含在应用程序jar中,但http服务器永远不会看到请求。

不会有这样的要求。它应该直接从已经下载的.jar文件加载。检查您是否正确引用了资源。