Получение ошибки Указан неверный URL-адрес Oracle: OracleDataSource.makeURL
Я получаю сообщение об ошибке при попытке запустить приложение на сервере. Я подаю в суд на сервер-затмение 4. Я сделал файл glassfish-resources.xml и поместил его в каталог WEB-INF. Когда я пытаюсь запустить на сервере. Я получаю следующее исключение
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.exceptions.DatabaseException.sqlException(DatabaseException.java:316)
at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:135)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:307)
.....
Вот мой файл glassfish-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-connection-pool name="java:app/myOracleConnectionPool"
res-type="javax.sql.ConnectionPoolDataSource"
datasource-classname="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<property name="User" value="system" />
<property name="Port" value="1521" />
<property name="DatabaseName" value="XE" />
<property name="ServerName" value="127.0.0.1" />
<property name="Url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
<property name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
<property name="Password" value="xxxx" />
</jdbc-connection-pool>
<jdbc-resource enabled="true"
jndi-name="java:app/jdbc/myOracleDatasource"
object-type="user"
pool-name="java:app/myOracleConnectionPool">
<description />
</jdbc-resource>
</resources>
вот мой файл persistence.xml
<persistence-unit name="chapter11PU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:app/jdbc/myOracleDatasource</jta-data-source>
<properties>
<property name="eclipselink.target-database" value="Oracle"/>
<property name="javax.persistence.schema-generation-action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation-target" value="scripts"/>
<property name="javax.persistence.ddl-create-script-target" value="createfoo.sql"/>
<property name="javax.persistence.ddl-drop-script-target" value="dropfoo.sql"/>
<property name="eclipselink.deploy-on-startup" value="true"/>
<property name="eclipselink.application-location" value="/tmp"/>
<!-- To log SQL queries -->
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
Я также положил ojdbc6.jar в папку lib/ext. Я использую oracle 11g release 2. Почему я получаю неверную ошибку URL?
Я также проверил соединение в SQL Developer, и оно работает, с системой пользователя и моим паролем.
Спасибо
2 ответа
Похоже, вы ошибочно указали URL два раза, а имя свойства неверное.
<property name="Url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
<property name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
Так должно быть
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
Также было бы неплохо обратиться к документации Glassfish 4.1, чтобы получить правильные имена свойств, которые вы можете использовать в glassfish-resources.xml.
Для Glassfish 3.1 варианты приведены здесь
Я решил проблему. На самом деле я использую EJB 3.1, JSF 2.2, Java EE 7 и Glass Fish 4. Мой контроллер JSF вызывает EJB, которые выполняют операции CRUD. У меня есть что-то вроде этого в persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="chapter11PU" transaction-type="JTA">
<jta-data-source>java:app/jdbc/myOracleDatasource</jta-data-source>
<properties>
<property name="eclipselink.target-database" value="Oracle"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
<property name="eclipselink.create-ddl-jdbc-file-name" value="createDDL.sql"/>
<property name="eclipselink.drop-ddl-jdbc-file-name" value="dropDDL.sql"/>
<property name="eclipselink.application-location" value="E:/eclipse-kepler/workspace/Java EE 7/ch11_ProcessAndNavigation/src/main/resources/" />
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<!-- To log SQL queries -->
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
Замечания:
The "java:app/jdbc/myOracleDatasource" data source required by the persistence unit
must be created within the EJB container. And there are several ways to do so. The
simplest one is to have a @DataSourceDefinition annotation on any Managed Bean. The
container will deploy the bean and create the data source. Another way is to use the
GlassFish interface.
Так что я использовал что-то вроде этого на моем EJB
@Named
@Stateless
@DataSourceDefinition(
className = "oracle.jdbc.pool.OracleConnectionPoolDataSource",
name = "java:app/jdbc/myOracleDatasource",
user = "system",
password = "xxxx",
databaseName = "XE",
portNumber=1521,
properties={"url=jdbc:oracle:thin:@localhost:1521:XE"}
)
public class BookEJB {
....
}
Чего мне не хватало, так это properties={"url=jdbc:oracle:thin:@localhost:1521:XE"}
приписывать. Так что это дало мне ошибку. После добавления этого атрибута @DataSourceDefinition
, Ошибка ушла и все начинает работать нормально.
Спасибо