I am upgrading my spring boot application to version 3 and Java 17. I have already installed Java 17 liberty patch on websphere liberty server and enabled few features in server.xml like below
<featureManager>
<feature>servlet-6.0</feature>
<feature>ssl-1.0</feature>
<feature>ldapRegistry-3.0</feature>
<feature>zosLocalAdapters-1.0</feature>
<feature>zosTransaction-1.0</feature>
<feature>jdbc-4.3</feature>
<feature>jndi-1.0</feature>
<feature>springBoot-3.0</feature>
<feature>monitor-1.0</feature>
<feature>mpMetrics-5.0</feature>
<feature>enterpriseBeans-4.0</feature>
but when I trying to deploy my spring boot ear to server. it is throwing an exception
Caused by: java.lang.ClassNotFoundException: CWWKL0084W: The javax.transaction.Synchronization class could not be loaded. Try enabling the jdbc-4.0 feature or a newer version of the feature in the server.xml file.
at com.ibm.ws.classloading.internal.util.FeatureSuggestion.getExceptionWithSuggestion(FeatureSuggestion.java:118) ~[na:na]
at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:606) ~[na:na]
at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:553) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1095) ~[na:na]
... 84 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.transaction.Synchronization
at com.ibm.ws.classloading.internal.AppClassLoader.findClassCommonLibraryClassLoaders(AppClassLoader.java:742) ~[na:na]
at com.ibm.ws.classloading.internal.AppClassLoader.findClass(AppClassLoader.java:327) ~[na:na]
at com.ibm.ws.classloading.internal.AppClassLoader.findOrDelegateLoadClass(AppClassLoader.java:714) ~[na:na]
at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:586) ~[na:na]
... 86 common frames omitted
below are the dependacies of my spring app
dependencies {
implementation project(":sofa-domain")
implementation project(":sofa-business-api")
implementation platform("org.springframework.boot:spring-boot-dependencies:$springBootVersion")
implementation("org.springframework.boot:spring-boot-starter-log4j2:$springBootVersion") {
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j2-impl'
}
implementation("org.springframework.boot:spring-boot-starter-web") {
exclude group: 'org.apache.tomcat', module: "spring-boot-starter-tomcat"
}
implementation('com.fasterxml.jackson.core:jackson-databind:2.16.1')
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.1")
providedCompile("jakarta.ejb:jakarta.ejb-api:4.0.1")
providedCompile("jakarta.resource:jakarta.resource-api:2.1.0")
implementation("jakarta.validation:jakarta.validation-api:$validationApiVersion")
implementation("io.springfox:springfox-swagger2:$springfoxVersion")
implementation("io.springfox:springfox-swagger-ui:$springfoxVersion")
implementation("io.springfox:springfox-bean-validators:$springfoxVersion")
implementation('com.ibm.websphere.appserver.features:zosLocalAdapters-1.0:24.0.0.1')
implementation('com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.zosLocalAdapters.jakarta:1.0.86'){
exclude group: 'javax.servlet', module:'javax.servlet-api'
exclude group: 'io.openliberty.features', module: 'io.openliberty.servlet.api'*/
}
implementation('com.ibm.websphere.appserver.features:zosSecurity-1.0:24.0.0.1'){
exclude group: 'io.openliberty.features', module: 'com.ibm.websphere.appserver.eeCompatible'
exclude group: 'io.openliberty.features', module: 'io.openliberty.servlet.api'
}
implementation("com.google.guava:guava:$guavaVersion")
implementation 'org.glassfish.expressly:expressly:5.0.0'
implementation group: 'javax.transaction', name: 'jta', version: '1.1'
compileOnly("org.projectlombok:lombok:$lombokVersion")
annotationProcessor("org.projectlombok:lombok:$lombokVersion")
testCompileOnly("org.projectlombok:lombok:$lombokVersion")
testAnnotationProcessor("org.projectlombok:lombok:$lombokVersion")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.spockframework:spock-core:$spockVersion")
testImplementation("org.spockframework:spock-spring:$spockVersion")
implementation("org.spockframework:spock-junit4:$spockVersion")
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
providedRuntime("com.ibm.db2.jcc:db2jcc:db2jcc4")
runtimeOnly ("org.postgresql:postgresql:42.7.0")
implementation("org.hibernate.validator:hibernate-validator:$validationImplVersion")
implementation 'org.zalando:problem-spring-web-starter:0.29.1'
}
I tried following after searching over internet
- Added jta dependancy in gradle but did not work
- Added persistence-1.0 and not luck
I have almost exhausted with options so seeking some expert help here.
So, Just to summarise the solution of issue & As Hakan rightly said it was indeed dependencies relay issue.
I excluded problematic one from gradle using exclude and that resolved my problem.