[英]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.