Приложение Webstart не запускается для всех пользователей - PullRequest
2 голосов
/ 10 мая 2011

У нас есть приложение веб-запуска, которое после запуска использует EJB для подключения к серверу jboss.Недавно мы перенесли этот сервер на jboss5 и обновили приложение веб-запуска, которое подключается к нему.Теперь мы столкнулись с проблемой.На наших машинах для разработчиков с запуском приложения webstarts проблем нет.Его запускает и подключается, ни проблема.Но на машинах QA Testers они вообще не запускаются, просто говорится, что невозможно запустить (или что-то в этом роде).В деталях исключение варьируется между отсутствием поиска jboss-main-client.jar и jnlp.Но добавленное исключение показывает это:

java.io.IOException
            at com.sun.deploy.cache.CacheEntry$9.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at com.sun.deploy.cache.CacheEntry.writeFileToDisk(Unknown Source)
            at com.sun.deploy.cache.Cache.downloadResourceToTempFile(Unknown Source)
            at com.sun.deploy.cache.Cache.downloadResourceToCache(Unknown Source)
            at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
            at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
            at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
            at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
            at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
            at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
            at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
            at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
            at java.util.concurrent.FutureTask.run(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
            at java.lang.Thread.run(Unknown Source)

Сначала мы подумали, что это может быть проблема с подписью, но тогда это не сработало бы на наших локальных машинах разработчиков.Затем возник вопрос о правах доступа человека (у меня есть такая теория), но почему тогда работала предыдущая версия?Мы работаем с 1.6 B18 до B24 и XP, Vista и Windows 7. Я в полном замешательстве, есть идеи?

Ответы [ 5 ]

1 голос
/ 10 мая 2011

Вы можете попробовать включить уровень трассировки в консоли Java, и там вы найдете подробное исключение.Вероятно, это что-то родное.

0 голосов
/ 30 января 2014

Хорошо ... мы столкнулись с той же проблемой, как только была представлена ​​Java 1.7r51. У меня был пользователь очистить свой кеш через консоль Java. Я также попросил их добавить адрес сайта «https: // ....» в раздел «Исключения» на вкладке «Безопасность». Пользователь запустил новый сеанс браузера и без проблем подключился к сайту.

0 голосов
/ 14 июля 2011

Проблема, вероятно, вызвана пользователями, работающими на разных машинах Windows, когда профиль пользователя хранится на сервере - пользовательский кеш находится на локальной машине;если он переходит на другой компьютер, приложение веб-запуска, вероятно, установлено в другой папке кэша.использование -system флага javaws может помочь

0 голосов
/ 07 июля 2011

Это не совсем ответ как таковой, но я нашел проблему с кэшированием в Java. После того, как вы вошли и удалили кеш, проблемы были решены. Также по какой-то причине жду помощи на следующий день.

0 голосов
/ 11 мая 2011

Я нашел его в источнике JDK.

CacheEntry.java, 9-й PrivilegedExceptionAction.run:

            public Object run() throws IOException {
                JarFile jar = null;
                RandomAccessFile raf = null;

                //reset lengths as they will be updated
                //and they could be stale (e.g. if we are upgrading from old index file)
                section2Length = 0;
                section3Length = 0;
                section4Length = 0;
        section4Pre15Length = 0;
            section4CertsLength = 0;
            section4SignersLength = 0;
                section5Length = 0;
                reducedManifestLength = 0;
                reducedManifest2Length = 0;

                try {
                    raf = openLockIndexFile("rw", false);
                    // output index file contents to disk

                    //mandatory header first (will write it again later on)
                    byte header[] = prepareHeader();
                    raf.write(header);

                    ByteArrayOutputStream bout = new ByteArrayOutputStream(1000);
                    DataOutputStream out = new DataOutputStream(bout);

                    out.writeUTF(getVersion() != null ? getVersion() : "");
                    out.writeUTF(getURL());
                    out.writeUTF(getNamespaceID());

                    // write out resource codebase ip address if available
                    InetAddress ina = null;

                    // get the ip address of the resource codebase
                    String codebase = "";
                    if (url != null && url.equals("") == false) {
                        URL u = new URL(url);
                        String host = u.getHost();
                        ina = Cache.getHostIP(host);
                        if (ina != null) {
                            codebase = ina.getHostAddress();
                        }
                    }
                    out.writeUTF(codebase);

                    // write out HTTP/HTTPS header if available
                    writeHeaders(out);

                    out.close();
                    bout.close();
                    section2Length = bout.size();
                    raf.write(bout.toByteArray());

                    if (incomplete == 0) {
                        // save sections 3 and 4 (JAR only)
                        if (isJarFile(url)) {
                            jar = new JarFile(new File(filename));
                            CachedManifest manifest = new CachedManifest(jar);
                            //will update section3Length and section4Length internally
                            writeManifest(raf, jar, manifest, contentType, dd);
                            manifest.postprocess(); //need to do this explicilty
                            updateManifestRefs(manifest);
                            jar.close();
                        }
                        // this entry just got downloaded, so mark it as update check done
                        DownloadEngine.addToUpdateCheckDoneList(url);

                        // add this entry to the cleanup thread loaded resource list
                        Cache.addToCleanupThreadLoadedResourceList(url);

                        setBusy(0);
                        setIncomplete(0);
                        updateBlacklistValidation();
                        updateTrustedLibrariesValidation();
                        doUpdateHeader(raf);

                        //whenether this is jar or not we do not need to try read
                        //manifest or certificates again
                        doneReadManifest = true;
                        doneReadCerts = true;
                        doneReadSigners = true;
                    }
                } catch (Exception e) {
                    Trace.ignoredException(e);
                    // close file before trying to delete them
                    // set raf/jar to null after closing, so they won't be closed
                    // again in the finally block
                    if (raf != null) {
                        raf.close();
                        raf = null;
                    }
                    if (jar != null) {
                        jar.close();
                        jar = null;
                    }

                    Cache.removeCacheEntry(CacheEntry.this);
                    if (e instanceof JARSigningException) {
                        throw (JARSigningException) e;
                    }
                    if (e instanceof java.util.zip.ZipException) {
                        throw new JARSigningException(new URL(url), version,
                                JARSigningException.BAD_SIGNING, e);
                    }
                    throw new IOException(e.getMessage());
                } finally {
                    if (raf != null) {
                        raf.close();
                    }
                    if (jar != null) {
                        jar.close();
                    }
                    Cache.cleanup();
                }
                return null;
            }
        }

Я думал, что вы не увидели настоящую ошибку, потому что IOException не сделалоберните это.Причина исключения регистрируется в консоли Java, и я полагаю, что она будет видна.Но если это не так, я бы посоветовал вам получить исходные коды OpenJDK из http://download.java.net/openjdk/jdk6/ и попытаться отладить этот класс (CacheEntry.java:1681).К сожалению, JDK был создан без отладочной информации, но вы можете установить точки останова в методах и просмотреть свойства объекта с помощью отладчика.

...