Невозможно получить доступ к библиотеке WCM
Я пытаюсь получить доступ к библиотеке WCM(Web Content Management), которая уже отлично работает для приложения портала. Мое требование - получить доступ к той же библиотеке из корпоративного приложения, развернутого на WAS (сервере приложений Webspher). Он отлично работает на моем локальном хосте, но при развертывании на сервере разработки выдает сообщение об ошибке ниже
Трассировка стека com.ibm.websphere.servlet.error.ServletErrorReport: java.lang.IllegalStateException: репозиторий WCM не зарегистрирован в WCM_API по адресу com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter: WebAppFilter: WebAppF com.ibm.ws.webcontainer.filter.WebAppFilterChain.servlet.ServletWrapper.handleRequest(ServletWrapper.java:934) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) на com.ibm.ws.webcontainer.servlet.RemplI Java:179) на com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121) на com.ibm.ws.jsp.webcontainerext.AbstractJSPExtension.ervletWrapper)JS.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:686) в com.bowstreet.webapp.engine.pageprocessor.JSPPageProcessor.requestJSPPage(JSPPageProcessor.java:321) в com.bowstreet.webapp.engine.pageprocessor.JSPPageProcessor.processPage7) at JPP.bowstreet.webapp.engine.actions.PageAction.callAction(PageAction.java:101) в com.bowstreet.webapp.engine.WebAppAccessImpl.processPage(WebAppAccessImpl.java:228)
Я использую IBM Websphere Application and 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 ответа
На момент написания этой статьи IBM Web Content Management v6.1 больше не поддерживается (Конец жизненного цикла был сентябрь 2014 г.), поэтому вы должны были уже выполнить обновление. IBM поддерживает одновременно только 3 версии (текущую + 2 предыдущих).
С учетом сказанного эта ошибка может иногда возникать, если ваше приложение запускается до запуска сервлета Web Content Management. Вам нужно установить вес при запуске выше 30. http://www-01.ibm.com/support/docview.wss?uid=swg21656128
Без доступа ко всему исходному коду и полной трассировке стека немного сложно увидеть, когда этот код запускается. Другим источником ошибки может быть сервер, на котором был развернут код. Он должен быть развернут на сервере портала, а не на сервере приложений.
У вас есть виртуальные порталы на вашем сервере разработки?
Если у вас есть виртуальный портал на сервере разработки, вам нужно получить контекст виртуального портала и запустить его так, как описано здесь:
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, есть REST API от WCM, с помощью которого вы можете получить доступ к контенту или любому элементу, но, опять же, он не так аккуратен, как кажется.