在另一个Liferay插件中使用portlet的服务

在另一个Liferay插件中使用portlet的服务,liferay,portlet,spring-portlet-mvc,Liferay,Portlet,Spring Portlet Mvc,我们正在尝试在另一个portlet(portlet B)中使用portlet(portlet a)的服务。我们已将服务(Portlet A)的jar文件放在\tomcat-7.0.27\webapps\ROOT\WEB-INF\lib中,并将此jar包含在另一个Portlet(Portlet B)的display plugin packages.xml中 我们正在使用外部数据库,即我们在portlet-spring.xml中进行了更改 如果我部署包含实际服务的portlet(portleta)并

我们正在尝试在另一个portlet(portlet B)中使用portlet(portlet a)的服务。我们已将服务(Portlet A)的jar文件放在
\tomcat-7.0.27\webapps\ROOT\WEB-INF\lib
中,并将此jar包含在另一个Portlet(Portlet B)的display plugin packages.xml中

我们正在使用外部数据库,即我们在portlet-spring.xml中进行了更改

如果我部署包含实际服务的portlet(portleta)并调用一些服务方法,那么它被称为fine&它获取数据。如果我们在另一个portlet(portlet B)中编写相同的方法,那么它将获取数据。 但是,当我们尝试在另一个portlet(portlet B)中编写一个在实际服务portlet(portlet a)中没有调用的方法时,就会出现问题,然后数据就不会被提取。它总是带来一片空白

有人能提出原因吗

我们不能把所有的portlet放在同一个罐子里,因为没有一个portlet是非常大的(大约35个)


或者,除了将jar文件放在lib目录中,还有其他更好的解决方案吗?

幸运儿评论道,一个选择是将您的*-service.jar文件放在全局类路径中,
tomcat/lib/ext

另一个选项是显式命名依赖项:编辑插件的
WEB-INF/liferay插件包。属性
,并将依赖项添加到此插件所需的另一个插件:

required-deployment-contexts=my-other-portlet,my-custom-hook

这将确保包含此声明的插件仅在依赖项已部署后部署,并且它还将把它们的服务jar复制到“自身”中,例如
my other portlet service.jar
my custom hook service.jar
将自动在您自己的Web应用程序中结束,准备好使用。

正如Lucky Boy所说,一个选择是将您的*-service.jar文件放在全局类路径中,
tomcat/lib/ext

另一个选项是显式命名依赖项:编辑插件的
WEB-INF/liferay插件包。属性
,并将依赖项添加到此插件所需的另一个插件:

required-deployment-contexts=my-other-portlet,my-custom-hook

这将确保包含此声明的插件仅在依赖项已部署后部署,并且它还将把它们的服务jar复制到“自身”中,例如
my other portlet service.jar
my custom hook service.jar
将自动在您自己的Web应用程序中结束,准备好使用。

我想您的JAR应该在“\tomcat-7.0.27\lib\ext”目录下。我想您的JAR应该在“\tomcat-7.0.27\lib\ext”目录下亲爱的Olaf Kock,我已经尝试了上述两种方法。但有了这些,我面临着另一个问题。我无法在Portlet B中找到XXXXImpl类。我需要创建一个对象,如XXXX XXXX=new XXXXImpl()。有没有同样的建议?没有,对不起。*Impl类不是服务接口的一部分-ServiceBuilder让它们最终位于插件的WEB-INF/src文件夹中,该文件夹不是*service.jar的一部分。这是设计的,您不应该假设您有权访问这些类。您可以将对象创建委托给您的服务类,只需让您的服务返回一个virgine XXXImpl对象(它很可能最终作为依赖项目中的XXXWrapper。完成了:-)XXXX XXXX=xxxxxxLocalServiceUtil.createXXXXX(-1或0)这不会创建数据库条目,但会返回一个空实例,这与new XXXXImpl()相当。如果您有一个具有多个主键的表,则创建一个xxxxpk对象,并将其传递给XXXXLocalServiceUtil.createXXXXX的构造函数。非常感谢……亲爱的奥拉夫·科克,我已经尝试了上述两种方法。但有了这些,我面临着另一个问题。我无法在Portlet B中找到XXXXImpl类。我需要创建一个对象,如XXXX XXXX=new XXXXImpl()。有没有同样的建议?没有,对不起。*Impl类不是服务接口的一部分-ServiceBuilder让它们最终位于插件的WEB-INF/src文件夹中,该文件夹不是*service.jar的一部分。这是设计的,您不应该假设您有权访问这些类。您可以将对象创建委托给您的服务类,只需让您的服务返回一个virgine XXXImpl对象(它很可能最终作为依赖项目中的XXXWrapper。完成了:-)XXXX XXXX=xxxxxxLocalServiceUtil.createXXXXX(-1或0)这不会创建数据库条目,但会返回一个空实例,这与new XXXXImpl()相当。如果您有一个具有多个主键的表,则创建一个xxxxpk对象,并将其传递给XXXXLocalServiceUtil.createXXXXX的构造函数。谢谢。。。