使用Spring Data JPA无法通过JNDI名称访问Weblogic数据源

时间:2018-06-25 19:47:22

标签: spring-data-jpa weblogic datasource jndi weblogic12c

我正在使用Weblogic 12c,并且已将数据源配置如下:

enter image description here

请注意,它们都已部署在目标“ AdminServer”上。另外,“名称”字段和“ JNDI名称”字段相同。例如,假设一个数据源的名称为“ MYDS”。

现在,当我尝试像这样通过Spring Data JPA获取该数据源时:

    @Bean
    @Primary
    public DataSource businessDataSource() throws IllegalArgumentException, NamingException {
        JndiObjectFactoryBean dataSource = new JndiObjectFactoryBean();
        dataSource.setResourceRef(true);
        dataSource.setJndiName("MYDS");
        dataSource.afterPropertiesSet();

        return (DataSource) dataSource.getObject();
    }

尝试将war文件部署到weblogic时出现以下错误:

  

通过工厂方法实例化Bean失败;嵌套异常为   org.springframework.beans.BeanInstantiationException:失败   实例化[javax.sql.DataSource]:工厂方法   'businessDataSource'引发异常;嵌套异常为   javax.naming.NameNotFoundException:无法解析“ MYDS”。解决   '';剩余的名称“ MYDS”

我也看到此错误:

  

DEBUG o.s.jndi.JndiObjectFactoryBean-转换后的JNDI名称   找不到[java:comp / env / MYDS]-尝试使用原始名称[MYDS]。   javax.naming.NameNotFoundException:尝试查找时   comp / env / MYDS / app / myapp / webclient / 404708050。剩余的名字   'comp / env / MYDS'

1 个答案:

答案 0 :(得分:1)

只需查看setResourceRef的源代码,并指出:

public void setResourceRef(boolean resourceRef)

设置查找是否在Java EE容器中进行,

即如果JNDI名称尚未包含前缀“ java:comp / env /”,则需要添加它。 默认值为“ false”。

注意:仅在未提供其他方案(例如“ java:”)的情况下才会应用。

如果将其设置为true,是否尝试过将Java:comp / env /添加到JNDI名称?