【问题标题】:Getting HttpSession attribute set by first app throws ClassCastException in second app获取第一个应用程序设置的 HttpSession 属性会在第二个应用程序中引发 ClassCastException
【发布时间】:2015-12-21 18:12:10
【问题描述】:
我在同一台服务器上运行了两个不同的应用程序。
第一个应用程序将对象设置为HttpSession。当我从第二个应用程序中获取此对象时,它会抛出 ClassCastException。
该类在jar 文件中定义,两个应用程序都可以访问我在HttpSession 中设置的类。
【问题讨论】:
标签:
jakarta-ee
cluster-computing
classcastexception
httpsession
【解决方案1】:
我假设 ClassCastException 是由于存储在 HttpSession 中的对象的类是从两个不同的类加载器加载的情况造成的。
如果您的第一个应用程序创建存储在 HttpSession 中的对象,则使用第一个应用程序的类加载器加载对象的类。
如果您的第二个应用程序尝试从 HttpSession 访问对象,则第二个应用程序还必须加载该对象的类。但是第二个应用程序使用自己的类加载器,它与第一个应用程序的类加载器不同。
第二个应用程序中的转换导致 ClassCastException,因为存储在 HttpSession 中的对象的类由另一个类加载器加载,而不是转换结果的对象的类。
您必须将 jar 文件与存储在 HttpSession 中的对象的类放在两个应用程序相同的类加载器中。您可以实现的方式取决于您使用的应用程序服务器。检查您的应用服务器的文档,尤其是您的应用服务器如何组织其类加载器。
希望有帮助