[英]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:1099
或localhost
,但都沒有用。
所以我的問題是:我什至需要指定這些屬性,因為據我所知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.