HDFView 3.1.2 issues and regressions


#1

Hi, I spent all of yesterday figuring out the new release. There are two regressions from my point of view compared to 3.1.1.
Most importantly: The program does not even start any more after installation. Another report of this problem can be found here: Cannot install HDFView.msi; is .exe version available?. Dependencies seem to be broken, but I don’t understand why as it should be self-contained and I cannot find any relevant invormation in the release notes. The exact error message I’m seeing is

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:///C:/Users/user/AppData/Local/HDF_Group/HDFView/app/mods/slf4j-nop-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/user/AppData/Local/HDF_Group/HDFView/app/extra/slf4j-simple-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/user/AppData/Local/HDF_Group/HDFView/app/slf4j-nop-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory]
java.lang.UnsatisfiedLinkError: C:\Users\user\AppData\Local\HDF_Group\HDFView\runtime\bin\hdf5_java.dll: Can't find dependent libraries
        at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
        at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:383)
        at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:227)
        at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:169)
        at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:310)
        at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:280)
        at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2440)
        at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:809)
        at java.base/java.lang.System.loadLibrary(System.java:1893)
        at jarhdf5@1.10.7/hdf.hdf5lib.H5.loadH5Lib(H5.java:315)
        at jarhdf5@1.10.7/hdf.hdf5lib.H5.<clinit>(H5.java:255)
        at jarhdf5@1.10.7/hdf.hdf5lib.HDF5Constants.<clinit>(HDF5Constants.java:29)
        at hdf.object.h5.H5File.<clinit>(H5File.java:115)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:377)
        at hdf.object.FileFormat.<clinit>(FileFormat.java:227)
        at hdf.view.HDFView.createToolbar(HDFView.java:1036)
        at hdf.view.HDFView.createMainWindow(HDFView.java:448)
        at hdf.view.HDFView.openMainWindow(HDFView.java:280)
        at hdf.view.HDFView$39.run(HDFView.java:2571)
        at swt/org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236)
        at swt/org.eclipse.swt.widgets.Display.syncExec(Display.java:4735)
        at hdf.view.HDFView.main(HDFView.java:2563)
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'int hdf.hdf5lib.H5.H5dont_atexit()'
        at jarhdf5@1.10.7/hdf.hdf5lib.H5.H5dont_atexit(Native Method)
        at jarhdf5@1.10.7/hdf.hdf5lib.H5.loadH5Lib(H5.java:331)
        at jarhdf5@1.10.7/hdf.hdf5lib.H5.<clinit>(H5.java:255)
        at jarhdf5@1.10.7/hdf.hdf5lib.HDF5Constants.<clinit>(HDF5Constants.java:29)
        at hdf.object.h5.H5File.<clinit>(H5File.java:115)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:377)
        at hdf.object.FileFormat.<clinit>(FileFormat.java:227)
        at hdf.view.HDFView.createToolbar(HDFView.java:1036)
        at hdf.view.HDFView.createMainWindow(HDFView.java:448)
        at hdf.view.HDFView.openMainWindow(HDFView.java:280)
        at hdf.view.HDFView$39.run(HDFView.java:2571)
        at swt/org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236)
        at swt/org.eclipse.swt.widgets.Display.syncExec(Display.java:4735)
        at hdf.view.HDFView.main(HDFView.java:2563)
Failed to launch JVM

The second problem relates to the installation files: There was an MSI file available previously, which made installation easily scriptable for me. Now, there is a proprietary EXE installer. While it is still possible to obtain an MSI from this installer, the MSI itself does not support standard commandline parameters any more, namely ALLUSERS=1 seems to be ignored. This makes it impossible to install the software for more than one user at a time, which is sort of inconvenient in my case.

I’d be happy to provide more input and/or information needed to get this fixed.


#2

Hello!

We created scripts to resolve the issue with launching HDFView The direct link to the scripts is:
https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/hdfview-3.1.2/hdfview_scripts/

The portal page has been updated to mention this issue:
https://portal.hdfgroup.org/display/support/HDFView+3.1.2#HDFView3.1.2-knownprobs

Can you try this and let us if it works for you?

I am not sure about the second issue and will discuss that with the developer.

Thanks!
-Barbara


#3

I understand the problem, which seems to affect only windows. We have a solution for everyone in a command line script that can be downloaded (or soon, solution verified this morning).
The problem on windows is that the hdf5 dlls need to be in the path before launching HDFView. This is because we dynamically load hdf5 dlls from the hdf5_java.dll file, this is so that HDFView can use the compression plugins feature of HDF5.

The reason it is an “exe” is because that was the default on windows. We also have two versions depending on your needs, an installer that adds a menu shortcut and file associations. The installer also installs into the user account by default. The other is called an App Image which is just the directory structure that the installer produces.

The HDFView.exe at the install location is basically an application of the command script. One nice feature is the HDFView.cfg file in the app folder. This is all the java command line options in an editable file. Some may fine that useful.

The downloadable scripts bypass that executable and cfg file by setting the path and executing the HDFView class directly.

We hope to improve the next release and address some of these concerns. But we are also relying on other software that needs some improvements.

Allen