代码之家  ›  专栏  ›  技术社区  ›  Gnoupi

“存储过程'xxx'只能在无约束事务模式下运行。”在EJB上下文中从数据源调用过程时出错

  •  1
  • Gnoupi  · 技术社区  · 14 年前

    我们在Sybase中有一个数据库,我们从Java服务器访问数据库。

    直接通过Sybase驱动程序访问数据库,使用 DriverManager . 它工作正常,我们可以调用存储过程。

    最近,我们正在迁移到一个应用服务器(在JBoss5上),现在通过JNDI连接器调用数据库,使用 DataSource :

    Properties ppt = new Properties();
    ppt.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
    ppt.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
    ppt.put("java.naming.provider.url", "jdbc/sybase");
    
    InitialContext ctx = new InitialContext(ppt);
    DataSource ds = (DataSource) ctx.lookup(AConfig.getInstance().getDatasourceJndiName());
    
    Connection conn = ds.getConnection();
    

    (使用基本设置配置数据源,从 JBoss example )

    但是,在此设置中,有几个过程失败,并出现此错误:

    “存储过程” ** 可以运行 只有在无约束事务模式下。”

    或者这种情况,对于其他情况(失败的命令更改时):

    不允许使用truncate table命令 在多语句事务中

    从我在Internet上发现的情况来看,jboss或连接器中的某些内容正在打开事务本身,从而导致这些错误。因此,我能找到的针对这些特定问题的各种解决方案太局限了,这似乎是一个更大的问题。

    有没有办法防止这种行为(假设这是实际问题)?


    我在这一特定领域的知识非常薄弱,这对我来说是新的。因此,这个描述可能缺少一些重要的细节。请告诉我如何改进这个问题,如有必要,我可以添加哪些细节。

    3 回复  |  直到 12 年前
        1
  •  1
  •   PerformanceDBA    14 年前

        2
  •  5
  •   Unni Kris Jan    12 年前

    conn.setAutoCommit(false);

    sp_procxmode
    

    insert into publishers 
        values ("9906", null, null, null)
    begin transaction
    delete from publishers where pub_id = "9906"
    rollback transaction
    

    Refer this link.