将WAR文件部署到Liferay时未创建SQL表

时间:2009-07-27 09:23:11

标签: sql liferay portlet

我为Liferay创建了一个JSR-268 portlet,它使用服务与数据库进行交互。我可以在没有问题或错误的情况下部署portlet,但是不会创建服务定义的表!

测试portlet时,我没有收到“table not found”错误。我完全没有错误!该表不在数据库中。我在互联网上发现其他东西说我应该使用Liferay Service Builder创建的生成的“create.sql”文件,但我没有在任何地方看到该文件。

有人能帮助我吗?

4 个答案:

答案 0 :(得分:10)

是否从未创建过表格?我手动删除表时遇到了类似的问题。我认为在再次部署portlet时会再次创建它们,但它没有发生。

在研究了源代码之后,我发现Liferay在表servicecomponent中存储了有关portlet的信息,并在META-INF/tables.sql中执行(伪)SQL之前检查了两件事:

  1. build.number中的service.properties必须高于servicecomponent中存储的tables.sql
  2. servicecomponent必须与tables.sql中存储的内容不同。
  3. 只有这样才会执行servicecomponent

    实现这一目标的一种简单方法是删除{{1}}寻址portlet的所有条目。

答案 1 :(得分:2)

尝试删除servicecomponent表中的条目。并重新部署您的portlet。

delete FROM servicecomponent where buildNamespace="<your table namespace>"

答案 2 :(得分:1)

我遇到了同样的问题,以下解决方案对我有用。

<强>步骤

  1. 我已将 service.properties 中的 build.number 更改为高于存储在servicecomponent中的 build.number
  2. META-INF 文件夹中删除了所有xml文件。
  3. webapp / WEB-INF / sql 文件夹中删除了所有sql文件。
  4. 然后构建服务部署将在 service.xml 文件中创建自定义表格。

答案 3 :(得分:0)

如果您在Service.xml中的Liferay架构中定义新实体时在Liferay 6.2中使用serviceBuilder,那么任何Portlet第一次尝试访问该表时,如果它已经创建,它将被创建。不存在。

当您使用不同的架构时会出现几个问题,因为有时Liferay不会自动创建表。然后你需要创建Creation SQL语句并手动创建它,然后通过LocalServiceUtil访问它。