新しいバックエンドの統合

新しいバックエンドの統合

ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。

プロトタイプのリファクタリング

手順4/6

概念実証として機能するプロトタイプから開始することを推奨しますが、最終的にはそのプロトタイプを実際のアプリケーションに変換する必要があります。 これまでで、それを行うための準備はすべて完了しました。今度は、プロトタイプバックエンドを、Service Builderで作成したデータベース駆動型の実際のバックエンドに置き換えます。

プロトタイプでは、アプリケーションのモデルをマニュアルで作成しました。 Service Builderは新しいものを生成したため、最初に行うことはそれを削除することです。

  1. guestbook-webモジュールでcom.liferay.docs.guestbook.modelパッケージを見つけます。

  2. それを削除してください。 プロジェクトにエラーが表示されますが、それはまだモデルを交換していないためです。

これで、いくつかの依存関係管理を行うことができます。 生成されたサービスにWebモジュールがアクセスするには、APIおよびサービスモジュールを認識させる必要があります。 次にGuestbookPortletaddEntryメソッドをアップデートして、新しいサービスを使用できます。

  1. まず、guestbook-webbuild.gradleファイルを開き、これらの依存関係を追加します。

    compileOnly project(":modules:guestbook:guestbook-api")
    compileOnly project(":modules:guestbook:guestbook-service")
    
  2. guestbook-webプロジェクトを右クリックして、GradleRefresh Gradle Projectを選択します。

  3. ここで、必要なService Builderサービスにreferencesを追加する必要があります。 これを行うには、セッターメソッドで@Referenceアノテーションを付けてクラス変数として追加します。 GuestbookPortletを開き、これらの参照をファイルの下部に追加します。

        @Reference(unbind = "-")
        protected void setEntryService(EntryLocalService entryLocalService) {
            _entryLocalService = entryLocalService;
        }
    
        @Reference(unbind = "-")
        protected void setGuestbookService(GuestbookLocalService guestbookLocalService) {
            _guestbookLocalService = guestbookLocalService;
        }
    
        private EntryLocalService _entryLocalService;
        private GuestbookLocalService _guestbookLocalService;
    

    この方法でクラス変数を追加するには、Liferayのコードスタイルでなければならないことに注意してください。 セッターの@Referenceアノテーションにより、LiferayのOSGiコンテナーは生成されたサービスへ参照を挿入して、それらを使用できるようにします。 unbindパラメーターは、これらのサービスのバインドを解除する方法がないことをコンテナーに通知します。参照が不要になった場合、ガベージコレクション中に参照がクラスと共に消滅する可能性があります。

  4. addEntryメソッドを変更して、これらのサービス参照を使用できるようになりました。

    public void addEntry(ActionRequest request, ActionResponse response)
                throws PortalException {
    
            ServiceContext serviceContext = ServiceContextFactory.getInstance(
                Entry.class.getName(), request);
    
            String userName = ParamUtil.getString(request, "name");
            String email = ParamUtil.getString(request, "email");
            String message = ParamUtil.getString(request, "message");
            long guestbookId = ParamUtil.getLong(request, "guestbookId");
            long entryId = ParamUtil.getLong(request, "entryId");
    
        if (entryId > 0) {
    
            try {
    
                _entryLocalService.updateEntry(
                    serviceContext.getUserId(), guestbookId, entryId, userName,
                    email, message, serviceContext);
    
                response.setRenderParameter(
                    "guestbookId", Long.toString(guestbookId));
    
            }
            catch (Exception e) {
                System.out.println(e);
    
                PortalUtil.copyRequestParameters(request, response);
    
                response.setRenderParameter(
                    "mvcPath", "/guestbookwebportlet/edit_entry.jsp");
            }
    
        }
        else {
    
            try {
                _entryLocalService.addEntry(
                    serviceContext.getUserId(), guestbookId, userName, email,
                    message, serviceContext);
    
                SessionMessages.add(request, "entryAdded");
    
                response.setRenderParameter(
                    "guestbookId", Long.toString(guestbookId));
    
            }
            catch (Exception e) {
                SessionErrors.add(request, e.getClass().getName());
    
                PortalUtil.copyRequestParameters(request, response);
    
                response.setRenderParameter(
                    "mvcPath", "/guestbookwebportlet/edit_entry.jsp");
            }
        }
    }
    

    このaddEntryメソッドは、ユーザーがJSPで送信する名前、メッセージ、および電子メールフィールドを取得し、それらをサービスに渡してエントリデータとして保存します。 if-elseロジックは、既存のentryIdがあるかどうかをチェックします。 もし存在する場合はupdateサービスメソッドが呼び出され、存在しない場合はaddサービスメソッドが呼び出されます どちらの場合も、ゲストブックIDを使用してレンダーパラメーターを設定し、アプリケーションがゲストブックのエントリを追加した後にゲストブックのエントリを表示できるようにします。 これはすべて、try...catchステートメントで行われます。

  5. 次に、以前は持っていなかったdeleteEntryを追加します。

    public void deleteEntry(ActionRequest request, ActionResponse response) throws PortalException {
            long entryId = ParamUtil.getLong(request, "entryId");
            long guestbookId = ParamUtil.getLong(request, "guestbookId");
    
            ServiceContext serviceContext = ServiceContextFactory.getInstance(
                Entry.class.getName(), request);
    
            try {
    
                response.setRenderParameter(
                    "guestbookId", Long.toString(guestbookId));
    
                _entryLocalService.deleteEntry(entryId, serviceContext);
            }
    
            catch (Exception e) {
                Logger.getLogger(GuestbookPortlet.class.getName()).log(
                    Level.SEVERE, null, e);
            }
    }
    

    このメソッドは、(リクエストからのIDを使用して)エントリオブジェクトを取得し、サービスを呼び出して削除します。

  6. 次に、renderメソッドを置き換える必要があります。

    @Override
    public void render(RenderRequest renderRequest, RenderResponse renderResponse)
            throws IOException, PortletException {
    
            try {
                ServiceContext serviceContext = ServiceContextFactory.getInstance(
                    Guestbook.class.getName(), renderRequest);
    
                long groupId = serviceContext.getScopeGroupId();
    
                long guestbookId = ParamUtil.getLong(renderRequest, "guestbookId");
    
                List<Guestbook> guestbooks = _guestbookLocalService.getGuestbooks(
                    groupId);
    
                if (guestbooks.isEmpty()) {
                    Guestbook guestbook = _guestbookLocalService.addGuestbook(
                        serviceContext.getUserId(), "Main", serviceContext);
    
                    guestbookId = guestbook.getGuestbookId();
                }
    
                if (guestbookId == 0) {
                    guestbookId = guestbooks.get(0).getGuestbookId();
                }
    
                renderRequest.setAttribute("guestbookId", guestbookId);
            }
            catch (Exception e) {
                throw new PortletException(e);
            }
    
            super.render(renderRequest, renderResponse);
    }
    

    この新しいrenderメソッドは、現在のサイトのゲストブックをチェックします。 もし存在しない場合は作成します。 いずれにしても、最初のゲストブックを取得して、ビューレイヤーでそのエントリを表示できるようにします。

  7. parseEntriesメソッドを削除します。 それはプロトタイプアプリケーションの残りです。

  8. Ctrl-Shift-O を押して、インポートを整理します。

ここでは、サービスを使用するためにコントローラーをアップデートしました。 次は、ビューについて見ていきます。

« ポートレットキーの作成ビューをアップデートする »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています