2013-02-27 86 views
1

我需要一種方法來自動填充Liferay中部署的portlet的服務構建器創建的表。我怎麼能做到這一點?我正在考慮啓動掛鉤,但我無法訪問特定portlet的服務。那麼有沒有辦法通過Portlet本身來填充它?將portlet部署到liferay後自動填充表

回答

1

如果您設法不使變更具有破壞性(例如注意不要在每次啓動時填充),您可以在StartupAction(或啓動掛鉤)中執行此操作。您可以將此鉤子添加到您的portlet項目 - 這工作得很好。或者,您可以在liferay-plugin-package.properties中聲明一個依賴於portlet的鉤子(反之亦然) - 這將使服務可用。但是爲了這個目的,我只是將所有內容都包裝在一個portlet插件中。

如果您可能在那裏發生破壞性更改,則升級操作將是更安全的選擇:保證只運行一次。

例子可見老sevencogs樣品(讓我知道如果你需要三分球,然後我就弄出來了)

更新:要在portlet項目這樣的鉤,添加WEB-INF用下面的內容/liferay-hook.xml(或使用的Liferay IDE的嚮導只是一個鉤子添加到項目)

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.1.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_1_0.dtd"> 

<hook> 
    <portal-properties>portal.properties</portal-properties> 
</hook> 

此外,創建WEB-INF/src目錄/ portal.properties使用下列選項

application.startup.events=com.example.MyStartupAction 

當然,創建提到的啓動動作,擴展com.liferay.portal.kernel.events.SimpleAction

+0

我在portlet中添加一個portlet.properties文件,並添加'application.startup.events = com. startup.StartupTest'它,並創建了類擴展'SimpleAction'但它不運行。我們不能在一個portlet中實現這個嗎? – saurjk 2013-02-27 11:09:43

+0

已更新。你可能沒有liferay-hook.xml – 2013-02-27 11:22:21

-1

嘗試從servicecomponent表中刪除一個條目。並重新部署您的portlet。

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