Java Oracle连接崩溃了

时间:2015-05-13 18:06:07

标签: java oracle tomcat jdbc

我正在实施学校项目。我们必须在Java EE和Oracle中创建自己的ORM。我已经尝试了两种数据库连接方式:

  1. DriverManager.getConnection(DSN,USER,PASSWORD);
  2. Context initContext = new InitialContext();
    Context envContext =(Context)initContext.lookup(" java:comp / env");
    this.dataSource =(DataSource)envContext.lookup(" jdbc / isets");
  3. 一种方法比我更糟糕。我有一个实体(表行),这个实体有一个包含另一个实体列表的属性。当我试图打印这些实体时,有时看起来数据库连接会崩溃,因为某些实体没有加载。几乎每次都有一些没有打印出来,有时候一切都还可以(不可预测哪些会被打印出来或什么时候没问题。)

    当我使用第一种连接方法时,它适用于极少数数据库查询。如果我试图从数据库中选择10个对象(在10个查询中),则会显示Oracle服务器的例外情况。另一方面,当我使用第二种方法时,会出现更多问题。第一个是几乎每次运行应用程序时,它都会无限加载(至少10分钟)。有时它会正确加载,但根据第一种方法,更多" subentities"没有正确加载。

    我想使用连接池,但我不知道问题出在哪里。我遵循了这个"HOW TO",但它并不想工作: - (。

    这是我的context.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context antiJARLocking="true" path="/ISETS-TOMCAT">
        <Resource name="jdbc/isets"
            auth="Container"
            type="javax.sql.DataSource"
    
            testWhileIdle="true"
            testOnBorrow="true"
            testOnReturn="false"
            validationQuery="SELECT 1 FROM DUAL"
    
            maxActive="15"
            maxIdle="5"
            maxWait="-1"
    
            removeAbandoned="true"
            removeAbandonedTimeout="60"
            logAbandoned="true"
    
            driverClassName="oracle.jdbc.OracleDriver"
            url="jdbc:oracle:thin:@localhost:1521:XE"
            username="SYSTEM"
            password="admin"
    
            defaultTransactionIsolation="SERIALIZABLE"  />
    </Context>
    

    这是我的web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
      <servlet>
        <servlet-name>Controller</servlet-name>
        <servlet-class>isets.controllers.Controller</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>/Controller</url-pattern>
      </servlet-mapping>
      <session-config>
        <session-timeout>60</session-timeout>
      </session-config>
      <resource-ref>
        <description>ISETS Oracle pool</description>
        <res-ref-name>jdbc/isets</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
    </web-app>
    

    以下是建立连接的代码:

    Context initContext = new InitialContext();
    Context envContext  = (Context)initContext.lookup("java:comp/env");
    
    dataSource = (DataSource)envContext.lookup("jdbc/isets");
    
    connection = dataSource.getConnection();
    connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    

    我做错了吗?你能帮忙吗?谢谢,再见。

1 个答案:

答案 0 :(得分:0)

因为您正在使用Connection.TRANSACTION_SERIALIZABLE从一个连接所做的更改可能在另一个连接中不可见。我会尝试删除此设置。