获取JDBC连接时出错:无法在输入元感知对象时登记事务

rfd*_*ers 5 java jboss jndi jdbc ejb-3.0

我在获取JDBC连接时遇到问题EJB SessionBean.错误是:

org.jboss.util.NestedSQLException:无法在输入元感知对象时登记事务! - 嵌套throwable:(javax.transaction.SystemException:java.lang.Throwable:无法登记资源,请参阅先前的警告.

我认为这种情况发生了,因为我已经有一个来自不同数据源的开放连接,所以我配置了一个XA数据源以避免交易问题,但它根本不起作用,所以我不知道我是否做错了我的代码.这里是:

  try 
    {
        Properties p = new Properties();
        p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
        p.put(Context.PROVIDER_URL,"jnp://localhost:11099");
        p.put("java.naming.factory.url.pkgs", "org.jboss.naming");

        InitialContext ic = new InitialContext(p);

        DataSource dataSource = (DataSource)ic.lookup("java:/jdbc/etlreportservices");

        return dataSource.getConnection();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

调用时抛出异常dataSource.getConnection().

小智 6

可以尝试,对于旧的Jboss-es:/server/all/conf/jbossjta-properties.xml

<properties depends="arjuna" name="jta">
   <property name="com.arjuna.ats.jta.allowMultipleLastResources" value="true"/>
</properties>
Run Code Online (Sandbox Code Playgroud)

for new:standalone\configuration\standalone.xml(或其他你使用的)

<system-properties>
    <property name="com.arjuna.ats.arjuna.allowMultipleLastResources"   value="true"/>
</system-properties>  
Run Code Online (Sandbox Code Playgroud)


rfd*_*ers -1

我将事务管理器更改为 bean 管理,并且它工作得很好。