DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workloads.

Related

  • How To Build Self-Hosted RSS Feed Reader Using Spring Boot and Redis
  • How to Import the Gradle Spring Boot Application in Eclipse? | Spring Boot Tutorial [Video]
  • How to Use Java to Build Single Sign-on
  • A Practical Guide to Creating a Spring Modulith Project

Trending

  • MySQL to PostgreSQL Database Migration: A Practical Case Study
  • Start Coding With Google Cloud Workstations
  • Infrastructure as Code (IaC) Beyond the Basics
  • How to Build Real-Time BI Systems: Architecture, Code, and Best Practices
  1. DZone
  2. Coding
  3. Frameworks
  4. Deploying Spring Boot 2.x Applications in WebLogic 12.1.3.1 Using Gradle Build

Deploying Spring Boot 2.x Applications in WebLogic 12.1.3.1 Using Gradle Build

Learn more about deploying Spring 2.x applications.

By 
Anish Panthi user avatar
Anish Panthi
·
Jan. 18, 19 · Tutorial
Likes (5)
Comment
Save
Tweet
Share
38.4K Views

Join the DZone community and get the full member experience.

Join For Free

Deploying Spring Boot 2.x applications in WebLogic Versions 12.2.x is simpler than deploying those in WebLogic 12.1.x using Gradle build. I was struggling with the deployment of 2.x applications in 12.1.x version of WebLogic. There is no issue if you use Maven to build. But, using the Gradle build is complicated. But, finally, after some research got the solution and deployed successfully. Today, I will demonstrate how to deploy 2.x applications in 12.1.x version of WebLogic. Let's start. For my project, I'm using below tech stack:

a. Gradle 4.5+
b. Spring Boot 2.1.1.RELEASE
c. Java 8
d. WebLogic 12.1.3.1
e. javax.servlet 4.0.1 (Excliptly defining because of older WebLogic)

1. Create a Project From Spring Initializer

Once you download your project, you will see below contents in build.gradle. I've already added the configurations to deploy on WebLogic Servers.

buildscript {

    ext {
        springBootVersion = '2.1.1.RELEASE'
    }

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("javax.servlet:javax.servlet-api:4.0.1")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'

group = 'com.app'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    providedRuntime
    compile.exclude module: 'spring-boot-starter-tomcat'
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-actuator')
    implementation('org.springframework.boot:spring-boot-starter-web')

    providedCompile('javax.servlet:javax.servlet-api:4.0.1')

    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}


There is some more configuration that needs to be done. I'm not going one by one here. Please check my earlier post on this. Let's deploy now. You will see below error:

Output Message From WebLogic Console:

AppMerge failed to merge your application. If you are running AppMerge on the command-line, merge again with the -verbose option for more details.


Output Message From WebLogic Console:

Unable to access the selected application. Error java.io.IOException Error weblogic.utils.compiler.ToolFailureException


For this, there was a bug (which was not a bug) post reported in Spring Boot Github Repo and following was the reply from one of the well known Spring Boot Developer, Andy Wilkinson.

"Spring Boot 2.0 requires Java 8. It would appear that your WebLogic Server, specifically the repackaged version of ASM that it is using, doesn’t support Java 8. If you are not in a position to upgrade WebLogic you’ll have to stick with Spring Boot 1.5."

So, I tried applying ASM patch from 12.2.x version. But, still it didn't worked. Then, I came to know that it is because of the incompatible log version which is by default added in Spring Boot:

spring-boot-starter-logging


2. Exclude spring-boot-starter-logging From Gradle:

...
...
...
configurations {
    providedRuntime
    compile.exclude module: 'spring-boot-starter-tomcat'
    all*.exclude module: 'spring-boot-starter-logging'
}
...
...
...


But still, deployment failed.

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
<Dec 15, 2018 1:22:37 PM CST> <Error> <org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter> <BEA-000000> <
***************************
APPLICATION FAILED TO START
***************************
...
...
...
Action:
Correct the classpath of your application so that it contains a single, compatible version of javax.validation.Configuration
<Dec 15, 2018 1:22:38 PM CST> <Error> <Deployer> <BEA-149265> <Failure occurred in the execution of deployment request with ID "101354633372978" for task "0". Error is: "weblogic.application.ModuleException: java.lang.NoSuchMethodException
javax.validation.Configuration.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;"
weblogic.application.ModuleException: java.lang.NoSuchMethodError: javax.validation.Configuration.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;
        at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
        at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:216)
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:211)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
        Truncated. see log file for complete stacktrace
Caused By: java.lang.NoSuchMethodError: javax.validation.Configuration.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;
        at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.configureParameterNameProvider(LocalValidatorFactoryBean.java:314)
        at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:290)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
        Truncated. see log file for complete stacktrace


3. Add javax.validation:validation-api:2.0.1.Final Dependency:

dependencies {
    ...
    providedCompile('javax.servlet:javax.servlet-api:4.0.1')
    compile('javax.validation:validation-api:2.0.1.Final')
    ...
}

Still, deployment failed with below errors:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
<Dec 15, 2018 1:36:41 PM CST> <Error> <org.springframework.boot.SpringApplication> <BEA-000000> <Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultValidator' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]: Factory method 'defaultValidator' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/el/ELManager
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
        Truncated. see log file for complete stacktrace

Caused By: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]: Factory method 'defaultValidator' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/el/ELManager
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
        Truncated. see log file for complete stacktrace
Caused By: java.lang.NoClassDefFoundError: javax/el/ELManager
        at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:88)
        at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:47)
        at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolator(ConfigurationImpl.java:474)
        at org.springframework.boot.validation.MessageInterpolatorFactory.getObject(MessageInterpolatorFactory.java:54)
        at org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration.defaultValidator(ValidationAutoConfiguration.java:57)
        Truncated. see log file for complete stacktrace


4. Add javax.el:javax.el-api:3.0.0 Dependency:

dependencies {
    ...
    compile('javax.el:javax.el-api:3.0.0')
    ...
}


But still, it got failed with below errors:

Caused by: java.lang.IllegalAccessError: javax/el/ELUtil
        at javax.el.ELManager.getExpressionFactory(ELManager.java:61)
        at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:88)
        at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:47)
        at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolator(ConfigurationImpl.java:474)
        at org.springframework.boot.validation.MessageInterpolatorFactory.getObject(MessageInterpolatorFactory.java:54)
        at org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration.defaultValidator(ValidationAutoConfiguration.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ...


5. Add Compatible hibernate-validator Dependency:

After some research, I came to know that this error was because of the incompatible issue of hibernate-validator. Add below dependency in build.gradle and try deploying. This time, the application will deploy successfully.

dependencies {
    ...
    ...
    compile('org.hibernate:hibernate-validator:5.4.1.Final')
    ...
    ...
}

 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.1.RELEASE)

Dec 15, 2018 1:43:56 PM org.springframework.boot.StartupInfoLogger logStarting
INFO: Starting ServletInitializer on *** with PID 15804 (C:\Users\***\Documents\Oracle\user_projects\domains\***\servers\AdminServer\tmp\_WL_user\spring-boot-2x-demo-0.0.1-SNAPSHOT\emnq38\war\WEB-

.jar started by *** in C:\Users\***\Documents\Oracle\user_projects\domains\***)

Dec 15, 2018 1:43:56 PM org.springframework.boot.SpringApplication logStartupProfileInfo
INFO: No active profile set, falling back to default profiles: default
Dec 15, 2018 1:44:00 PM org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext prepareWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 3152 ms
Dec 15, 2018 1:44:02 PM org.springframework.scheduling.concurrent.ExecutorConfigurationSupport initialize
INFO: Initializing ExecutorService 'applicationTaskExecutor'
Dec 15, 2018 1:44:03 PM org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver <init>
INFO: Exposing 2 endpoint(s) beneath base path '/actuator'
Dec 15, 2018 1:44:03 PM org.springframework.boot.StartupInfoLogger logStarted
INFO: Started ServletInitializer in 7.442 seconds (JVM running for 1452.507)
Dec 15, 2018 1:44:34 PM org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: Initializing Servlet 'dispatcherServlet'
Dec 15, 2018 1:44:34 PM org.springframework.web.servlet.FrameworkServlet initServletBean

INFO: Completed initialization in 24 ms

<Dec 15, 2018 1:44:41 PM CST> <Warning> <Socket> <BEA-000449> <Closing the socket, as no data read from it on 0:0:0:0:0:0:0:1:57,128 during the configured idle timeout of 5 seconds.>


This time, the application deployed successfully. To test this deployment, I've added spring-boot-starter-actuator library. Go ahead and access the below URL. I'm running my domain in port 7103.

You should see below output:

{
    "_links": {
        "self": {
            "href": "http://localhost:7103/app/api/actuator",
            "templated": false
        },
        "health": {
            "href": "http://localhost:7103/app/api/actuator/health",
            "templated": false
        },
        "health-component": {
            "href": "http://localhost:7103/app/api/actuator/health/{component}",
            "templated": true
        },
        "health-component-instance": {
            "href": "http://localhost:7103/app/api/actuator/health/{component}/{instance}",
            "templated": true
        },
        "info": {
            "href": "http://localhost:7103/app/api/actuator/info",
            "templated": false
        }
    }
}


Final build.gradle contents:

buildscript {
    ext {
        springBootVersion = '2.1.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("javax.servlet:javax.servlet-api:4.0.1")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'

group = 'com.app'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    providedRuntime
    compile.exclude module: 'spring-boot-starter-tomcat'
    all*.exclude module: 'spring-boot-starter-logging'
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-actuator')
    implementation('org.springframework.boot:spring-boot-starter-web')

    providedCompile('javax.servlet:javax.servlet-api:4.0.1')

    compile('javax.validation:validation-api:2.0.1.Final')
    compile('javax.el:javax.el-api:3.0.0')
    compile('org.hibernate:hibernate-validator:5.4.1.Final')

    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}


NOTE: Don't forget to add the weblogic.xmlfile. Check out the contents of weblogic.xml. You can find the full project from my GitHub Repo. If you encounter any issues, please comment. I will try to help you. Happy Coding!

Spring Framework Spring Boot application Gradle Build (game engine)

Opinions expressed by DZone contributors are their own.

Related

  • How To Build Self-Hosted RSS Feed Reader Using Spring Boot and Redis
  • How to Import the Gradle Spring Boot Application in Eclipse? | Spring Boot Tutorial [Video]
  • How to Use Java to Build Single Sign-on
  • A Practical Guide to Creating a Spring Modulith Project

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!