配置JTA数据源JBoss的8(WildFly)
问题描述:
所以,我看了几遍,如果您使用的是Java EE容器,你不需要在PARAMS为了能够使用JNDI环境添加到InitialContext
。配置JTA数据源JBoss的8(WildFly)
所以,我想这一点:
@Bean
public DataSource dataSource() {
JndiDataSourceLookup jndiDataSourceLookup = new JndiDataSourceLookup();
return jndiDataSourceLookup.getDataSource("java:global/ExpensesDataSource");
}
但是,使用JNDI像这给了我一个NoInitialContextException
,告诉我指定环境PARAMS检索数据源。现在
,好吧,看来我错误地认为它会工作那么完美,所以我想取回这样的数据源:
@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
,他们都没有工作。
所以我的问题是:我甚至需要指定这些属性,因为8的JBoss是一个Java EE容器,据我所知。如果是这样,我需要在这里指定什么提供商网址?
答
如果使用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;
希望它可以帮助!
我已经尝试过这一点,但是这给了我一个javax.naming.NoInitialContextException:需要环境或系统属性指定的类名,或者作为一个小程序参数,或在应用程序的资源文件:....例外。我的代码来自Spring配置文件 – 2014-11-25 14:26:35