首页 > 解决方案 > Jetty 更新 9.4 未从 jndi 查找开始

问题描述

最近。我已将我的应用程序从 v9.3.13 更新到 jetty 的最新版本 9.4.9,一切对我来说都很好,但我无法启动 jetty 服务器并出现以下错误。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ExportStep': Cannot resolve reference to bean 'jobRepository' while setting bean property 'jobRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobRepository' defined in class path resource [applicationContext-ui.xml]: Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext-dao.xml]: Cannot resolve reference to bean 'rmUiDataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rmUiDataSource': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException; remaining name 'jdbc/amsDs_NonXA'
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:334)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1419)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:618)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:938)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:890)
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:558)
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:853)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:370)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1497)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1459)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:785)
    at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:287)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:545)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:46)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:192)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:505)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:151)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
    at org.eclipse.jetty.deploy.providers.WebAppProvider.fileAdded(WebAppProvider.java:447)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:610)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:529)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:392)
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:150)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:579)
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:240)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:138)
    at org.eclipse.jetty.server.Server.start(Server.java:419)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:117)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113)
    at org.eclipse.jetty.server.Server.doStart(Server.java:386)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1588)
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1512)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1511)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.jetty.start.Main.invokeMain(Main.java:220)
    at org.eclipse.jetty.start.Main.start(Main.java:486)
    at org.eclipse.jetty.start.Main.main(Main.java:77)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobRepository' defined in class path resource [applicationContext-ui.xml]: Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext-dao.xml]: Cannot resolve reference to bean 'rmUiDataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rmUiDataSource': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException; remaining name 'jdbc/amsDs_NonXA'
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:334)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1419)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    ... 59 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext-dao.xml]: Cannot resolve reference to bean 'rmUiDataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rmUiDataSource': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException; remaining name 'jdbc/amsDs_NonXA'
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:334)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1419)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    ... 69 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rmUiDataSource': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException; remaining name 'jdbc/amsDs_NonXA'
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    ... 79 more
Caused by: javax.naming.NameNotFoundException; remaining name 'jdbc/amsDs_NonXA'
    at org.eclipse.jetty.jndi.local.localContextRoot.lookup(localContextRoot.java:499)
    at org.eclipse.jetty.jndi.local.localContextRoot.lookup(localContextRoot.java:546)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154)
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:104)
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
    at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:231)
    at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:217)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1573)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
    ... 86 more

我们在一个单独的文件中配置我们的 JNDI 资源,并使其在我们从 jetty v6.1.11 开始工作的码头启动时可用。

我们运行命令来启动码头服务器,如下所示

jetty/bin/jetty.sh start jetty/etc/jetty.xml jetty/etc/jetty-ams.xml jetty/etc/jetty-ssl.xml jetty/etc/mariadb.xml

mariadb.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">

<Configure id="Server" class="org.eclipse.jetty.server.Server">

    <New id="DS1" class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg>jdbc/amsDs</Arg>
        <Arg>
            <New class="com.atomikos.jdbc.AtomikosDataSourceBean">
                <Set name="minPoolSize">20</Set>
                <Set name="maxPoolSize">200</Set>
                <Set name="xaDataSourceClassName">org.mariadb.jdbc.MySQLDataSource</Set>
                <Set name="UniqueResourceName">MySqlXA</Set>
                <Set name="testQuery">SELECT 1</Set>
                <Set name="reapTimeout">0</Set>
                <Set name="borrowConnectionTimeout">60</Set>
                <Set name="maxIdleTime">10800</Set>
                <Set name="maintenanceInterval">60</Set>

                <Get name="xaProperties">
                    <Call name="setProperty">
                        <Arg>url</Arg>
                        <Arg>jdbc:mariadb://<SystemProperty name="DB_MySQL_HOST" default="localhost" />:<SystemProperty name="DB_MySQL_PORT" default="3306" />/<SystemProperty name="DB_SERVICE_NAME" default="sac" />?pinGlobalTxToPhysicalConnection=true</Arg>
                    </Call>
                    <Call name="setProperty">
                         <Arg>user</Arg>
                         <Arg><SystemProperty name="DB_USER" default=""/></Arg>
                    </Call>
                    <Call name="setProperty">
                        <Arg>password</Arg>
                        <Arg><SystemProperty name="DB_USER_PASSWORD" default=""/></Arg>
                    </Call>
                </Get>
            </New>
        </Arg>
    </New>
    <New id="DS2" class="org.eclipse.jetty.plus.jndi.Resource">     
        <Arg>jdbc/amsDs_NonXA</Arg>
        <Arg>
            <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <Set name="driverClass">org.mariadb.jdbc.Driver</Set>
                <Set name="jdbcUrl">jdbc:mariadb://<SystemProperty name="DB_MySQL_HOST" default="localhost"/>:<SystemProperty name="DB_MySQL_PORT" default="3306"/>/<SystemProperty name="DB_SERVICE_NAME" default="sac"/>?useUnicode=true&amp;characterEncoding=utf8&amp;failOverReadOnly=false&amp;connectTimeout=<SystemProperty name="DB_MySQL_CONNECT_TIMEOUT" default="30000"/>&amp;socketTimeout=<SystemProperty name="DB_MySQL_TIMEOUT" default="30000"/>&amp;autoReconnect=true&amp;maxReconnects=1000&amp;secondsBeforeRetryMaster=120&amp;rewriteBatchedStatements=<SystemProperty name="DB_REWRITE_BATCH_STATEMENTS" default="false"/>&amp;useCompression=<SystemProperty name="DB_MYSQL_USE_COMPRESSION" default="false"/>&amp;useServerPrepStmts=<SystemProperty name="DB_MYSQL_USE_SERVER_PRE_STMTS" default="false"/></Set>
                <Set name="user"><SystemProperty name="DB_USER" default=""/></Set>
                <Set name="password"><SystemProperty name="DB_USER_PASSWORD" default=""/></Set>  
                <Set name="minPoolSize">5</Set>
                <Set name="maxPoolSize">50</Set>
                <Set name="initialPoolSize">5</Set>
                <Set name="acquireIncrement">3</Set>
                <Set name="numHelperThreads">6</Set>
                <Set name="maxIdleTime">10800</Set>
                <Set name="idleConnectionTestPeriod">3600</Set>
                <Set name="maxConnectionAge">14400</Set>
                <Set name="preferredTestQuery">SELECT 1;</Set>
                <Set name="testConnectionOnCheckin">false</Set>
                <Set name="acquireRetryAttempts">100</Set>
            </New>
        </Arg>
   </New>
   <New id="DS3" class="org.eclipse.jetty.plus.jndi.Resource">
       <Arg>jdbc/amsReportingDs</Arg>
           <Arg>
               <New class="com.mchange.v2.c3p0.ComboPooledDataSource">

                   <Set name="driverClass">org.mariadb.jdbc.MariaDbPooledConnection</Set>
                   <Set name="jdbcUrl">jdbc:mariadb://<SystemProperty name="REPORTING_DB_MYSQL_HOST" default="localhost"/>:<SystemProperty name="REPORTING_DB_MYSQL_PORT" default="3306"/>/<SystemProperty name="REPORTING_DB_MYSQL_SERVICE" default="analytics_data"/>?useUnicode=true&amp;characterEncoding=utf8&amp;failOverReadOnly=false&amp;connectTimeout=30000&amp;socketTimeout=30000&amp;autoReconnect=true&amp;maxReconnects=1000&amp;secondsBeforeRetryMaster=120&amp;rewriteBatchedStatements=false</Set>
                   <Set name="user"><SystemProperty name="REPORTING_DBUSER" default=""/></Set>
                   <Set name="password"><SystemProperty name="REPORTING_DB_PASSWORD" default=""/></Set>  
                   <Set name="minPoolSize">5</Set>
                   <Set name="maxPoolSize">50</Set>
                   <Set name="initialPoolSize">5</Set>
                   <Set name="acquireIncrement">3</Set>
                   <Set name="numHelperThreads">6</Set>
                   <Set name="maxIdleTime">10800</Set>
                   <Set name="idleConnectionTestPeriod">360</Set>
                   <Set name="maxConnectionAge">14400</Set>
                   <Set name="preferredTestQuery">SELECT 1;</Set>
                   <Set name="testConnectionOnCheckin">false</Set>
                   <Set name="acquireRetryAttempts">3</Set>
         </New> 
      </Arg>
  </New>
</Configure>

我们还将 applicationContext 文件中的数据源配置为

<jee:jndi-lookup id="rmUiDataSource" jndi-name="jdbc/amsDs_NonXA" />

我不明白为什么我会收到上述错误。任何人都可以帮助我吗?

标签: springjettymariadb

解决方案


我通过将数据源文件路径更新为 start.ini 文件来解决它。


推荐阅读