Liferay 7.0 修改service.xml後如何讓portal重新執行tables.sql

來源:互聯網
上載者:User

標籤:action   mysql   項目部署   業務   哪些   ast   ace   建立   階段   

一、問題 如果你開發了service-builder類型的項目(我肯定你一定會開發這種類型的項目),其中所使用的業務實體的資料庫表結構就在service.xml中配置,然後執行build-service產生相關dao層的代碼(不清楚dao的概念的參考這篇文章),然後部署項目,portal就會自動執行建立資料庫表的sql語句。在62開發中,修改service.xml後,執行build-service,部署項目,portal會根據表結構的變化幫你自動修改資料裡面的表,並且儘可能保留資料(我試過,增加欄位沒問題,其他忘了)。    以上是一些背景知識,但是在dxp開發中,根據所謂的資料庫保護機制,即使我們在service.xml中修改了表結構,重新部署項目時,portal不會幫我們修改資料庫表結構,即使在開發階段也是如此。如果你想讓portal修改表結構,你就要按照這篇文章的方式來做,即:每次修改表結構,就要寫對應的資料庫升級語句,由於過程比較複雜,我一直沒按照文章操作,看著就頭暈,不過是為了修改資料庫表結構,為何要我寫額外的代碼?於是我研究了lifeay執行tables.sql的過程,發現了強制讓portal執行tables.sql的方法。 二 、解決方案    首先我只是說出方法,讓著急使用的人直接使用,然後我再分享研究過程。    前提:portal是串連mysql啟動的    方法:    1. 修改service.xml,運行build-service    2. 串連mysql資料庫,找到servicecomponent表,刪除裡面namespace的值和你的service.xml中namespace值相同的所有資料    3. 同時刪除service.xml對對應的已經建立的所有表    4. 在Server Administrator裡面執行Verify database tables of all plugins    5. 部署項目,portal會重新執行tables.sql,表就重建立立了    (補充:部署項目後,看到輸出了"Running   xxxx  SQL scripts",但是資料庫中還是沒有表,這時再次執行Verify database tables of all plugins就可以在資料庫看到表了) 三、研究過程接下來我分享一下研究過程:    我們可能注意到了,部署一個新service-builder類型的項目時,控制台會輸出一個語句 "Running   xxxx  SQL scripts",在portal源碼中搜尋“SQL scripts”,找到了在ServiceComponentLocalServiceImpl.java類裡面,如果是已經部署過的項目,再次部署,只會看到“Upgrading xxxx database to build number ?”之類的資訊,說明資料庫中一定有表記錄著哪些項目部署過,buildnumber是多少,於是我們找到了servicecomponent表,查看資料,正好有我們用過的namespace,刪除這些資料,重新部署項目,發現並不能執行tables.sql檔案,我們猜測可能記憶體中存在某些緩衝記錄這些資料,於是執行了Verify database tables of all plugins,再次部署,終於能執行tables.sql了。ServiceComponentLocalServiceImpl.java是比較核心的類,如果仔細研究這個類的代碼會有其他收穫,這裡只列舉一個例子:  大家可以看到這個類其實支援升級資料庫的操作,只要之前的tablesql和新的tablesql不一致時,會執行升級資料庫操作,按照我們的思路,我們兩次部署的tables.sql是不一致的,為什麼不執行這段代碼呢?調試發現tablessql變數始終為空白字串(不是null,是值為“”的字串),所以永遠不會執行升級資料庫操作,servicecomponent表的CDATA欄位也能看出,dxp不會記錄tables.sql語句。至於為什麼執行Verify database tables of all plugins,才能重新執行,我沒有再往下研究了,參考EditServerMVCActionCommand.java中的verifyPluginTables()方法。 分析到此結束,我的分析可能不全面,也可能有錯誤,請大家批評指正哈。

Liferay 7.0 修改service.xml後如何讓portal重新執行tables.sql

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.