Невозможно запустить два приложения одновременно в Java 6 и Java 8 с помощью jnlp
У нас есть два приложения, запущенные с использованием Java Web Start (файл jnlp), и каждое приложение поддерживает разные версии Java. Одно приложение поддерживает Java/JRE 1.6 (поддерживает Java 1.5, но не Java 1.7 или 1.8), а другое поддерживает Java/JRE 1.8 (только).
Когда мы пытаемся запустить оба приложения на одном рабочем столе, используя прямые ссылки JNLP, например, <serveraddress>/deploymentfolder/abc.jnlp
Похоже, что кэш JavaWS поврежден и приложения работают не так, как ожидалось.
Мы попробовали несколько способов запуска приложений, перечисленных ниже. Во всех случаях мы настраиваем два разных файла.bat для запуска каждого приложения, используя полный путь Java, например
C:\java\jre1.6\javaws http://serveraddress/deploymentfolder/app1.jnlp
а также
C:\java\jre1.8\javaws http://serveraddress2/deploymentfolder/app2.jnlp
методы
- Установите JRE 1.6 с помощью установщика Java, используйте только копируемую (не нужно устанавливать) копию Java 1.8.
- Установите JRE 1.8 и используйте только копию JRE 1.6
- Установите обе версии
- Используйте версию только для копирования обеих версий
- Наряду с первыми четырьмя методами мы попытались настроить другую папку кэша JavaWS для другой версии, указав ее в файле deploy.properties.
Мы не смогли запустить оба приложения при любой попытке. В журналах приложений мы видим исключения, предполагающие, что кэш поврежден (вставлено ниже).
Может кто-нибудь предложить какие-либо идеи о том, как мы можем запустить эти два приложения?
java.lang.RuntimeException: ERROR: Failed to recover corrupt cache entry
at com.sun.deploy.cache.CacheEntry.recover(Unknown Source)
at com.sun.deploy.cache.CacheEntry.getCodeSourceCache(Unknown Source)
at com.sun.deploy.cache.CachedJarFile.getCodeSourceCache(Unknown Source)
at com.sun.deploy.cache.CachedJarFile.findMatchingSignerIndices(Unknown Source)
at com.sun.deploy.cache.CachedJarFile.entryNames(Unknown Source)
at com.sun.deploy.cache.DeployCacheJarAccessImpl.entryNames(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler.assertTrust(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler.access$700(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ParentCallback.check(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ParentCallback.access$1500(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ChildElement.checkResource(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.checkResource(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.getResource(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
....
....
at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
at java.awt.Window.processWindowEvent(Unknown Source)
at javax.swing.JFrame.processWindowEvent(Unknown Source)
at java.awt.Window.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)