【问题标题】:Unable to connect to database with JUNIT and OPENJPA无法使用 JUNIT 和 OPENJPA 连接到数据库
【发布时间】:2015-08-01 01:51:24
【问题描述】:

我在使用我的 JUNIT 代码连接到 Oracle 数据库时遇到问题(默认情况下它会尝试连接到 HSQL)。我使用 openjpa 作为持久性提供程序。我尝试了多种方法,包括在 persistence.xml 中指定连接设置和在测试类中指定连接设置。

    public class CollateralHandlerTest {

    private static InitialContext ctx;

    @BeforeClass
    public static void initContainer() throws Exception {
        final Properties props = new Properties();
        props.put("tomee.ejbcontainer.http.port", 1800);
        props.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
        props.put("ProvAppCLJPA.openjpa.ConnectionURL", "jdbc:oracle:thin:@localhost:1521:XE");
        props.put("ProvAppCLJPA.openjpa.ConnectionPassword", "XXXX");
        props.put("ProvAppCLJPA.openjpa.ConnectionDriverName", "oracle.jdbc.OracleDriver");
        props.put("ProvAppCLJPA.openjpa.ConnectionUserName", "PROVAPPCL_DE");
        ctx = new InitialContext(props);

    }

    @Test
    public void testCollateralHandler() throws NamingException, ProvAppException {
        Object object = ctx.lookup("CollateralHandlerLocal");
        assertTrue(object instanceof ICollateralHandler);
        ICollateralHandler collHandler = (ICollateralHandler) ctx.lookup("CollateralHandlerLocal");
        List<Customer> cust = collHandler.getAllCollateral("XXXX");
    }
}

执行时测试方法的最后一行出现错误

 final Query query = entityManager.createNamedQuery("");
    query.getResultList();

在“getAllCollat​​eral”函数中。

我得到以下异常

 <openjpa-2.2.0-r422266:1244990 fatal user error> org.apache.openjpa.util.UserException: A connection could not be obtained for driver class "null" and URL "null".  You may have specified an invalid URL.
        at org.apache.openjpa.jdbc.schema.DataSourceFactory.newConnectException(DataSourceFactory.java:255)
        at org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:241)
   --Cut Short 
    Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (invalid authorization specification - not found: SA)
        at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
    --Cut Short
    Caused by: java.sql.SQLInvalidAuthorizationSpecException: invalid authorization specification - not found: SA
        at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
        at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
        at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
        at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
        at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
        --Cut Short
    Caused by: org.hsqldb.HsqlException: invalid authorization specification - not found: SA
        at org.hsqldb.error.Error.error(Unknown Source)
        at org.hsqldb.error.Error.error(Unknown Source)
        at org.hsqldb.rights.UserManager.get(Unknown Source)
        at org.hsqldb.rights.UserManager.getUser(Unknown Source)
        at org.hsqldb.Database.connect(Unknown Source)
        at org.hsqldb.DatabaseManager.newSession(Unknown Source)
        ... 130 more

它以某种方式尝试将 HSQL db 作为数据库,但我不知道为什么它不选择 oracle 设置。 我也浏览了以下网址

http://openjpa.apache.org/testing.html

并尝试在 VM 参数中设置连接属性。 请帮忙!!!

【问题讨论】:

  • 我不完全确定如何解决您的问题,但我很确定您获得 HSQL 的原因是因为它是未配置的 TomEE 后备数据库。

标签: oracle jakarta-ee junit hsqldb openjpa


【解决方案1】:

我通过以下配置让它工作。虽然我仍然不知道为什么它不适用于 openjpa 设置。

protected void setUp() throws Exception
    {
        final Properties props = new Properties();
        props.put("tomee.ejbcontainer.http.port", 1800);
        props.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
        props.put("ProvAppCLJPA", "new://Resource?type=DataSource");
        props.put("ProvAppCLJPA.JdbcUrl", "jdbc:oracle:thin:@localhost:1521:XE");
        props.put("ProvAppCLJPA.Password", "XXX");
        props.put("ProvAppCLJPA.JdbcDriver", "oracle.jdbc.OracleDriver");
        props.put("ProvAppCLJPA.UserName", "PROVAPPCL_DE");
        props.put("ProvAppCLJPA.JtaManaged", "true");

        ctx = new InitialContext(props);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2015-03-09
    • 2018-05-28
    • 2021-01-20
    • 2017-03-12
    相关资源
    最近更新 更多