在liferay中跨Portlet发送自定义对象

在liferay中跨Portlet发送自定义对象,liferay,classloader,portlet,liferay-6,Liferay,Classloader,Portlet,Liferay 6,我在尝试在liferay中的Portlet之间发送共享自定义对象时遇到了严重问题。我有一个带有servlet过滤器的钩子插件,它加载MyCustomClass类型的对象,并将其作为参数插入到请求对象中 当我尝试在portlet的render()中读取该对象时,我得到一个ClassCastException,尽管我将该对象强制转换为同一个类 我知道liferay插件有不同的上下文,在将对象加载到bean和portlet中之前,我已经尝试过更改类加载器,如下所示: ClassLoader porta

我在尝试在liferay中的Portlet之间发送共享自定义对象时遇到了严重问题。我有一个带有servlet过滤器的钩子插件,它加载MyCustomClass类型的对象,并将其作为参数插入到请求对象中

当我尝试在portlet的render()中读取该对象时,我得到一个ClassCastException,尽管我将该对象强制转换为同一个类

我知道liferay插件有不同的上下文,在将对象加载到bean和portlet中之前,我已经尝试过更改类加载器,如下所示:

ClassLoader portalcl = PortalClassLoaderUtil.getClassLoader();
ClassLoader currentcl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(portalcl);

//do my stuff

Thread.currentThread().setContextClassLoader(currentcl);
但是,它并没有解决问题,我发现解决问题的唯一方法是将对象序列化为json字符串,并在需要时反序列化它

这不是有点蹩脚吗?有人知道更好的解决方案吗


关于,DS

听起来您看到的主要问题是,两个不同的类加载器正在加载该类,这在技术上使它们成为不同的类(这似乎是您已经确定的)


我很少使用LifeRay,但这也是我在其他平台上看到的一个问题。我们使用WebSphere并通过将公共MyCustomClass放入服务器类路径上的共享库中解决了这个问题。这样,服务器将加载该类,并通过服务器的单个类加载器使该类对服务器上的所有应用程序可用。如果让每个应用程序加载该类,则会一直看到此异常

听起来你看到的主要问题是,两个不同的类加载器正在加载这个类,这在技术上使它们成为不同的类(看起来你已经确定了)


我很少使用LifeRay,但这也是我在其他平台上看到的一个问题。我们使用WebSphere并通过将公共MyCustomClass放入服务器类路径上的共享库中解决了这个问题。这样,服务器将加载该类,并通过服务器的单个类加载器使该类对服务器上的所有应用程序可用。如果让每个应用程序加载该类,则会一直看到此异常

嗯,我想你是对的,这似乎是最合法的方法,但它使我们的系统管理员的部署过程有点复杂,因为我们仍处于开发的早期阶段,并且对这些类进行了很多更改。因此,我们最终使用json将对象从一个portlet发送到另一个portlet,直到我们达到更稳定的状态,或者直到liferay修复它。谢谢你的反馈!这个线程有点旧,但我们最终将所有bean移动到一个jar中,并按照您的建议将该jar放在tomcat的lib目录中。好吧,我想您是对的,这似乎是最合法的方法,但它使系统管理员的部署过程稍微复杂了一点,因为我们仍处于开发的早期阶段,并且改变了很多课程。因此,我们最终使用json将对象从一个portlet发送到另一个portlet,直到我们达到更稳定的状态,或者直到liferay修复它。谢谢你的反馈!这个线程有点旧,但我们最终将所有bean移动到一个jar中,并按照您的建议将该jar放在tomcat的lib目录中。