为JBoss 8配置JTA数据源(WildFly)

时间:2014-11-25 10:04:51

标签: java jboss datasource jndi

因此,我多次读过如果您使用Java EE容器,则无需将环境参数添加到InitialContext以便能够使用JNDI。

所以我尝试了这个:

    @Bean
    public DataSource dataSource() {
        JndiDataSourceLookup jndiDataSourceLookup = new JndiDataSourceLookup();
        return jndiDataSourceLookup.getDataSource("java:global/ExpensesDataSource");
    }

但是,使用像这样的JNDI检索数据源会给我一个NoInitialContextException,告诉我指定环境参数。

现在,好吧,所以我觉得错误地认为它会如此完美无缺,所以我尝试检索这样的数据源:

    @Bean
    public DataSource dataSource() {
        Properties jndiProperties = new Properties();
        jndiProperties.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099");
        jndiProperties.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        jndiProperties.put("java.naming.factory.url.pkgs", "org.jboss.naming.org.jnp.interfaces");
        JndiDataSourceLookup jndiDataSourceLookup = new JndiDataSourceLookup();
        jndiDataSourceLookup.setJndiEnvironment(jndiProperties);
        return jndiDataSourceLookup.getDataSource("java:global/ExpensesDataSource");
    }

然而,这给了我一个javax.naming.CommunicationException: Failed to connect to server localhost:1099

我还试过使用localhost:1099localhost,但都没有效果。

所以我的问题是:我甚至需要指定这些属性,因为据我所知,JBoss 8是一个Java EE容器。如果是这样,我需要在这里指定哪个提供商网址?

1 个答案:

答案 0 :(得分:0)

如果你使用javax.naming.InitialContext,你就不需要像你说的那样指定环境参数。例如:

InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:jboss/datasources/ExampleDS");

不确定JndiDataSourceLookup如何工作..

要查找数据源,可以使用@Resource(在ejb上下文中)注入数据源

@Resource(name= "java:jboss/datasources/ExampleDS")
private Datasource ds;

希望它有所帮助!