user2402851
user2402851

Reputation: 15

Deployment issues - wildfly maven plugin bootable jar multi-module project

I have a multi module j2ee application and I am now trying to create a new module that will be an attempt to package a bootable jar together with a wildfly in order to create a smaller, more isolated and less complex deployment artifact. This bootable jar will be triggered by a k8s cronjob and thus only needs to run temporarily and then be shut down after its job is done. Everything has been fine up until now when I am trying to deploy my jar in my bundled wildfly. I have 2 internal modules that I want to have access to from my bootable jar. What I noticed is that I need to use a plugin (maven-assembly or maven-shade) to get my internal modules to be bundled together in my final jar. However both maven-assembly and maven-shade seem to give me the same issue upon deployment:

Failed to start service jboss.deployment.unit."final-name.jar".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."final-name.jar".WeldStartService: Failed to start service
        at [email protected]//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1731)
        at [email protected]//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
        at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
    at java.base/java.lang.reflect.Executable.getAllGenericParameterTypes(Executable.java:314)
    at java.base/java.lang.reflect.Parameter.getParameterizedType(Parameter.java:201)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedParameter.<init>(BackedAnnotatedParameter.java:52)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedParameter.of(BackedAnnotatedParameter.java:44)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedParameter.forExecutable(BackedAnnotatedParameter.java:38)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedCallable.initParameters(BackedAnnotatedCallable.java:42)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedCallable.<init>(BackedAnnotatedCallable.java:38)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedMethod.<init>(BackedAnnotatedMethod.java:29)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedMethod.of(BackedAnnotatedMethod.java:25)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.computeValue(BackedAnnotatedType.java:198)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.computeValue(BackedAnnotatedType.java:191)
    at [email protected]//org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$EagerlyInitializedLazyValueHolder.<init>(BackedAnnotatedType.java:159)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.<init>(BackedAnnotatedType.java:191)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.<init>(BackedAnnotatedType.java:191)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.<init>(BackedAnnotatedType.java:66)
    at [email protected]//org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.of(BackedAnnotatedType.java:47)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.apply(ClassTransformer.java:84)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.apply(ClassTransformer.java:79)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at [email protected]//org.jboss.weld.util.WeakLazyValueHolder$1.computeValue(WeakLazyValueHolder.java:35)
    at [email protected]//org.jboss.weld.util.WeakLazyValueHolder.get(WeakLazyValueHolder.java:53)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getCastValue(ReentrantMapBackedComputingCache.java:78)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:177)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:194)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.<init>(EnhancedAnnotatedTypeImpl.java:247)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.of(EnhancedAnnotatedTypeImpl.java:134)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:93)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:90)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at [email protected]//org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
    at [email protected]//org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:251)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.<init>(EnhancedAnnotatedTypeImpl.java:247)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.of(EnhancedAnnotatedTypeImpl.java:134)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:93)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:90)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at [email protected]//org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
    at [email protected]//org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:251)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.<init>(EnhancedAnnotatedTypeImpl.java:151)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.of(EnhancedAnnotatedTypeImpl.java:134)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:93)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:90)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at [email protected]//org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
    at [email protected]//org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:251)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.<init>(EnhancedAnnotatedTypeImpl.java:151)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.of(EnhancedAnnotatedTypeImpl.java:134)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:93)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:90)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at [email protected]//org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
    at [email protected]//org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:251)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.<init>(EnhancedAnnotatedTypeImpl.java:151)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.of(EnhancedAnnotatedTypeImpl.java:134)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:93)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:90)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at [email protected]//org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
    at [email protected]//org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:251)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.<init>(EnhancedAnnotatedTypeImpl.java:151)
    at [email protected]//org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.of(EnhancedAnnotatedTypeImpl.java:134)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:93)
    at [email protected]//org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:90)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at [email protected]//org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
    at [email protected]//org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at [email protected]//org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at [email protected]//org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:251)
    at [email protected]//org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:210)
    at [email protected]//org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:68)
    at [email protected]//org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:65)
    at [email protected]//org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:62)
    at [email protected]//org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:55)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
    at [email protected]//org.jboss.threads.JBossThread.run(JBossThread.java:513)

Here is my pom-file:

<parent>
    <groupId>com.test.me</groupId>
    <artifactId>happ</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<artifactId>test-job</artifactId>
<name>Test::Job</name>
<packaging>jar</packaging>

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>jakarta.inject</groupId>
        <artifactId>jakarta.inject-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.enterprise</groupId>
        <artifactId>jakarta.enterprise.cdi-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.spec.javax.ejb</groupId>
        <artifactId>jboss-ejb-api_3.2_spec</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.spec.javax.annotation</groupId>
        <artifactId>jboss-annotations-api_1.3_spec</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <!-- INTERNAL-->
    <dependency>
        <groupId>com.test.me</groupId>
        <artifactId>common</artifactId>
    </dependency>
    <dependency>
        <groupId>com.test.me</groupId>
        <artifactId>repository</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>${maven.shade.version}</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <shadedArtifactAttached>false</shadedArtifactAttached>
                        <finalName>${project.artifactId}-${project.version}</finalName>
                        <transformers>
                            <transformer implementation=
                                                 "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.test.me.JobExecutor</mainClass>
                            </transformer>
                        </transformers>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-maven-plugin</artifactId>
            <version>5.0.1.Final</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <bootable-jar>true</bootable-jar>
                <bootable-jar-name>test-job-bootable.jar</bootable-jar-name>
                <feature-packs>
                    <feature-pack>
                        <location>wildfly@maven(org.jboss.universe:community-universe)#22.0.1.Final</location>
                    </feature-pack>
                </feature-packs>
                <packaging-scripts>
                    <packaging-script>
                        <scripts>
                            <script>scripts/wf-ports.cli</script>
                            <script>scripts/add-user.cli</script>
                            <script>scripts/add-driver.cli</script>
                            <script>scripts/add-datasource-node.cli</script>
                        </scripts>
                    </packaging-script>
                </packaging-scripts>
            </configuration>
        </plugin>
    </plugins>

</build>

Here is my startup class:

import com.test.me.entity.TestEntity;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;

@Singleton
@Startup
public class TestJob {

  @Inject
  TestDao testDao;

  @PostConstruct
  public void onStartup() {

    TestEntity testEntity = testDao.getById(101L);

    System.out.println("ENTITY WITH ID: " + testEntity.getId());
    System.out.println("ENTITY WITH CURRENT VERSION ID: " + testEntity.getCurrentVersion().getId());
  }
}

I have a beans.xml (bean discovery mode = all) and persistence.xml in the resources folder.

If I run without maven shade or maven assembly plugins everything works fine but I dont get my internal modules packaged within my jar which is an issue. The exception doesn't really help me, anyone got any ideas?

Update 29/10

Changing the packaging to war seems to have made a difference and now I am no longer seeing the arrayIndex exception. Now my issue is that persistence.xml is not able to locate my entity classes unless i specify the full path to it via <class>.

Persistence.xml is placed under src/main/java/resource/META-INF. Looks like this:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="TestPU">
        <jta-data-source>java:jboss/datasources/test</jta-data-source>
<!--        <class>com.test.me.entity.TestEntity</class>-->
        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
        <properties>
            <property name="jboss.as.jpa.providerModule" value="org.hibernate:5.3"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.use_sql_comments" value="false"/>
            <property name="hibernate.generate_statistics" value="false"/>
            <property name="hibernate.default_batch_fetch_size" value="10"/>
            <property name="hibernate.id.new_generator_mappings" value="true"/>
            <property name="hibernate.archive.autodetection" value="class, hbm"/>
            <property name="hibernate.connection.charSet" value="UTF-8"/>
        </properties>
    </persistence-unit>
</persistence>

Output from running jar tf target/application-test.war:


META-INF/

WEB-INF/

WEB-INF/classes/

WEB-INF/classes/META-INF/


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

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

WEB-INF/classes/META-INF/version.properties

WEB-INF/classes/se/

WEB-INF/classes/se/tvv/

WEB-INF/classes/se/tvv/nyps/

WEB-INF/classes/se/tvv/nyps/JobExecutor.class

WEB-INF/classes/wildfly-modules/

WEB-INF/classes/wildfly-modules/com/

WEB-INF/classes/wildfly-modules/com/oracle/

WEB-INF/classes/wildfly-modules/com/oracle/ojdbc11/

WEB-INF/classes/wildfly-modules/com/oracle/ojdbc11/main/

WEB-INF/classes/wildfly-modules/com/oracle/ojdbc11/main/module.xml

WEB-INF/classes/wildfly-modules/com/oracle/ojdbc11/main/ojdbc11-
21.5.0.0.jar

WEB-INF/lib/

WEB-INF/lib/SparseBitSet-1.2.jar

WEB-INF/lib/animal-sniffer-annotations-1.14.jar

WEB-INF/lib/annotations-2.0.1.jar

**WEB-INF/lib/common.jar**

**WEB-INF/lib/repository.jar**

**com/test/me/entity/TestEntity.class**```

As you can see the entity class is listed as is the repository jar that it comes from.

Upvotes: 0

Views: 97

Answers (0)

Related Questions