0

ポータル アプリケーションで既に正常に動作している WCM (Web Content Management) ライブラリにアクセスしようとしています。私の要件は、WAS (Webspher Application Server) にデプロイされたエンタープライズ アプリケーションから同じライブラリにアクセスすることです。私のローカルホストでは問題なく動作しますが、開発サーバーにデプロイすると以下のエラーが発生します-

スタック トレース com.ibm.websphere.servlet.error.ServletErrorReport: java.lang.IllegalStateException: WCM リポジトリーが com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:152) の WCM_API に登録されていませんcom.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77) com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908) com.ibm.ws.webcontainer. com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) の servlet.ServletWrapper.handleRequest(ServletWrapper.java:934) com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl. java:179) com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121) で、com.ibm.ws.jsp で。com.bowstreet.webapp.engine.pageprocessor.JSPPageProcessor.requestJSPPage(JSPPageProcessor. java:321) com.bowstreet.webapp.engine.pageprocessor.JSPPageProcessor.processPage(JSPPageProcessor.java:207) で com.bowstreet.webapp.engine.actions.PageAction.callAction(PageAction.java:101) で com.bowstreet .webapp.engine.WebAppAccessImpl.processPage(WebAppAccessImpl.java:228)JSPPageProcessor.requestJSPPage(JSPPageProcessor.java:321) com.bowstreet.webapp.engine.pageprocessor.JSPPageProcessor.processPage(JSPPageProcessor.java:207) com.bowstreet.webapp.engine.actions.PageAction.callAction(PageAction.java: 101) com.bowstreet.webapp.engine.WebAppAccessImpl.processPage (WebAppAccessImpl.java:228) でJSPPageProcessor.requestJSPPage(JSPPageProcessor.java:321) com.bowstreet.webapp.engine.pageprocessor.JSPPageProcessor.processPage(JSPPageProcessor.java:207) com.bowstreet.webapp.engine.actions.PageAction.callAction(PageAction.java: 101) com.bowstreet.webapp.engine.WebAppAccessImpl.processPage (WebAppAccessImpl.java:228) で

IBM Websphere Application および Portal Server 6.1 を使用しています。以下はコードスニペットです-

// retrieve repository
   Repository repository = WCM_API.getRepository();  
   try{      
    // get the workspace for current user
    Workspace workspace = repository.getSystemWorkspace();
    workspace.login();
    // set the library
    workspace.setCurrentDocumentLibrary(workspace.getDocumentLibrary("MyLibrary"));
    // find content by name
     DocumentIdIterator contentIterator = workspace.findByName(DocumentTypes.Content,"MyKey");
      System.out.println("key:: contentIterator="+contentIterator);
     //find all contents
     if (contentIterator.hasNext()){ 
       System.out.println("key:: inside if =");
       Content content=(Content)workspace.getById(contentIterator.nextId(),true);
       System.out.println("getWCMURL:: Content="+content.getName());
       RichTextComponent txtComp= (RichTextComponent)content.getComponentByReference("Text");
       if(txtComp.getRichText()!=null){
        cntmsg = txtComp.getRichText();
       }       
   }   
  }  
  catch(Exception e){
   System.out.println("getWCMURL:: Error:"+e.getMessage());
  }

助けてください...

4

2 に答える 2

0

これを書いている時点で、IBM Web Content Management v6.1 はサポートされていないため (サポート終了は 2014 年 9 月)、既にアップグレードしているはずです。IBM は、一度に 3 つのバージョン (現行 + 2 つ前) のみをサポートしています。

ただし、Web Content Management サーブレットが開始する前にアプリケーションが開始すると、このエラーが発生することがあります。起動時の重み付けを 30 より高く設定する必要があります。http://www-01.ibm.com/support/docview.wss?uid=swg21656128

ソース コード全体と完全なスタック トレースにアクセスしないと、このコードがいつトリガーされているかを確認するのが少し難しくなります。エラーのもう 1 つの原因は、コードがデプロイされたサーバーである可能性があります。Application Server ではなく、Portal Server に配備する必要があります。

于 2015-01-29T02:18:56.080 に答える
0

開発サーバーに仮想ポータルはありますか?

開発サーバーに仮想ポータルがある場合は、仮想ポータル コンテキストを取得し、ここで説明されている方法で実行する必要があります。

https://gist.github.com/roanbester/0c1dafece0d0fac699e4

主な違いを強調します。

Repository repository = WCM_API.getRepository();
// **get the virtual portal context**
VirtualPortalContext vpContext = repository.generateVPContextFromContextPath("virtualPortalName");

// Custom class, implements IBM interface, our executable code has to go here
FindCategoriesAction findCategoriesAction = new FindCategoriesAction();

// Now, WCM will execute our code kept in 'findCategoriesAction' 
   by calling the run method
repository.executeInVP(vpContext, findCategoriesAction);

私はこのコードの作成者ではありません。「findCategoriesAction」に保持されているコードの出力を返したい場合は難しくなります。

ここに示すコード例は、スレッド同期を示したり実装したりしません。

私は個人的に、IBM WCM および IBM Webphere Portal スイート全体の大ファンではありません。

これは古いアーキテクチャです。

また、8.0 以降では、WCM の REST API があり、これを使用してコンテンツや任意の要素にアクセスできますが、これも思ったほどきちんとしたものではありません。

于 2018-01-02T15:16:34.570 に答える