2014-07-11 4 views
2

tomee 배포 응용 프로그램에서 다음 예외가 발생합니다.SQLException : Driver : org.hsqldb.jdbcDriver가 tomee의 URL에 대해 null을 반환했습니다.

[EL Severe]: 2014-07-11 09:18:34.811--ServerSession(860687693)--Thread(Thread[http-bio-8081-exec-3,5,main])--Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: java.sql.SQLException: Driver:[email protected] returned null for URL:"jdbc:mysql://localhost:3306/testDB" 
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.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:204) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:741) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:239) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:685) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:309) 
    at org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createEntityManager(ReloadableEntityManagerFactory.java:159) 
    at org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:115) 
    at org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:91) 
    at org.apache.openejb.persistence.JtaEntityManager.find(JtaEntityManager.java:164) 

을 heres 내 tomee.xml 파일,

<tomee> 
    <Resource id="testDBPool" type="DataSource"> 
    jdbcDriverClassName = "com.mysql.jdbc.Driver" 
    url = "jdbc:mysql://localhost:3306/testDB" 
    username = "admin" 
    password = "admin" 
    </Resource> 
</tomee> 

난 이미 내 tomee/lib에 폴더에 mysql_connector 항아리를 넣어. 다음과 같이 내 의 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="TestPersistence" 
     transaction-type="JTA"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>jdbc/testDBPool</jta-data-source> 
     <shared-cache-mode>NONE</shared-cache-mode> 
     <properties> 
      <property name="eclipselink.weaving" value="static" /> 
      <property name="eclipselink.logging.level.sql" value="FINEST" /> 
      <property name="eclipselink.logging.level" value="FINEST" /> 
      <property name="eclipselink.logging.level.cache" value="FINEST" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

나는 내가 잘못 위치를 이해하지 못하고, 내가 왜이 예외는 무엇입니까? 이 문제를 해결하도록 도와주세요.

+0

은 아마 관련이없는,하지만 : 당신은 MySQL을 사용하는 경우 당신은 왜 마이크로 소프트 SQL Server 드라이버 ('sqljdbc4')를 추가? –

+0

sqljdbc4.jar을 제거했지만 동일한 문제가 있습니다. –

+1

EclipseLink의 버그처럼 보이는 org.hsqldb.jdbcDriver는 mysql JDBC URL을 지원하지 않으므로 [java.sql.Driver.connect']의 javadoc에 지정된대로 null을 반환해야합니다 (http : //docs.oracle.com/javase/8/docs/api/java/sql/Driver.html#connect-java.lang.String-java.util.Properties-) : _ "드라이버는"null "을 반환해야합니다. 주어진 URL에 연결하는 것이 잘못된 종류의 드라이버라는 것을 깨닫습니다. "_ 또는 설정 오류가 발생하여 실제로 hsqldb를 사용하도록 구성되었지만 MySQL URL이있는 데이터 소스를 가리키고 있습니다. –

답변

3

문제는 잘못된 속성 이름을 사용하여 JDBC 드라이버를 선언하는 것입니다. Apache TomEE: DataSource Configuration에 따르면 드라이버 이름의 속성은 jdbcDriver이며 jdbcDriverClassName이 아닙니다. jdbcDriver의 기본값은 org.hsqldb.jdbcDriver입니다. 따라서 앞서 언급 한 것처럼 HSQLDB를 사용하여 연결을 만들려고하지만 MySQL JDBC URL을 사용하여 연결을 시도합니다. 문제가 구성을 변경 수정하려면

:

<tomee> 
    <Resource id="testDBPool" type="DataSource"> 
    jdbcDriver = "com.mysql.jdbc.Driver" 
    ... 
    </Resource> 
</tomee> 
+0

그 중 하나가 해결되었습니다,하지만 지금은 또 다른 예외에 직면하고 있습니다. 두 개의 연결 풀 'xyz'와 'abc'가 있습니다. 내가 abc.tableName을 던지고있다. 실제로 tableName이 abc가 아닌 xyz 스키마에 존재하지만 잘못된 스키마를 가리키는 이유는 무엇인가? –

+0

@milind 새 질문을 올리십시오. 자세한 내용을 입력하는 것이 좋습니다. –

관련 문제