【发布时间】: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();
在“getAllCollateral”函数中。
我得到以下异常
<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