2014-01-31 2 views
0

Я пытаюсь получить доступ к WCM (Web Content Management) библиотеки, которая уже работает нормально для приложения портала. Мое требование - получить доступ к одной и той же библиотеке из корпоративного приложения, развернутого на WAS (WebSpher Application Server). Он отлично работает на моем локальном хосте, но при развертывании на сервере разработки это дает мне ниже error-Невозможно получить доступ к WCM библиотеки

трассировки стека com.ibm.websphere.servlet.error.ServletErrorReport: java.lang.IllegalStateException: A WCM Repository не зарегистрирован с 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()); 
    } 

Пожалуйста, помогите ...

+0

Если вы перезапустите приложение один раз (а не сервер, приложение только), то оно будет работать тогда? – DanielBarbarian

ответ

0

На момент написания этого Web Content Management IBM v6.1 больше не поддерживается Кодекса snippet- (Конец жизни был сентябрь 2014), поэтому вы должны были уже обновить. IBM поддерживает только 3 версии (текущий + 2 предыдущих).

С учетом сказанного, эта ошибка иногда может возникнуть, если приложение запускается до управления сервлета запуска веб-контента. Вам необходимо установить стартовый вес более 30. http://www-01.ibm.com/support/docview.wss?uid=swg21656128

Без доступа ко всему исходному коду и полной трассировке стека немного сложно увидеть, когда этот код запускается. Другим источником ошибок может быть сервер, на котором был развернут код. Он должен быть развернут на сервере портала, а не на сервере приложений.

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, существует API REST из WCM, с помощью которого вы можете получить доступ к содержимому или любому элементу, но опять же, это не так просто, как кажется.