2012-04-06 4 views
0

Я потратил значительное время на изучение и попытку выяснить, где я поступил неправильно с моей конфигурацией, но я полностью застрял. Из сообщений, которые я читал, подразумевается, что мой драйвер не находится в пути к классам. Я добавил строку Class.forName ("com.ibm.db2.jcc.DB2Driver"), чтобы убедиться, что драйвер доступен, и он загружается в этой строке. Я был бы очень признателен за любые предложения относительно того, что я, возможно, пропустил.Указанный драйвер JDBC com.ibm.db2.jcc.DB2Driver класс не найден

мой код:

public class TestHibernateConfig { 

    private static SessionFactory sessionFactory; 

    public static void testConfig() { 
     try { 
      DB2Driver drvr = (DB2Driver) Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance(); 

      Configuration cfg = new Configuration(); 
      cfg.configure("hibernate.cfg.xml"); 
      sessionFactory = cfg.buildSessionFactory(); 
      Session sess = sessionFactory.getCurrentSession(); 
      Transaction tx = sess.beginTransaction(); 

      Criteria crit = sess.createCriteria(ItemData.class); 
      List items = crit.list(); 

     } catch (Exception e) { 
      Logger logger = Logger.getLogger(""); 
      logger.error(e.getMessage()); 
     } 
    } 
} 

Я получаю класс не найдена ошибка, когда мой код попадает: SessionFactory = cfg.buildSessionFactory();

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory name="speed2db2"> 
<property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property> 
    <property name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property> 
    <property name="hibernate.connection.url">jdbc:db2://appdb:50000/MYTEST</property> 
    <property name="hibernate.connection.username">myUser</property> 
    <property name="hibernate.connection.password">myPass</property> 
</session-factory> 
</hibernate-configuration> 

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="speedPersistUnit"> 
     <class>ItemData</class> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/> 
      <property name="hibernate.connection.url" value="jdbc:db2://appdb:50000/MYTEST"/> 
      <property name="hibernate.default_schema" value="MYSCHEMA"/> 
      <property name="hibernate.connection.username" value="myUser"/> 
      <property name="hibernate.connection.password" value="myPass"/> 
      <property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Изнутри Eclipse, я могу подключиться к базе данных и если я иду в перспективе Hibernate, я могу просмотрите схему базы данных. Я также могу использовать редактор HQL для загрузки данных в моем классе.

Edit:

09:35:50,338 INFO [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000043: Configuring from resource: /com/newpig/speed2DB2/hibernate.cfg.xml 
09:35:50,340 INFO [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000040: Configuration resource: /com/newpig/speed2DB2/hibernate.cfg.xml 
09:35:50,369 INFO [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000041: Configured SessionFactory: speed2db2 
09:35:52,059 INFO [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000402: Using Hibernate built-in connection pool (not for production use!) 
09:36:16,856 ERROR [] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) Specified JDBC Driver com.ibm.db2.jcc.DB2Driver class not found 

ошибка происходит на этой линии.

sessionFactory = cfg.buildSessionFactory(); 

Развернутые в мой .war файл:
.WAR
| -WEB-INF
|| -lib
||| -db2jcc4.jar
||| -hibernate-core- 4.1.2.Final.jar
||| -hibernate-EntityManager-4.1.2.Final.jar
||| -hibernate-JPA-2,0-апи-1.0.1.Final.jar

+0

где вы получаете сообщение об ошибке и можете ли вы поделиться соответствующей трассировкой стека или другими формами журнала? – aishwarya

+0

Я добавил трассировку стека. Он показывает, что загружается файл конфигурации. – SteveS

ответ

1

Не думаю, что я упомянул, что использую JBoss7.1. В конце концов, я не смог понять, почему Hibernate не смог загрузить драйвер, но обошел его, переключившись на использование JNDI и настроив источник данных в файле Jaboss standalone.xml вместо того, чтобы пытаться подключиться к Hibernate.

0

Я думаю, это может быть потому, что hibernate.cfg.xml находится в неправильном месте , Вы должны проверить, есть ли это в вашем пути к классам, или вы можете попробовать добавить classpath в свой вызов метода, как это.

SessionFactory sessionFactory = new Configuration().configure(
        "/com/mkyong/persistence/hibernate.cfg.xml") 
        .buildSessionFactory();

+0

Спасибо за ответ. Я попытался переместить мой файл конфигурации и ссылаться на него с помощью пути, который вы покажете. У меня такая же проблема. Вы можете видеть в моем правлении выше, что он находит файл конфигурации. Я подтвердил, что db2jcc4.jar находится в папке lib в моем .war на сервере. Кроме того, как указано, Class.forName() правильно загружает драйвер. Я также подтвердил правильность URL. – SteveS

Смежные вопросы