Hi everyone,

after the heaty discussion between two senior openejb commiters on irc I am totally confused and am begging for your help, dear community.

Up to now my (wrong) understanding about OpenJPA enhancement was this:

So that your maven tests work do following:
1. enhance your @Entities with org.apache.openjpa:openjpa-maven-plugin in process-test-classes phase; 2. make org.apache.openejb:openejb-javaagent available to surefire/failsafe plugins by copying javaagent jar to ${project.build.directory} 3. provide javaagent as argument when running surefire/failsafe plugins like this:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.13</version>
        <configuration>
<argLine>-javaagent:${project.build.directory}/openejb-javaagent-${openejb.version}.jar</argLine>
<workingDirectory>${project.build.directory}</workingDirectory>
        </configuration>
    </plugin>

That's it, now this should work (and it works for me for the most of scenarios).

Now I have new scenario: I want to test my worker (built as a worker.jar to be later packaged in an worker-ear.ear together with all the dependencies to be deployed into openejb standalone container). This worker depends on entities.jar (built as entities.jar) that contains classes for @Entities and orm.xml that lists those classes like this:

    <entity-mappings>
        <mapped-superclass class="my.AbstractBaseEntity" />
        <entity class="my.Permission" />
    </entity-mappings>

This way I have to provide only persistence.xml within META-INF of my worker.jar. This persistence.xml reffers orm.xml like this:

    <mapping-file>META-INF/orm.xml</mapping-file>
    <jar-file>entities.jar</jar-file>

When launching maven this leads to: Failed to execute goal org.apache.openjpa:openjpa-maven-plugin:2.2.0:test-enhance (enhancer) on project worker: Execution enhancer of goal org.apache.openjpa:openjpa-maven-plugin:2.2.0:test-enhance failed: org.apache.openjpa.persistence.PersistenceProductDerivation:java.lang.IllegalArgumentException: The jar resource "entities.jar" cannot be loaded. -> [Help 1]

Ah ok, so it does not sees entities.jar (since they are not being copied since worker itself is jar).

So I add to worker.pom following

            <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
                <version>2.7</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
<useBaseVersion>true</useBaseVersion>
                            <artifactItems>
                                <artifactItem>
<groupId>my</groupId>
<artifactId>entities</artifactId>
<version>1.0.0-SNAPSHOT</version>
<outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

And get this: Failed to execute goal org.apache.openjpa:openjpa-maven-plugin:2.2.0:test-enhance (enhancer) on project worker: Execution enhancer of goal org.apache.openjpa:openjpa-maven-plugin:2.2.0:test-enhance failed: java.io.FileNotFoundException: file:\pathtomy\.m2\repository\my\entities\1.0.0-SNAPSHOT\entities-1.0.0-SNAPSHOT.jar!\my\Permission.class (The filename, directory name or volume label syntax is incorrect) -> [Help 1]

Apparently it found the entities.jar, but now is unable to find entity Permission in entities.jar (because it requires jar to be unpacked?).

Well, I am out of ideas and would be happy if someone could hint me on how to correctly configure maven so that my testcases get enhanced entities from entities.jar

Thank you very much, guys,
Reinis

Reply via email to