首页 > 解决方案 > WebLogic 的 Hibernate JNDI 查找抛出无法解决

问题描述

我已在 Oracle Weblogic 12.1.3 上配置了一个数据源,并尝试在 Spring MVC 应用程序中查找此数据源。

// Weblogic configuration
Datasource Name in weblogic : Admin Data Source
JNDI Name : bsh/AdminDS
// Spring MVC Configuration
    @Bean
    public DataSource getDataSourceUsingJndi() throws NamingException {
        return (DataSource) new JndiTemplate().lookup("bsh/AdminDS"); // 1st way
    }

    @Bean
    public LocalSessionFactoryBean sessionFactory() throws NamingException {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(getDataSourceUsingJndi());
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put(AvailableSettings.DIALECT, hibernateDialect);
        properties.put(AvailableSettings.SHOW_SQL, showSql);
        properties.put(AvailableSettings.FORMAT_SQL, formatSql);
        return properties;
    }

我得到以下堆栈跟踪:

Caused by: javax.naming.NameNotFoundException: Unable to resolve 'bsh.AdminDS'. Resolved 'bsh'; remaining name 'AdminDS'
    at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1180)
    at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:270)
    at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:187)
    at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:210)
    at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:224)
    at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:253)
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:426)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at org.springframework.jndi.JndiTemplate.lambda$lookup$0(JndiTemplate.java:156)
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:91)
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:156)
    at com.bsh.config.WebConfig.getDataSourceUsingJndi(WebConfig.java:68)

我尝试了不同的查找方式 - 第二种方式

    public DataSource getDataSourceUsingJndi() {
        JndiDataSourceLookup jndiLookup = new JndiDataSourceLookup();
        jndiLookup.setResourceRef(true);
        return jndiLookup.getDataSource("bsh/AdminDS");
    }

我的配置有什么问题吗?

标签: oraclehibernatespring-mvcjndiweblogic12c

解决方案


推荐阅读