无法通过JNDI

时间:2016-07-30 12:27:15

标签: java spring hibernate jdbc jboss

我正在使用Spring Data,Hibernate和jBoss 6.x.x。

我想通过JNDI查看jBoss 6.x.x已配置的jdbc数据源。

查看文件standalone.xml,我找到了以下条目:

<profile>
...

<datasources>
          ...
          <datasource enabled="true" jndi-name="name_of_the_ds" pool-name="name_of_the_pool" use-java-context="true">
                    <connection-url>connection_uri</connection-url>
                    <driver>driver_name</driver>
                    <security>
                        <user-name>fake_login</user-name>
                        <password>fake_password</password>
                    </security>
                </datasource>
...
</datasources>
...
</profile>

基于此,我编写了以下Spring注释配置 数据库的类(我使用Spring Data和Hibernate作为JPA提供者)

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "dao.repository")
@PropertySource("classpath:application.properties")
public class DataBaseContextConfiguration {
    private static final Logger LOGGER = LoggerFactory.getLogger(DataBaseContextConfiguration.class);

    private Database dataBase = Database.SOME_DATA_BASE;

    @Value("${jpa.showSql}")
    private Boolean showSql;

    @Value("${name.data.source}")
    private String dataSourceJndiName;

    @Bean
    public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() throws NamingException {
        final LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

        localContainerEntityManagerFactoryBean.setDataSource(dataSource());
        localContainerEntityManagerFactoryBean.setPackagesToScan(PACKAGE_WITH_DB_ENTITIES);

        JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);

        return localContainerEntityManagerFactoryBean;
    }

    @Bean
    public PlatformTransactionManager platformTransactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();

        jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);

        return jpaTransactionManager;
    }

    public DataSource dataSource() throws NamingException {
        DataSource dataSource = null;
        JndiTemplate jndi = new JndiTemplate();

        dataSource = (DataSource) jndi.lookup(dataSourceJndiName);

        return dataSource;
    }
}

String dataSourceJndiName具有以下值name_of_the_ds

当我尝试运行简单集成测试时,会发生以下异常:

Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

0 个答案:

没有答案