Интеграция Тестирование объекта доступа к данным OpenJPA или сервисного фасада? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть проект, который я строю, используя struts2 и openJPA.Я хочу провести интеграционное тестирование, но у меня, похоже, возникла проблема с его запуском.

persistence.xml

<persistence-unit name="SalesCertIT" transaction-type="RESOURCE_LOCAL">
    <jta-data-source>jdbc/salesCertIT</jta-data-source>
    <class>com.ist.salesCert.entities.Certification</class>
    <properties>
        <property name="log4j" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE" />
        <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
        <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/sales_certification" />
        <property name="openjpa.ConnectionUserName" value="dev" />
        <property name="openjpa.ConnectionPassword" value="password" />
        <property name="openjpa.Id" value="SalesCertIT" />
        <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" />
    </properties>
</persistence-unit>

class:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("SalesCertIT");
EntityManager em = emf.createEntityManager();

Iполучить ошибку:

В свойстве ConnectionDriverName должно быть указано имя класса драйвера JDBC или класса DataSource.

Я добавил оба файла persistence.xml и mysql-connector-java- * -stable-bin-jar для пути к классам, (Eclipse-> Debug Configuration-> Classpath-> Bootstrap записи)

Если я пытаюсь настроить его во время выполнения, он делаетработать, но затем я получаю еще одну ошибку при попытке выполнить операцию:

HashMap<String, String> conf = new HashMap<String, String>();
conf.put("openjpa.ConnectionDriverName", "com.mysql.jdbc.Driver");
conf.put("openjpa.ConnectionURL", "jdbc:mysql://localhost:3306/sales_certification");
conf.put("openjpa.ConnectionUserName", "dev");
conf.put("openjpa.ConnectionPassword", "password");
conf.put("openjpa.TransactionMode", "local");
conf.put("openjpa.Id", "SalesCertIT");      
EntityManagerFactory emf = Persistence.createEntityManagerFactory("SalesCertIT", conf);
EntityManager em = emf.createEntityManager();

Тип "class com.ist.salesCert.entities.Certification" не был улучшен.

Я попытался добавить аргумент javaagent: (Eclipse-> Debug Configurations-> Arguments-> VM arguments)

-javaagent: C: / Progra ~ 1 / IBM / WebSphere / AppServer/plugins/com.ibm.ws.jpa.jar

На данный момент я не знаю, что еще попробовать.Есть идеи?

1 Ответ

0 голосов
/ 04 августа 2012

Одна проблема заключалась в том, что я пытался придерживаться спецификаций JEE6, но openjpa 2 на websphere 7 - это J2EE.Окончательное решение, которое я нашел для улучшения моих сущностей openjpa, заключалось в использовании maven с плагином openjpa:

        <!-- openjpa plugin -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>openjpa-maven-plugin</artifactId>
            <version>1.2</version>
            <configuration>
                <includes>com/ist/salesCert/entities/*.class</includes>
                <excludes>com/ist/salesCert/entitles/Quarters.class</excludes>
                <addDefaultConstructor>true</addDefaultConstructor>
                <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
                <persistenceXmlFile>WebRoot/META-INF/persistence.xml</persistenceXmlFile>
                <detail>true</detail>
            </configuration>
            <executions>
                <execution>
                    <id>enhancer</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>enhance</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Тогда эта команда улучшит сущности:

mvn openjpa:enhance

Примечание: есть и другиезависимости, которые должны быть в файле pom.xml

...