我是Java EE平台的新手,我正在构建一个简单的JMS应用程序。我创建了一个在ObjectMessage中发送的类。当创建消息的客户端应用程序和服务器上的MDB都需要访问同一个类文件(在ObjectMessage中组成的类)时,我的问题出现了。我目前在客户端库和EJB库中都有类文件,这是有效的。但是,我希望只有一个位置用于类文件,客户端和MDB都可以访问它。我相信我需要以某种方式打包整个应用程序,但我很难搞清楚它。
非常感谢任何帮助。
谢谢。
答案 0 :(得分:0)
通常,应用程序服务器的类加载器使用的大多数(如果不是全部)代码源(加载类的位置)都位于应用程序服务器安装中。就此而言,在MDB(或EJB)的情况下,代码源包含在EJB模块(EJB JAR文件)中或应用程序存档(EAR文件)中。在运行时,容器管理此代码源的管理位置和方式(包括它的位置),并且可能没有直接的方法来确定此位置。换句话说,在客户端应用程序的类路径中使用容器中的已部署JAR是非常困难的(假设它们位于同一台机器上)。
唯一可行的方法,我可以想到在客户端应用程序和服务器上的应用程序中使用相同的JAR,是在服务器上有一个自定义类加载器,配置为从公共共享中读取特定类罐。作为最佳实践,在尝试解析任何类之前,类加载器应始终将类加载到父类加载器。
然后,您的客户端可以通过设置适当的类路径(或使用相同的自定义类加载器)来使用相同的共享JAR。
我应该警告你,对于那些不了解Java EE应用服务器中的类加载动态的人来说,编写自定义类加载器并不容易。