无法访问WCM库

时间:2014-01-31 21:43:49

标签: websphere-portal wcm

我正在尝试访问WCM(Web内容管理)库,该库已经适用于门户应用程序。我的要求是从部署在WAS(Webspher Application Server)上的企业应用程序访问同一个库。 它在我的localhost上运行正常,但是当它部署在开发服务器上时它会给我以下错误 -

  

Stack Trace com.ibm.websphere.servlet.error.ServletErrorReport:   java.lang.IllegalStateException:未注册WCM存储库   与WCM_API在   com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:152)   在   com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)   在   com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)   在   com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:934)   在   com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)   在   com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)   在   com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121)   在   com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:259)   在   com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:686)   在   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)

我正在使用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());
  }

请帮忙......

2 个答案:

答案 0 :(得分:0)

在撰写本文时,不再支持IBM Web Content Management v6.1(生命周期终止于2014年9月),因此您应该已经升级。 IBM一次只支持3个版本(Current + 2 previous)。

如上所述,如果您的应用程序在Web Content Management servlet启动之前启动,则有时会发生此错误。您需要将启动权重设置为高于30. http://www-01.ibm.com/support/docview.wss?uid=swg21656128

如果无法访问整个源代码和完整堆栈跟踪,那么在触发此代码时有点难以理解。另一个错误来源可能是部署代码的服务器。它必须部署到Portal Server而不是Application Server。

答案 1 :(得分: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 Webpshere Portal套件的忠实粉丝。

这是一个古老的架构。

此外,从8.0开始,有一个来自WCM的REST API,使用它可以访问内容或任何元素,但同样,它不像听起来那么整洁。