Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 7(Jeeves DBMS)上JNDI数据源的Oracle连接自动提交_Java_Oracle_Jboss_Datasource_Autocommit - Fatal编程技术网

Java 防止JBoss 7(Jeeves DBMS)上JNDI数据源的Oracle连接自动提交

Java 防止JBoss 7(Jeeves DBMS)上JNDI数据源的Oracle连接自动提交,java,oracle,jboss,datasource,autocommit,Java,Oracle,Jboss,Datasource,Autocommit,我目前在JBoss7中使用Oracle JNDI数据源的自动提交设置时遇到了一个奇怪的情况 大纲 我想要部署的应用程序(我可以检查但不能更改)从连接池获得连接,并在某些语句之后尝试提交。显然,连接的自动提交设置为“true”,因此会引发异常 You cannot commit with autocommit set! 我不能做的事 由于我无法更改应用程序源,以下“解决方案”不适用: con.setAutoCommit(false); 我尝试的 我查看了standalone.X

我目前在JBoss7中使用Oracle JNDI数据源的自动提交设置时遇到了一个奇怪的情况

大纲

我想要部署的应用程序(我可以检查但不能更改)从连接池获得连接,并在某些语句之后尝试提交。显然,连接的自动提交设置为“true”,因此会引发异常

    You cannot commit with autocommit set!
我不能做的事

由于我无法更改应用程序源,以下“解决方案”不适用:

    con.setAutoCommit(false);
我尝试的

我查看了standalone.XML的XML模式,在数据源定义中发现了两个有希望的元素:

    <connection-property name="autoCommit">
     false
    </connection-property>
更新2

我想要部署的应用程序是Geonetwork CSW 2.9.0,以防有人有这方面的经验。我必须配置JNDI数据源,因为空间索引只发生在容器管理的连接上

更新3

堆栈跟踪:

    15:52:18,203 ERROR [jeeves.engine] (MSC service thread 1-4) Raised exception while starting appl handler. Skipped.
    15:52:18,205 ERROR [jeeves.engine] (MSC service thread 1-4)    Handler   : org.fao.geonet.Geonetwork
    15:52:18,206 ERROR [jeeves.engine] (MSC service thread 1-4)    Exception : java.sql.SQLException: You cannot commit with autocommit set!
    15:52:18,210 ERROR [jeeves.engine] (MSC service thread 1-4)    Message   : You cannot commit with autocommit set!
    15:52:18,213 ERROR [jeeves.engine] (MSC service thread 1-4)    Stack     : java.sql.SQLException: You cannot commit with autocommit set!
            at org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.jdbcCommit(BaseWrapperManagedConnection.java:984)
            at org.jboss.jca.adapters.jdbc.WrappedConnection.commit(WrappedConnection.java:757)
            at jeeves.resources.dbms.Dbms.commit(Dbms.java:150)
            at jeeves.resources.dbms.AbstractDbmsPool.close(AbstractDbmsPool.java:158)
            at jeeves.server.resources.ResourceManager.release(ResourceManager.java:302)
            at jeeves.server.resources.ResourceManager.close(ResourceManager.java:270)
            at jeeves.server.JeevesEngine.initAppHandler(JeevesEngine.java:556)
            at jeeves.server.JeevesEngine.init(JeevesEngine.java:182)
            at jeeves.server.sources.http.JeevesServlet.init(JeevesServlet.java:87)
            at javax.servlet.GenericServlet.init(GenericServlet.java:242)
            at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202)
            at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1102)
            at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3655)
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:3873)
            at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90)
            at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
            at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
            at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
            at java.lang.Thread.run(Thread.java:662)
更新4


我刚刚意识到Jeeves DBMS是一个围绕JNDI数据源的简单包装器,它可以像任何人使用普通JDBC一样获得连接。所以我回到了起点。

谢谢你给我指点方向,找到了一个非常适合我的解决方案(更正:解决方法)。我围绕原始数据源制作了一个包装器,重写getConnection()方法并将其绑定到一个新的JNDI名称下。通过这种方式,我可以完全控制数据源,而不会丢失容器中的任何功能。

快速测试:尝试将JTA设置为true,因为默认情况下,这将强制自动提交为false。这里的交易是,你的问题是从错误的角度提出的;数据源不管理连接的自动提交设置,这是希望使用连接的逻辑的责任。那么,使用数据源获取连接是什么技术呢?答案应该在那里。谢谢你的投入,这实际上让我想得更远一些。我刚刚意识到使用的技术是Jeeves DBMS(不知道你是否可以这样称呼它,我没有Jeeves的经验),不幸的是JTA=true也不起作用。(更新问题)我不确定这是一个实际的解决方案还是仅仅是一个解决方案,但如果你确定你因此得到了帮助(目前)-我不会再给出更多。你完全正确,这不是一个真正的解决方案。这是一个“精心设计的解决方案”,但不是一般意义上的解决方案。谢谢大家!@我也面临着同样的问题。。您能提供您更改的所有详细信息吗?
<datasource jta="false" jndi-name="java:/*****" pool-name="*****" enabled="true">
    <connection-url>jdbc:oracle:thin:@****:****:****</connection-url>
    <connection-property name="autoCommit">
        false
    </connection-property>
    <driver>oracle.jdbc</driver>
    <pool>
        <min-pool-size>10</min-pool-size>
        <max-pool-size>100</max-pool-size>
        <prefill>true</prefill>
        <use-strict-min>false</use-strict-min>
        <flush-strategy>FailingConnectionOnly</flush-strategy>
    </pool>
        <security>
        <user-name>*****</user-name>
        <password>*****</password>
    </security>
    <timeout>
        <blocking-timeout-millis>5000</blocking-timeout-millis>
        <idle-timeout-minutes>1</idle-timeout-minutes>
    </timeout>
</datasource>
      public AccessManager(jeeves.resources.dbms.Dbms dbms, SettingManager sm)
        throws SQLException
      {
        List operList = dbms.select("SELECT * FROM Operations").getChildren();          
      }
    15:52:18,203 ERROR [jeeves.engine] (MSC service thread 1-4) Raised exception while starting appl handler. Skipped.
    15:52:18,205 ERROR [jeeves.engine] (MSC service thread 1-4)    Handler   : org.fao.geonet.Geonetwork
    15:52:18,206 ERROR [jeeves.engine] (MSC service thread 1-4)    Exception : java.sql.SQLException: You cannot commit with autocommit set!
    15:52:18,210 ERROR [jeeves.engine] (MSC service thread 1-4)    Message   : You cannot commit with autocommit set!
    15:52:18,213 ERROR [jeeves.engine] (MSC service thread 1-4)    Stack     : java.sql.SQLException: You cannot commit with autocommit set!
            at org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.jdbcCommit(BaseWrapperManagedConnection.java:984)
            at org.jboss.jca.adapters.jdbc.WrappedConnection.commit(WrappedConnection.java:757)
            at jeeves.resources.dbms.Dbms.commit(Dbms.java:150)
            at jeeves.resources.dbms.AbstractDbmsPool.close(AbstractDbmsPool.java:158)
            at jeeves.server.resources.ResourceManager.release(ResourceManager.java:302)
            at jeeves.server.resources.ResourceManager.close(ResourceManager.java:270)
            at jeeves.server.JeevesEngine.initAppHandler(JeevesEngine.java:556)
            at jeeves.server.JeevesEngine.init(JeevesEngine.java:182)
            at jeeves.server.sources.http.JeevesServlet.init(JeevesServlet.java:87)
            at javax.servlet.GenericServlet.init(GenericServlet.java:242)
            at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202)
            at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1102)
            at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3655)
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:3873)
            at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90)
            at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
            at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
            at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
            at java.lang.Thread.run(Thread.java:662)