我在使用代码库中的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,所以非常感谢任何评论。
答案 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文件加载。检查您是否正确引用了资源。