กำหนดค่า mybatis เพื่อใช้การเชื่อมต่อที่มีอยู่

ฉันต้องการตั้งค่าการเชื่อมต่อระหว่างแอปพลิเคชันของฉันกับฐานข้อมูล Oracle ฉันไม่มีข้อมูลฐานข้อมูลต่อไปนี้:

  1. URL
  2. ชื่อผู้ใช้
  3. รหัสผ่าน

สิ่งที่ฉันสามารถดึงข้อมูลได้คือ java.sql.Connection ที่ถูกต้องโดยใช้ API ที่ Blackboard ให้มา

เป็นไปได้ไหมที่จะตั้งค่า mybatis ในกรณีนี้?

ฉันใช้การกำหนดค่าที่แสดงด้านล่าง:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="jdbcTypeForNull" value="NULL"/>
    </settings>

    <typeAliases>
        <typeAlias alias="assignment" type="simpleproj.assignment.model.Assignment"/>
        <typeAlias alias="assignmentLog" type="simpleproj.assignment.model.AssignmentLog"/>
    </typeAliases>

    <mappers>   
        <mapper resource="simpleproj/assignment/model/Assignment.xml" />
    </mappers>

</configuration>

นี่คือวิธีที่ฉันได้รับอินสแตนซ์ SqlSessionFactory ใหม่:

String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
return new SqlSessionFactoryBuilder().build(reader, "assignment");

หลังจากนั้น ฉันพยายามดึงเซสชันด้วยรหัสนี้:

session = sqlSessionFactory.openSession(connection);

ฉันได้ตรวจสอบแล้วว่า connection ใช้ได้กับ:

  1. connection.isValid(3); ซึ่งคืนค่าเป็นจริง
  2. a PreparedStatement สามารถดำเนินการได้สำเร็จ

อย่างไรก็ตาม sqlSessionFactory.openSession(connection) สร้างข้อผิดพลาดโดยมีการติดตามสแต็กต่อไปนี้:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error opening session.  Cause: java.lang.reflect.UndeclaredThrowableException
### Cause: java.lang.reflect.UndeclaredThrowableException
        at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
        at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromConnection(DefaultSqlSessionFactory.java:102)
        at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:67)
        at simpleproj.assignment.dao.DatabaseDAO.getSession(DatabaseDAO.java:55)
        at simpleproj.assignment.dao.DatabaseDAO.deleteAssignmentList(DatabaseDAO.java:124)
        at simpleproj.assignment.AssignmentLoader.importData(AssignmentLoader.java:85)
        at simpleproj.assignment.AssignmentLoader.main(AssignmentLoader.java:49)
Caused by: java.lang.reflect.UndeclaredThrowableException
        at $Proxy7.getAutoCommit(Unknown Source)
        at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromConnection(DefaultSqlSessionFactory.java:99)
        ... 5 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at blackboard.db.ConnectionManager$ConnectionProxy.invoke(ConnectionManager.java:1419)
        ... 7 more
Caused by: java.sql.SQLException: Connection oracle.jdbc.driver.LogicalConnection@1627c16 is closed.
        at org.apache.commons.dbcp.DelegatingConnection.checkOpen(DelegatingConnection.java:398)
        at org.apache.commons.dbcp.DelegatingConnection.getAutoCommit(DelegatingConnection.java:337)
        ... 11 more

person S.C.    schedule 18.05.2015    source แหล่งที่มา


คำตอบ (1)


จากข้อผิดพลาดนี้:oracle.jdbc.driver.LogicalConnection@1627c16 ถูกปิด การเชื่อมต่อนี้จะปิดเมื่อคุณส่งผ่านไปยัง sqlSessionFactoryBean คุณสามารถเรียก Connection.getAutoCommit() เพื่อทดสอบการเชื่อมต่อว่ารองรับธุรกรรมหรือไม่

person dknight    schedule 18.05.2015
comment
ทดสอบด้วย connection.getAutoCommit() แต่บรรทัดนี้แสดงข้อยกเว้นเดียวกัน Caused by: java.lang.reflect.UndeclaredThrowableException at $Proxy7.getAutoCommit(Unknown Source) - person S.C.; 20.05.2015