Generally I will use the following framework in my project: Spring MVC + Hibernate with Tomcat as the container.
And I never care about the version, the later the better.
This is the concrete SDK, framework version in the project:
JDK 1.7
Spring Framework:
spring-webmvc >> 4.1.6.RELEASE
Hibernate:
hibernate-entitymanager >> 4.3.10.Final
org.hibernate.javax.persistence >> hibernate-jpa-2.1-api >> 1.0.0.Final
Tomcat 7
The application works well under tomcat, however I meet some problems when I deploy the application from Tomcat to a Java EE Server(which support JavaEE 5 only).
One of the error I got is something like:
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()
It seems that the indexes is a new method in JPA2.1(which is supported in JavaEE 7) while the Java EE server does not provide it.
But as shown, the hibernate dependency org.hibernate.javax.persistence >> hibernate-jpa-2.1-api >> 1.0.0.Final provide the methods, why the Java EE Server can not use that?
And to solve the problme, for a given JavaEE Server say it support JavaEE 5 only, what should be under consideration when choosing JDK, frameworks?
JPA 2.1 is for JavaEE7 and Java 7 onwards.
For JavaEE compatibity with JDK versions, I would take a look at this previous StackOverflow question.
Related
I'm using 1.4.1.RELEASE of spring-boot application. Everything was working ok for Java 8. However when I updated java version to 11 I can't run application using command mvn clean spring-boot:run. At the same time I can package is successfully (using mvn package). When I set java version to 8, it's working fine again.
[main] ERROR o.s.boot.SpringApplication - Application startup failed
java.lang.IllegalStateException: Restarter has not been initialized
at org.springframework.util.Assert.state(Assert.java:392)
at org.springframework.boot.devtools.restart.Restarter.getInstance(Restarter.java:545)
at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:48)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:121)
at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:85)
at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:66)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:367)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
at com.myapp.Application.main(Application.java:24)
I can understand that newer versions of Spring might require newer version of Java. But it's not clear why older spring-boot can't be run on newer java versions.
The version of Spring Boot that you're using was released in September, 2016, long before Java 11 was released in September, 2018. I recommend you update to the latest version of Spring Boot, which is currently 2.1.9.
Please let me know if this fixes your issue; otherwise, we'll debug it further.
By default, Spring Boot 1.4.1.RELEASE requires Java 7 until Java 8 which is highly recommended and Spring Framework 4.3.3.RELEASE or above. If you want to use Java 11 with some version of Spring Boot, The latest version is recommended to use, then you should do a upgrade your project.
Although you can use Spring Boot with Java 6 or 7, we generally recommend Java 8 if at all possible.
System Requirements for Spring Boot 1.4.1
The version of Spring Boot which starts to use Java 11 it was 2.1.1 then you can use any up to this version.
Spring Boot 2.1.1.RELEASE requires Java 8 and is compatible up to Java 11 (included).
System Requirements for Spring Boot 2.1.1
I'm using 1.4.1.RELEASE of spring-boot application. Everything was working ok for Java 8. However when I updated java version to 11 I can't run application using command mvn clean spring-boot:run. At the same time I can package is successfully (using mvn package). When I set java version to 8, it's working fine again.
[main] ERROR o.s.boot.SpringApplication - Application startup failed
java.lang.IllegalStateException: Restarter has not been initialized
at org.springframework.util.Assert.state(Assert.java:392)
at org.springframework.boot.devtools.restart.Restarter.getInstance(Restarter.java:545)
at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:48)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:121)
at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:85)
at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:66)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:367)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
at com.myapp.Application.main(Application.java:24)
I can understand that newer versions of Spring might require newer version of Java. But it's not clear why older spring-boot can't be run on newer java versions.
The version of Spring Boot that you're using was released in September, 2016, long before Java 11 was released in September, 2018. I recommend you update to the latest version of Spring Boot, which is currently 2.1.9.
Please let me know if this fixes your issue; otherwise, we'll debug it further.
By default, Spring Boot 1.4.1.RELEASE requires Java 7 until Java 8 which is highly recommended and Spring Framework 4.3.3.RELEASE or above. If you want to use Java 11 with some version of Spring Boot, The latest version is recommended to use, then you should do a upgrade your project.
Although you can use Spring Boot with Java 6 or 7, we generally recommend Java 8 if at all possible.
System Requirements for Spring Boot 1.4.1
The version of Spring Boot which starts to use Java 11 it was 2.1.1 then you can use any up to this version.
Spring Boot 2.1.1.RELEASE requires Java 8 and is compatible up to Java 11 (included).
System Requirements for Spring Boot 2.1.1
My Springboot application was build in tomcat 9.0 with java version of 1.8 and our server has tomcat 6 with java version of 1.7. I have already downgrade our java version in facet.
How can i downgrade the embedded tomcat in maven? Do I need to generate a new initialize from springIO?
From the SpringBoot docs:
Spring Boot 2.1.1.RELEASE requires Java 8 and is compatible up to Java
11 (included). Spring Framework 5.1.3.RELEASE or above is also
required.
https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#getting-started-system-requirements
So if you must stay on 1.7 and Tomcat 6, you'll need to move away from SpringBoot and back to your older solutions.
I have a chalenge to develop an maven java ee wep application using JAX-RS, my client is using wilfly 8 and wants to upgrade in the future to wildfly 10, the question is, how can i have guidelines im my project to attempt the two versions?
If you're building to the JAX-RS spec it won't matter. Both WildFly 8 and WildFly 10 are full Java EE 7 compliant containers.
You can use Maven profiles, one using the Maven dependencies for WildFly 8 and the other for WildFly 10.
Can someone please explain to me the difference in the EAR versions.
Is it tied to the JDK version 1.4, 5 and 6?
Thanks.
It is not JDK version. It is J2EE/Java EE version.
It is asking you which J2EE/Java EE version the ear format (deployment descriptor etc) should adhere to: J2EE 1.2 or 1.3 or 1.4 or Java EE 5 or Java EE 6.
Application servers publish their compliance levels. And some application servers generally support older ear versions as well. For e.g. WebSphere 6.x is J2EE 1.4 compliant but it can still run 1.3 ear version.
enter link description hereWhat application server and version are you looking to ultimately deploy to? You would want the ear to match the level of compliance the target application server is. For example, Oracle 10.1.3.5 Is J2EE 1.4 while JBoss 7 is Java EE 6.0 compliant.
Wikipedia and others attempt to track what each vendor's compliance level is.