Oracle 19c compatibility with jdk7 - java

I would like to know if oracle 19c is compatible with jdk 7.
I have found out 2 drivers for oracle 19c
ojdbc8 : for jdk8, jdk9 and jdk11
ojdbc10 : for jdk10 and jdk11
I would like to know if there is a way to have oracle 19c with a jdk7, and if yes what is the driver that will allow to do it ?

According to the Oracle JDBC FAQ (Question "What are the Oracle JDBC releases Vs JDK versions?"), only the Java versions you listed (Java 8 to 11) are supported for Oracle 19c.
I expect that support for later Java versions will be added in the future.
Java 9 and Java 10 were short-life releases, and are both end-of-life.
As a comment notes, Java 7 has been "end of life" since April 2015. It would be counter-productive for Oracle to encourage continued use of Java 7 by supporting it with new JDBC drivers for new Oracle database releases.
Note that the Oracle drivers are proprietary and source code is not available. So back-porting one of the Oracle 19c compatible drivers to Java 7 is not an option.
You may be able to identify a 3rd-party vendor who will provide (probably sell) you a driver that works. The best I could come up with is this old page that lists vendors:
https://www.mindprod.com/jgloss/jdbcvendors.html
In summary: If you want to use Oracle 19c with Oracle supported drivers, upgrading to Java 8 LTS or later is the only feasible solution. Upgrading to Java 11 LTS is advisable:
Oracle Java 8 LTS free public updates (for commercial users) have ended, and Premium Support is due to end in March 2022; see the Oracle Java SE Support Roadmap.
You can still get free public Java 8 LTS updates from 3rd-party vendors post 2020; see Java is Still Free for all of the details.

I can confirm the the ojdbc7.jar running on a JDK 7 will work connecting to an Oracle 19C server.
Looking at the Oracle JDBC FAQ it does not look like this is officially supported, however we have a current client in the process of upgrading their JDK, but we needed to support JDK 7 in the short term.
Our Oracle server was an AWS RDS instance, previously running Oracle 12C, but Amazon is no longer supporting this, and we were forced to upgrade to Oracle 19c.
We had some JDK 8 environments (container JBoss 7) which were already using ojdbc7.jar and these were fine. The JDK 7 environment (container JBoss 5.2) were using ojdbc6-11.2.0.1.0.jar and was failing with exception:
Caused by: java.sql.SQLException: ORA-28040: No matching
authentication protocol
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439) at
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:388) at
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:381) at
oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:427)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436) at
oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) at
oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:390)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:356) at
oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:531)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:221)
at
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503) at
org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:207
After switching from ojdbc6-11.2.0.1.0.jar to: ojdbc7.jar the application functioned normally.
Just a caveat, I quickly tested our application read/writing to the DB, and these worked as expected, your mileage may vary, as mentioned above this is not officially supported.

Related

Oracle Database 19c ucp.jar limitations with JDK 11

we are using database Oracle 19c version in production and we are migrating to JDK 11 (currently we are on JDK 7). So i downloaded necessary ojdbc jars from oracle website:
https://www.oracle.com/in/database/technologies/appdev/jdbc-downloads.html
But i found below in the website:
It said ucp.jar certified with JDK11 but with some limitations. Can't find any information about those limitations.
Please share if anyone has idea on those limitations.
Please note that i'm aware Oracle 21c drivers listed in the website certified with JDK11 (including ucp.jar) but those don't have Long Term Support yet. So want to use Oracle 19c drivers only.
The 19c UCP limitations with respect to JDK11 are related to the DataSource APIs added in DataSource APIs in JDK9 (for example createConnectionBuilder and createShardingKey) that you won't find in UCP in 19c. If you don't use these features, you should be fine.
And yes you're right, the current Long Term Support (LTS) release is 19c. 21c should only be used to explore new features.

What compatibility issues are faced connecting java application using objdc with oracle and feasibility of connection?

Can anyone explain me feasibility of connecting java application with database in following scenarios?
Connecting
Java 4 application with ojbc14.jar with oracle 9i
Java 4 application with ojbc14.jar with oracle 18c
Java 4 application with ojbc8.jar with oracle 9i
Java 4 application with ojbc8.jar with oracle 18c
Java 8 application with ojbc14.jar with oracle 9i
Java 8 application with ojbc14.jar with oracle 18c
Java 8 application with ojbc8.jar with oracle 9i
Java 8 application with ojbc8.jar with oracle 18c
What issues will be faced if unable to connect in specific case from above?
The number 14 in ojdbc14.jar implies that it was compiled with JDK1.4. Similarly, 8 on ojdbc8.jar implies it was compiled with JDK8. Therefore, you won't be able to use ojdbc8.jar with JDK1.4.
Regarding backward compatibility of the Oracle Server you can refer to this matrix extracted from Oracle support:

Which free version of Java can I use for production environments and or commercial purposes?

While I was in a dockerization project in my current job, I got this doubt: Which Java can I use?
This doubt is due to :
So after some researches I got these conclusions:
Since the Java 8 update at April 16, 2019 8u221, all versions and updates for (Java 8, 9, 10, 11 and 13) has no cost just for personal use and development purposes. Any other use, needs a Commercial License
Legacy versions prior to 7, does not have and will not have any update. Maybe a sales contact could be a solution if an update in these versions are required for Legacy Systems Support.
If I want to use Java 8 oracle version for commercials purposes and FREE, I need to use a previous version of April 16, 2019 8u221 update
Questions
According to my conclusions:
If my development strictly needs or was developed with JDK 8, Can I only use Oracle Java SE 8 JDK 8u202 and earlier versions for FREE and commercial purposes accepting issues and security problems?
If I can change my development and I want still FREE, and I want to have improvements and security updates, I must use one of these java open implementations?
References
End of Public Updates for Oracle JDK 8
The Oracle JDK License has changed for releases starting April 16, 2019.
Official List of updates and release versions
Java official supported versions
Oracle Java 8 download alert
Oracle Java 8 unsupported but free version
Java 4 legacy official download page
Java 5 legacy official download page
Java 6 legacy official download page
Java 7 legacy official download page
Update 2021-09
For versions 8 through 16, Oracle required a fee if their own Oracle JDK product was used in production, but not for dev, test, and training usages.
For Java 17, the Oracle JDK product is available under a new
No-Fee Terms and Conditions license, discussed on the Oracle
company blog.
On my first reading, it appears this new license makes production use free-of-cost (along with dev, test, and training usages), except for products sold for a fee while bundling the Oracle JDK product. But I am not an attorney, so read the terms yourself and consult legal advice as needed.
Keep in mind that many other vendors continue to provide implementations of the Java specs, as shown in the flowchart below. Some of these vendors sell support plans, either optionally or as a requirement for use of their product. Never assume, always read the detailed requirements for any distribution you obtain.
Another 2021 update: Add Microsoft to the list of vendors seen below.
Several vendors offer a choice of Java implementations
The Answer by Speakjava is correct and informative.
In addition, here is a flowchart I made to guide you in choosing a vendor for a Java implementation.
Or another way to view this: Your particular motivations or situation.
Oracle made a number of significant changes to how the Java platform is developed, distributed and updated at the same time as the launch of JDK 9.
The key facts to answer your questions are these:
Oracle was using the Oracle Binary Code License (OBCL) for Java. This had field of use restrictions (you needed a commercial license for embedded use) but granted free use of the Oracle JDK for general purpose development and deployment.
As of JDK 11, the license changed to the Oracle Technology Network License Agreement (OTNLA), which requires you to purchase a Java SE Subscription for use in commercial production. This license has also been applied to updates of JDK 8 since April (update 211/212).
As of JDK 11, Oracle eliminated all functional differences between the Oracle JDK and a binary built purely from the OpenJDK source code. The important things no longer in the Oracle JDK 11 are the browser plugin, Java Web Start and JavaFX.
You can continue to use any public Oracle binaries of JDK 7 (and earlier) in production without the need for a Java SE subscription, as the license is still the OBCL (it has not been changed retrospectively). You can also, as you say, use JDK 8 up to update 202 under the OBCL without cost.
There are several options for continuing to use JDK 8 with updates for free. One of those is Zulu Community from Azul (who I work for). This is a free, TCK-tested binary with a couple of additional backported features (TLS 1.3 and Java Flight Recorder). Since this passes the TCK, from a functional perspective, it is identical to the Oracle JDK. Unless you are using Applets or Web Start your applications will work in the same way as with the Oracle JDK.
If you want to move to JDK 11 (the current long-term support release, as defined by Oracle but followed by all other JDK providers), then you will need to choose one of the free distributions (like Zulu Community).
It is highly recommended to ensure your JDK is up to date and contains all relevant security patches. Continuing to use an older version could expose you to significant security exploits.
Summary
If you need to have java in your production servers for free, your have two options
#1 OpenJdk
The OpenJDK is the open source reference implementation of the Java SE Specification, but it is only the source code https://github.com/openjdk
Binary distributions are provided by different vendors for a number of supported platforms.
One of them is https://jdk.java.net/java-se-ri/19 which is maintained by Oracle:
Source: https://whichjdk.com
#2 Customized by Third Parties
Amazon Corretto
https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
Zulu
https://www.azul.com/downloads/zulu-community/?architecture=x86-64-bit&package=jdk
Licences OTN vs BCL
Oracle JDK 8 (aka 1.8) no longer uses BCL (Binary Code License). From April 16, 2019, Oracle JDK 8 uses the OTN (Oracle Technology Network) license, which requires you to create an Oracle account to download JDK 8 and payment!!
BCL = Oracle Binary Code License
You can use it, but you can't modify it
You agree not to sue Oracle if anything goes wrong
You can redistribute/publish it (so that you can sell products with Java embedded), but if you do, you agree to indemnify Oracle; so if someone sues you, you can't drag Oracle into it.
It's really just there to protect Oracle's intellectual property and to shield them from being sued when bugs are found.
source: https://www.quora.com/In-short-what-does-the-Oracle-Binary-Code-License-Agreement-for-Java-SE-actually-say-or-prohibit/answer/Jon-Harley
As a summary: FREE with risks and without any fault of Oracle
OTN = Oracle Technology Network License
As a summary: Opposite to BCL and FREE just for development in your laptop. For enterprises, you must PAY
OpenJDK and Oracle JDK
Both OpenJDK and Oracle JDK are created and maintained currently by Oracle only.
OpenJDK and Oracle JDK are implementations of the same Java specification passed the TCK (Java Technology Certification Kit).
Most of the vendors of JDK are written on top of OpenJDK by doing a few tweaks to [mostly to replace licensed proprietary parts / replace with more high-performance items that only work on specific OS] components without breaking the TCK compatibility.
Source: Differences between Oracle JDK and OpenJDK
Free official options
Here I will list and keep updated the official links, ready to download the most used java versions
Openjdk 19
https://jdk.java.net/java-se-ri/19
Openjdk 17
https://jdk.java.net/java-se-ri/17
Openjdk 11
https://jdk.java.net/java-se-ri/11
apt-get update
apt-get install openjdk-11-jdk
Oracle Java 8 update 202
Just Java SE 8 JDK 8u202 and earlier versions are free for development and production deployment. You can download it from:
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
Openjdk 8 (Deprecated)
OpenJDK is a ORACLE initiative. More details here: https://adoptopenjdk.net/
compressed mode
You can download the latest v8 release from here. Latest version:
https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_windows_8u292b10.zip
https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_8u292b10.tar.gz
I can't find the version for osx :(
Follow this to download using curl
install mode
apt-get install openjdk-8-jre (just run apps)
apt-get install openjdk-8-jdk (develop and run)
From https://openjdk.java.net/install/
Oracle Java 1.4, 5, 6 and 7 (Deprecated)
Oracle does not show any message related to license changes for Java 1.4, 5, 6 and 7 downloads. So we can use them for development and production deployment, accepting issues and security problems because these versions are so ancient!!
Oracle downloads:
https://www.oracle.com/java/technologies/java-archive-javase-v14-downloads.html
https://www.oracle.com/java/technologies/java-archive-javase5-downloads.html
https://www.oracle.com/java/technologies/javase-java-archive-javase6-downloads.html
https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
Legacy versions prior to 7, does not have and will not have any update. Maybe a sales contact could be a solution if your have a Legacy Systems running over this java old versions.
Free From Trusted Third Parties
Zulu Community (Java 6,7,8,11,13,14,15)
https://www.azul.com/downloads/zulu-community/?architecture=x86-64-bit&package=jdk
Amazon Corretto (Java 11)
https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
Eclipse OpenJ9
https://www.eclipse.org/openj9/
More third parties
The following implementations, listed in alphabetical order, are open source and free to use:
AdoptOpenJDK
Azul Zulu
Bck2Brwsr
CACAO
Codename One
DoppioJVM
GraalVM CE
HaikuVM
HotSpot
Jamiga
JamVM
Jelatine JVM
Jikes RVM (Jikes Research Virtual Machine)
JVM.go
leJOS
Maxine
Multi-OS Engine
RopeVM
uJVM
NON-FREE options
You should pay for these versions but in return you will have a lot of features suported by Oracle or another third parties
Oracle Java
https://www.oracle.com/java/technologies/downloads/
Java 19
https://www.oracle.com/java/technologies/downloads/#java19
Java 17
https://www.oracle.com/java/technologies/downloads/#java17
Java 11
https://www.oracle.com/java/technologies/downloads/#java11
Oracle Java 8 update 221
Since the java 8 update at April 16, 2019 8u221, all versions and updates for (java 8,9,10,11,14) has no cost just for personal use and development purposes. Any other use, needs a Commercial License.
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html latest update 251
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html previous updates (241,231,221,212,211)
Source: https://www.baeldung.com/oracle-jdk-vs-openjdk
Proprietary Implementations
There are also other private or commercial implementations:
Azul Zing JVM
CEE-J
Excelsior JET (Discontinued)
GraalVM EE
Imsys AB
JamaicaVM (aicas)
JBlend (Aplix)
MicroJvm (IS2T – Industrial Smart Software Technology)
OJVM
PTC Perc
SAP JVM
Waratek CloudVM for Java
Source: https://www.baeldung.com/oracle-jdk-vs-openjdk
Notes
Oracle Java 9 and 10 has reached end of support.
https://stackoverflow.com/a/50333498/3957754
More References
Differences between Oracle JDK and OpenJDK
https://whichjdk.com/
https://www.openlogic.com/blog/java-experts-openjdk-vs-oracle-jdk
https://www.oracle.com/technetwork/java/javase/overview/faqs-jsp-136696.html
https://www.oracle.com/downloads/licenses/javase-license1.html
https://openjdk.java.net/projects/jdk8/
https://www.oracle.com/java/technologies/javase/8u-relnotes.html
https://gist.github.com/jrichardsz/83db09163ca9a0db4c9cd4f91cbf0598/
https://jdk.java.net/archive
Starting JDK 17 (September 2021)
Oracle JDK 17 and later are provided under a free-to-use license that lasts until one year after the subsequent LTS release. After that time, the Oracle JDK becomes under OTN license.
Here's a related FAQs page that explains more, but here's a summary extracted from that page:
Oracle OpenJDK releases are under GNU GPL v2 with the Classpath Exception (permits free production use).
Oracle JDK 17 and later is available under the Oracle No-Fee Terms and Conditions License which permits free use for all users.
Previous Oracle JDK releases remain under the OTN License Agreement for Java SE.
"Oracle will use the NTFC for JDK 17 and later releases. LTS releases, such as JDK 17, will receive updates under this license for one year after the release of the subsequent LTS. After the free use license period, Oracle intends to use the OTN License, the same currently used for Java 8 and 11 LTS releases, for subsequent updates. Non-LTS releases such JDK 18 will be available for their entire planned six months support life under the NFTC."
Sources:
https://blogs.oracle.com/java/post/free-java-license
https://www.oracle.com/uk/java/technologies/javase/jdk-faqs.html
Now,You can use JDK/Java 17, in JDK/java7 download page(https://www.oracle.com/java/technologies/downloads/) ,you can get this comment:
Java 17 LTS is the latest long-term support release for the Java SE platform. JDK 17 binaries are free to use in production and free to redistribute, at no cost, under the Oracle No-Fee Terms and Conditions License.
JDK 17 will receive updates under these terms, until at least September 2024.

OJDBC Driver compatible with Oracle 10g and Java 1.8

I am having a rather trivial question. In our project we are using Oracle 10g as the database and Java 1.8 as the language. Can anyone please suggest me which JDBC driver will be suitable in this case?
In the Oracle documentation in the below link:
http://www.oracle.com/technetwork/apps-tech/jdbc-10201-088211.html
I found that ojdbc14.jar should be used. However it is written that it is classes compiled using JDK 1.4 and 1.5. So should I use the same driver when using JDK 1.8?
You can try using ojdbc14.jar however it won't support methods introduced in JDBC 4 (Java 6), JDBC 4.1 (Java 7) and JDBC 4.2 (Java 8). Because Java emphasizes backwards compatibility you most likely will be able to open the database connection, however:
The code will throw LinkageError in runtime if you use methods introduced in JDBC 4+. The code will compile with JDBC 4.2 (Java 8) but these methods will not be available during runtime.
You may experience weird behavior with low level features e.g. statement caching and row fetching was modified in 11g ojdbc6.jar few times. I'm not even sure how this features work in the old ojdbc14.jar.
It's a very unusual, an I'd say not advisable, setup that you want to test. The only way to see if it works is to try it.

JRE 8 compatibility with weblogic 10.3.6 (11g

Could you please help in finding out if JRE 8 would be compatible with weblogic 10.3?
We have a swing based application deployed on weblogic 10.3 server. We want to upgrade our JRE so wanted to check if JRE 8 would be able to run apps deployed on weblogic 10.3
Java 8 is supported on WebLogic Server 12.1.3. It is not supported on 10.3.6, 12.1.1, or 12.1.2.
See https://blogs.oracle.com/WebLogicServer/entry/weblogic_server_12_1_3
Java 8 is not yet supported in Weblogic server (till Weblogic 12.1.2).
It would be supported in future release.
https://community.oracle.com/thread/3539686
Bit old topic, but just came across this issue myself and have a bit more to add to it. As with the existing answers, it can't be used to install directly- the oracle installer will complain.
However, it is possible to install using an earlier JDK (6 or 7 are supported in 10.3.6), and then swap to JDK8 under the covers. I expect you could also use a custom install to bypass the installer entirely.
This obviously isn't supported - but it does run. If you try to use certain JDK8 features though, they tend not to work (such as newer jdbc drivers - 4.2 simply won't run), so there isn't much benefit to this in normal use cases.
As per the latest update Weblogic 12C is compatible with JDK 8.
https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/notes/whatsnew.html#GUID-960100E8-DFC1-49E5-8CED-1EC1D883A42F

Categories