2017-09-28 11 views
1

IBM Portal APIを使用してWebsphere Portal Serverの一部のページを開発していますが、私の主要ポータルにネストされている仮想ポータルのコンテキストで作業したいと考えています。私はすでにIBMからドキュメントを読んでいますが、それがどのように機能するのか分かりませんので、私は皆さんに尋ねることにします。あなたの誰もがすでにそれをしましたか? これは私が私の仮想ポータルからContentNodeを取得しようとしている方法です:Websphere Portal Server仮想ポータルIBMポータルAPI

private void createPortalContent(HttpServletRequest request, HttpServletResponse response) throws InterruptedException, ModelException{ 
    Context ctx = null; 
    try { 
     ctx = new InitialContext(); 

     portletModelHome = (PortletModelHome) ctx.lookup(PortletModelHome.JNDI_NAME); 
     if(portletModelHome == null){ 
      Thread.sleep(5000); 
      portletModelHome = (PortletModelHome) ctx.lookup(PortletModelHome.JNDI_NAME); 
     } 

     contentModelHome = (ContentModelHome) ctx.lookup(ContentModelHome.JNDI_NAME); 
     if(contentModelHome == null){ 
      Thread.sleep(5000); 
      contentModelHome = (ContentModelHome) ctx.lookup(ContentModelHome.JNDI_NAME); 
     } 

     contentModelControllerHome = (ContentModelControllerHome) ctx.lookup(ContentModelControllerHome.JNDI_NAME); 
     if(contentModelControllerHome == null){ 
      Thread.sleep(5000); 
      contentModelControllerHome = (ContentModelControllerHome) ctx.lookup(ContentModelControllerHome.JNDI_NAME); 
     } 

     contentMappingInfoHome = (ContentMappingInfoHome) ctx.lookup(ContentMappingInfoHome.JNDI_NAME); 
     if(contentMappingInfoHome == null){ 
      Thread.sleep(5000); 
      contentMappingInfoHome = (ContentMappingInfoHome) ctx.lookup(ContentMappingInfoHome.JNDI_NAME); 
     } 

     virtualPortalList = (VirtualPortalListHome) ctx.lookup(VirtualPortalListHome.VIRTUAL_PORTAL_LIST_JNDI_NAME); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 

    ContentModelController contentModelController = getController(request, response); 
    //LOGGER.info("### CONTENT MODEL CONTROLLER: " + contentModelController.getLocator() + " " + contentModelController.getRoot().toString()); 
    ContentNode contentNode = (ContentNode) contentModelController.getLocator().findByUniqueName("ro.ram.comunicate"); 
    //LOGGER.info("### CONTENT NODE: " + contentNode); 
    // LOGGER.info("#### VIRTUAL PORTAL LIST: " + virtualPortalList); 

    //VirtualPortal virtualPortal = virtualPortalList.getVirtualPortalListProvider().getVirtualPortalList().getLocator().findByUniqueName(""); 
    // LOGGER.info("### VIRTUAL PORTAL: " + virtualPortal.getTitle(Locale.ENGLISH)); 
    //Iterator<VirtualPortal> it=virtualPortalList.getVirtualPortalListProvider().getVirtualPortalList().iterator(); 
    // while(it.hasNext()){ 
    //  LOGGER.info("### VIRTUAL PORTAL LIST ITERATOR: " + it.next().getDescription(Locale.ENGLISH) + " " + " " + it.next().getTitle(Locale.ENGLISH)); 
    //  it.next(); 
    //} 
} 

だから悪い考えです、あなたはページのOBJECTIDを探す必要があり、固有の名前を探して、

+0

使用しているPortal APIは何ですか? – Carlos

+0

com.ibm.portal。*のようなパッケージを含むポータルAPIを使用しています。 jarはwp.base.jar、wp.model.api.jarなどです。 –

+1

モデルapiはかなり大きいですが、ポートレットのスコープ内からコードを実行している場合は、スコープが既に設定されているはずです。モデルapiを使用して、現在のVPにスコープされているコンテンツモデルを参照しています。今ではVPの範囲外にあるサーブレットでそれを実行しようとしている場合、リンクなどを作成しようとすると、オブジェクトIDなどを使用してページを探す必要があります。 ポートレットモデルがvpsを超えているように、モデルの一部だけがVPスコープです。私たちはあなたが何をしたいかについていくつかの詳細を必要としています – Crosstalk22

答えて

1

、解決策は、(これは私のためだった)かもしれません:VirtualPortalScopedActionを実装するクラスを作成するIBM WCMのAPIを使用して

  1. 。このクラスでは、runメソッドをオーバーライドする必要があります。このインタフェースを実装することは必要です。
  2. runメソッドでは、すべての計算を行います。ここでは、IBM Portal APIおよびSPIによって公開されているオブジェクト(ContentModelController、ContentModelHome、ContentModelControllerHome)をインスタンス化する必要があります。これらはすべて、IBM Websphere Portalで操作を行うために必要です。
  3. VirtualPortalScopedActionを実装するクラスでは、HttpServletRequestとHttpServletResponseを渡す必要があります。これは、すべてのオブジェクトをインスタンス化すると要求と応答が使用されるためです。そのためには、そのクラスに2つの属性を宣言し、setterを使用して要求と応答のインスタンスを設定するのは明らかです。

あなたのすべて:私はこれがあなたを助けてくれることを願っています!

+0

これは私の一日を保存しました。しかし、このソリューションは完全に動作します – fishbone

+0

私はこの問題に直面したとき、私はこのアイデアが私を救うまで約1週間失ってしまったことを知っています:) –

1

をありがとうポータルの範囲外で作業しているときインフォセンターからのコメント 「仮想ポータルの概念は、ユーザーが操作する仮想ポータルに一部のモデルを適用します。現時点では、このスコープの概念は、コンテンツモデル、ナビゲーションモデル、およびナビゲーション選択モデルに適用されます。そのリソースをユーザーが運営する仮想ポータルに限定する」 私はこのコードをポートレットのリソース要求に移動し、それを使って更新を行い、スコープを設定することをお勧めします。このパスを続行したい場合は、Identificationパッケージを使用してobjectidの文字列表現を実際のオブジェクトに変換した後で、コードがuniquenameを探すのではなく、実際のオブジェクトIDを探します。そのような何かをしたいすべての人のために

+0

私はあなたを理解していないと思うが、私の問題は、仮想ポータルのコンテキストでアプリケーション/サーブレットを実行できるということです。私は仮想ポータルに置かれたオブジェクトを見ることはできませんが、メインポータルのオブジェクトだけを見ることができます。より正確に言えば、IBM WCM APIを使用して、WCM for Virtual Portalにコンテンツ項目を作成しましたが、VirtualPortalScopedActionを実装してrunメソッドをオーバーライドして、そのポータルのコンテキストを使用しました。今、IBM APIとIBM SPIは私にそれを提供していません。どうも! –

関連する問題