この記事は、Liferay DXPでExtプラグインを使用するためのサポートされたユースケースを文書化したもので、Liferay Digital Enterpriseのコアクラス(例: portal-impl, portal-kernel, etc)をSpringを使って拡張できるようにします。 コアクラスを区別するために、 Finding Core Liferay Portal Artifacts のセクションを参照することができます。 Extプラグインを作成する前に、一般的な Customization with Ext Plugins チュートリアルを確認したことを確認してください。
解決策
例として、 portal-impl.jarに存在する PortalImpl コアクラスを継承するサンプル Ext プラグインを作成します。 サーバーのノード名を返す PortalImpl.getComputerName() メソッドを Spring Bean 経由でオーバーライドすることになります。 Extプラグインはこのメソッドをオーバーライドして、サーバーから返されるノード名を変更します。
-
Plugins SDK の
/extフォルダに移動して、以下のコマンドを実行します:create.[bat|sh] portal-impl-extend-spring "PortalImpl Extend Spring"Extプラグインが生成され、Plugins SDKの
/extフォルダに、割り当てた名前の後に-extが付いた状態で存在します(例:portal-impl-extend-spring-ext)。 -
Liferay DXPのインストールでサーバーのノード名を表示するのは、デフォルトでは
falseに設定されています。 このプロパティを有効にする必要があります。 これを行うには、Liferayバンドルのルートフォルダに移動して、portal-ext.propertiesファイルを作成します。 そのファイルに、以下のプロパティを挿入します:web.server.display.node=trueこれで、Liferayバンドルを再起動すると、サーバーのノード名が表示されるようになりました。
-
/ext-impl/srcフォルダに、新しいクラスを配置したいパッケージ名を表すフォルダ構造を作成します(例:com/liferay/portal/util)。 次に、新しいJavaクラスを作成します:package com.liferay.portal.util; public class SamplePortalImpl extends PortalImpl {@Override public String getComputerName() { return "SAMPLE_EXT_INSTALLED_" + super.getComputerName(); }}
拡張クラスで定義されたメソッドは、 PortalImpl.getComputerName() メソッドをオーバーライドします。 "SAMPLE_EXT_INSTALLED_" Stringの前に、サーバーのノード名を付けるようにしました。
-
Extプラグインの
/ext-impl/srcフォルダに、META-INF/ext-spring.xmlファイルを作成します。 このファイルに、次のコードを挿入します:<?xml version="1.0"?> <beans default-destroy-method="destroy" default-init-method="afterPropertiesSet" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" ><bean class="com.liferay.portal.util.SamplePortalImpl" id="com.liferay.portal.util.PortalImpl" /></beans>
コアサービスクラスを修正する予定なので、Spring beanを介してその拡張クラスを注入することができます。 これにより、新しいクラスが確実に認識されるようになります。 拡張クラスの完全定義クラス名(例: com.liferay.portal.util.SamplePortalImpl)をBeanタグの class 属性に、完全定義オリジナルクラス名(例: com.liferay.portal.util.PortalImpl)をBeanタグの id 属性に割り当ててください。
Extプラグインがデプロイされると、新しいサービス(例えば、 SamplePortalImpl)は、コア PortalImpl クラスを拡張します。
Liferay Digital Enterpriseのコアクラスを拡張するExtプラグインを作成しました! Deploy the Plugin セクションの説明に従って、サーバーにプラグインを導入してください。