Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为JBoss 8(WildFly)配置JTA数据源_Java_Jboss_Datasource_Jndi - Fatal编程技术网

Java 为JBoss 8(WildFly)配置JTA数据源

Java 为JBoss 8(WildFly)配置JTA数据源,java,jboss,datasource,jndi,Java,Jboss,Datasource,Jndi,因此,我读了好几次,如果您使用JavaEE容器,您不需要向InitialContext添加环境参数,就可以使用JNDI 所以我试了一下: @Bean public DataSource dataSource() { JndiDataSourceLookup jndiDataSourceLookup = new JndiDataSourceLookup(); return jndiDataSourceLookup.getDataSource("jav

因此,我读了好几次,如果您使用JavaEE容器,您不需要向
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:无法连接到服务器localhost:1099

我也尝试过只使用
localhost:1099
localhost
,但都不起作用


所以我的问题是:我甚至需要指定这些属性吗,因为据我所知JBoss8是一个JavaEE容器。如果是这样,我需要在这里指定什么提供者url?

如果使用javax.naming.InitialContext,就不需要像您所说的那样指定环境参数。例如:

InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:jboss/datasources/ExampleDS");
不确定JndiDataSourceLookup是如何工作的

为了查找数据源,可以使用@Resource(在ejb上下文中)注入它


希望有帮助

我以前尝试过这个,但是这给了我一个javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名,或者作为小程序参数,或者在应用程序资源文件中指定:。。。。例外我的代码来自Spring配置文件
@Resource(name= "java:jboss/datasources/ExampleDS")
private Datasource ds;