ArgumentException: драйвер JDBC или класс DataSource - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь создать простое веб-приложение с бэкэндом MySQL. Я могу развернуть свой год в Джеронимо. Однако, когда я отправляю свою форму, чтобы сохранить некоторые данные в БД через OpenJPA, я получаю следующую ошибку (ниже моя трассировка стека):

Причина: org.apache.openjpa.persistence.ArgumentException: в свойстве ConnectionDriverName должно быть указано имя класса драйвера JDBC или класса DataSource.

Мой проект - это проект корпоративных приложений (AReyes) с веб-модулем (AReyesAdminWeb) и модулем ejb (AReyesEJB).

Моя настойчивость. Xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
    <persistence-unit name="AReyesPersistUnit" transaction-type="JTA">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>AReyesMySql</jta-data-source>
        <class>com.areyes.entity.Admin</class>
        <properties>
            <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
        </properties>
    </persistence-unit>
</persistence>

Файл находится в AReyesEJB / ejbModule / META-INF

Что я использую

  • Geronimo 2.2.1 с Tomcat 6
  • MySQL 5.5.11
  • OpenJPA 1.2.2
  • Eclipse Indego Release
  • OS X 10.6.7

StackTrace

Caused by: org.apache.openejb.OpenEJBException: Error while creating bean com.areyes.session.AdminManager: Error invoking constructor: public com.areyes.session.AdminManager()
    at org.apache.openejb.InjectionProcessor.construct(InjectionProcessor.java:120)
    at org.apache.openejb.InjectionProcessor.createInstance(InjectionProcessor.java:83)
    at org.apache.openejb.core.stateless.StatelessInstanceManager.ceateInstance(StatelessInstanceManager.java:204)
    at org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:165)
    at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
    at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:282)
    ... 23 more
Caused by: org.apache.xbean.recipe.ConstructionException: Error invoking constructor: public com.areyes.session.AdminManager()
    at org.apache.xbean.recipe.ReflectionUtil$ConstructorFactory.create(ReflectionUtil.java:962)
    at org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:276)
    at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
    at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
    at org.apache.openejb.InjectionProcessor.construct(InjectionProcessor.java:118)
    ... 30 more
Caused by: <openjpa-1.2.2-r422266:898935 fatal user error> org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.
    at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:74)
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:784)
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:561)
    at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1344)
    at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:505)
    at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:430)
    at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
    at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
    at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
    at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:863)
    at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:854)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:183)
    at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
    at com.areyes.session.AdminManager.<init>(AdminManager.java:22)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.xbean.recipe.ReflectionUtil$ConstructorFactory.create(ReflectionUtil.java:952)
    ... 34 more

com.areyes.session.AdminManager - это бин @Stateless, который был внедрен в сервлет в AReyesAdminWeb (с @EJB anno). Вот строитель:

@Stateless
public class AdminManager implements AdminService {
    private EntityManagerFactory fac;
    private EntityManager em;

    public AdminManager () {
        fac = Persistence.createEntityManagerFactory("AReyesPersistUnit", System.getProperties());
        em = fac.createEntityManager();
    }

Мне кажется, что мое веб-приложение не знает о моем файле persistence.xml в моем приложении ejb. Интересно, правильно ли я все собрал.

Я добавил это в мой application.xml:

  <module>
    <connector>tranql-connector-mysql-local-1.5.rar</connector>
  </module>

Затем я добавил это в свой geronimo-application.xml:

<app:module>
    <app:connector>tranql-connector-mysql-local-1.5.rar</app:connector>
    <app:alt-dd>mysql-plan.xml</app:alt-dd>
</app:module>

В моем проекте EA (AReyes) я добавил mysql-plan.xml в ту же папку с моим META-INF. Затем я импортировал файл tranql-connector-mysql-local-1.5.rar из папки Geronimo.

1 Ответ

0 голосов
/ 24 июня 2011

Похоже, что веб-приложение не может найти файл persistence.xml в своем пути к классам. Из чтения этой темы вы можете столкнуться с той же проблемой. Попробуйте переместить файл persistence.xml в следующее место и посмотрите, как вы это сделаете ...

WEB-INF/classes/META-INF/persistence.xml
...