欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI

页面树结构

欢迎使用普元文档库

Skip to end of metadata
Go to start of metadata

【问题】

EOS Platform 7.5 tomcat更换为64位,配置jndi数据源,启动报错:

Message: 没有找到名称为 'java:comp/env/default' 的数据源.
        at com.primeton.common.connection.impl.datasource.JNDIDataSourceProvider.getDataSource(JNDIDataSourceProvider.java:72)
        at com.primeton.ext.common.connection.datasource.DataSourceFactory.getDataSource(DataSourceFactory.java:61)
        at com.eos.common.connection.mbean.DataSourceConfigHandler.toLoad(DataSourceConfigHandler.java:114)
        at com.eos.common.connection.mbean.DataSourceConfigHandler.toLoad(DataSourceConfigHandler.java:54)
        at com.primeton.common.config.impl.ConfigurationHelper$1.doHandler(ConfigurationHelper.java:58)
        ......
Caused by: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory]
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:119)
        at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:848)
        at com.primeton.common.connection.impl.datasource.JNDIDataSourceProvider.getDataSource(JNDIDataSourceProvider.java:70)
        ... 26 more
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:171)
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:115)
        ... 40 more

【解答】

项目中使用的解决方法分享:

解决方法共包括两步:

1.context.xmlJNDI数据源Resource配置节点中指定factory

<Resource name="default"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
    username="mdm" password="System123"
    maxActive="20" maxIdle="10"
    maxWait="10000"
    factory ="org.apache.commons.dbcp.BasicDataSourceFactory"
/>

添加后的效果如下:

 

2.context.xml同级目录下的web.xml</web-app>标签前加入JNDI数据源配置

 <resource-ref>  
   <res-ref-name>default</res-ref-name> 
   <res-ref-type>javax.sql.DataSource</res-ref-type> 
   <res-auth>Container</res-auth>
   <res-sharing-scope>Shareable</res-sharing-scope>
 </resource-ref>