jndi websphere обработчик импорта данных solr

Я пытаюсь использовать атрибут jndiName в db-data-config.xml. Это отлично работает в Tomcat. Однако возникли проблемы в веб-сфере.

Выдается следующее исключение

"Убедитесь, что приложение J2EE не выполняет операции JNDI с именами" java: "в статических блоках кода или в потоках, созданных этим приложением J2EE. Такой код не обязательно выполняется в потоке запроса серверного приложения и поэтому не поддерживается операциями JNDI с именами «java:». [Корневое исключение - javax.naming.NameNotFoundException: имя comp / env / jdbc не найдено в контексте «java:».

Похоже, что у websphere есть проблемы с доступом к ресурсу jndi из статического кода. Кто-нибудь испытал это?

 DataImporter  E org.apache.solr.common.SolrException log Full Import failed:org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: <REMOVE SQL from here>
    at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:72)
    at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:253)
    at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:210)
    at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:39)
    at org.apache.solr.handler.dataimport.SqlEntityProcessor.initQuery(SqlEntityProcessor.java:59)
    at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:73)
    at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:238)
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:596)
    at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:268)
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:187)
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:359)
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:427)
    at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:408)
Caused by: javax.naming.ConfigurationException: A JNDI operation on a "java:" name cannot be completed because the server runtime is not able to associate the operation's thread with any J2EE application component.  This condition can occur when the JNDI client using the "java:" name is not executed on the thread of a server application request.  Make sure that a J2EE application does not execute JNDI operations on "java:" names within static code blocks or in threads created by that J2EE application.  Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on "java:" names. [Root exception is javax.naming.NameNotFoundException: Name comp/env/jdbc not found in context "java:".]
    at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:428)
    at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:399)
    at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:214)
    at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:154)
    at javax.naming.InitialContext.lookup(InitialContext.java:436)
    at org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:140)
    at org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:128)
    at org.apache.solr.handler.dataimport.JdbcDataSource.getConnection(JdbcDataSource.java:363)
    at org.apache.solr.handler.dataimport.JdbcDataSource.access$200(JdbcDataSource.java:39)
    at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:240)
    ... 11 more
Caused by: javax.naming.NameNotFoundException: Name comp/env/jdbc not found in context "java:".
    at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1837)
    at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1166)
    at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1095)
    at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1233)
    at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:395)
    ... 19 more

person tech20nn    schedule 05.04.2012    source источник
comment
Да, я видел проблемы с java: поиск, выполняемый в статических инициализаторах или конструкторах. Что такое db-data-config.xml? Какую проблему вы видите? При необходимости включите образец кода, сообщение об ошибке из журналов или полную трассировку стека исключений.   -  person Brett Kail    schedule 05.04.2012
comment
Я добавил сюда трассировку стека. db-data-config.xml - это файл конфигурации для импорта из базы данных в Apache Solr.   -  person tech20nn    schedule 05.04.2012


Ответы (1)


Solr использует здесь неуправляемые потоки и выполняет поиск JNDI в пространстве имен java: в одном из этих потоков. Это не поддерживается в WebSphere, поскольку WebSphere определяет пространство имен java: на основе потока, выполняющего поиск. Tomcat делает это на основе загрузчика класса контекста потока, который объясняет разницу в поведении. Обратите внимание, что неуправляемые потоки не разрешены спецификациями J2EE, поэтому поведение WebSphere фактически соответствует стандартам.

person Andreas Veithen    schedule 05.04.2012
comment
Спасибо, теперь используется jndiName = jdbc / testdb вместо jndiName = java: comp / env / jdbc / testdb. - person tech20nn; 06.04.2012