繁体   English   中英

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

[英]Configuring a JTA datasource for JBoss 8 (WildFly)

因此,我读过好几次书,如果您使用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容器。 如果是这样,我需要在此处指定哪个提供商URL?

如果使用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;

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM