簡體   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