我坚持我遇到的每一个错误,并且通常总是找出解决方案。我发现散步很有帮助。但是这个让我很难过,我整天都盯着同样的错误。就像 Ticcie 在指定的无效 Oracle URL 中一样:OracleDataSource.makeURL建议,错误消息无助于理解什么是错误的。
SEVERE: Exception during lifecycle processing
org.glassfish.deployment.common.DeploymentException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: Invalid Oracle URL specified: OracleDataSource.makeURL
Error Code: 0
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:762)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204)
我正在为 Java EE 7 EAR 应用程序进行 Arquillian 集成测试。使用 JPA 和 DerbyDb 进展顺利,但我现在需要测试 Native Oracle DB (11g) SQL。所以我设置了一个新的测试项目来使用 EclipseLink 连接到 OracleDB。
我可以通过 Eclipse IDE 数据源资源管理器连接到数据库并 ping 它没有问题。
我确实连接到 Glassfish 中的姊妹 Oracle 数据库并且 ping 它没有问题。
但是 Arquillian 测试无法通过上述模棱两可的错误连接到它。如果错误说明究竟是什么问题,那就太好了。
我使用与 Eclipse IDE 数据源资源管理器完全相同的 URL:
jdbc:oracle:thin:@marina.work.com:1521:orcl
Arquillian 设置与我为 DerbyDb 所做的设置相同(与http://arquillian.org/guides/testing_java_persistence/几乎相同),OracleDB 有以下变化:
src/main/resources-glassfish-embedded/sun-resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<jdbc-resource pool-name="ArquillianOraclePool" jndi-name="jdbc/arquillian" />
<jdbc-connection-pool name="ArquillianOraclePool" res-type="javax.sql.DataSource" datasource-classname="oracle.jdbc.pool.OracleDataSource"
is-isolation-level-guaranteed="false" >
</jdbc-connection-pool>
</resources>
src/main/resources-glassfish-embedded/test-persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="esaarch01-pu" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/arquillian</jta-data-source>
<jar-file>test.jar</jar-file>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.Url" value="jdbc:oracle:thin:@marina.work.com:1521:orcl" />
<property name="javax.persistence.jdbc.Password" value="demo" />
<property name="javax.persistence.jdbc.User" value="test" />
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" /> <!-- driver. -->
<property name="javax.persistence.jdbc.platform" value="org.eclipse.persistence.platform.database.oracle.OraclePlatform" />
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.level.sql" value="FINE" />
</properties>
</persistence-unit>
</persistence>
我在properties
元素中引入了诸如文本之类的 XML 格式正确错误并收到以下错误。这表明该文件被拾取用于正确的目的:
java.io.IOException: org.xml.sax.SAXParseException; lineNumber: 21; columnNumber: 16; Deployment descriptor file META-INF/persistence.xml in archive [test.jar]. cvc-complex-type.2.3: Element 'properties' cannot have character [children], because the ...
我尝试了不同的属性名称,但没有一个更改错误消息。这让我认为 URL 属性根本没有被拾取。
我尝试了 URL 的不同变体(使用匹配的名称和密码模块):
javax.persistence.jdbc.url URL Url (three variations)
eclipselink.jdbc.url URL Url (three variations)
没有变化有效。同样的错误。
如果异常可以更具体地说明它可以找到什么和找不到什么,那就太好了。
我的问题是,谁能告诉我解决方案或建议出了什么问题,或者我可以尝试找出问题所在?
更新
我已经在 Oracle 论坛上发布了这个问题,并包含了整个堆栈跟踪和示例最小代码以及一些说明。如果有人热衷于看它,我将不胜感激。