Reputation: 15
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