因此,我多次读过如果您使用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容器。如果是这样,我需要在这里指定哪个提供商网址?
答案 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;
希望它有所帮助!