Клиент заметил, что один из наших java-апплетов больше не работает. Однако мы не можем сказать, в чем проблема.
Характеристики
Веб-приложение tiparlo . Он используется для записи и организации разговорного языка и в основном используется в школах для обучения языку и последующего хранения для оценки. Приложение состоит из HTML-интерфейса, который управляется JavaScript. Воспроизведение и запись звука осуществляется с помощью собственного Java-апплета . Как видно на тестовой странице, сам апплет находится в рабочем состоянии.
Однако в tiparlo апплет (далее называемый soundrecorder) не имеет предварительно загруженного звукового файла. Поскольку tiparlo состоит из нескольких звуковых файлов, JavaScript сообщает звуковому рекордеру, какой файл воспроизводить. Например, если вы хотите, чтобы проигрывался файл foo.ogg, javascript сообщает звуковому рекордеру воспроизвести http://url/path/foo.ogg.
Это работало уже несколько лет, но не больше.
Учет ошибки
Проблема в том, что работает при определенных условиях. Например, он работает на наших локальных dev-машинах и в нашем общедоступном test-env. Он просто перестал работать для наших клиентов.
Рабочий пример: http://test.s2.olefa.com/cgi-bin/apps/tiparlo?projectid=3&mode=viewer
Неработающий пример: http://www.ecoles -dudelange.lu / cgi-bin / apps / tiparlo? Projectid = 1594 & mode = viewer
Некоторые полезные факты:
оба примера работают на одном сервере
java-апплет, js-код, html-анализатор и исходный код являются общими ресурсами. Следовательно, оба примера выполняются с одинаковым кодом
соответствующие файлы к проблеме: soundrecorder.js и jrecord.jar. Команда play
находится в soundrecorder.js: строка 112
Что мы знаем до сих пор
Браузеры по-разному реагируют на нерабочий пример. Safari / Mac играет все правильно. Однако Safari / Win зависает при игре. Firefox 4 вообще ничего не играет. Firefox 3.5 / Mac снова все делает правильно. Однако Firefox3.5 / Win вообще ничего не играет. IE9 имеет ту же проблему. То же самое касается Chrome. Опера падает сразу и должна быть перезапущена. Мы еще не нашли браузер на Linux, который работает на нерабочем примере. Для пояснения: рабочий пример работает со всеми браузерами на всех платформах, кроме Safari / Win (meh). ОБНОВЛЕНИЕ: Это зависит от версии Java. С java 6.20 все нерабочие примеры работают во всех браузерах. В java 6.24 работает только рабочий пример.
Мы попытались использовать альтернативный URL-адрес сервера для нашего нерабочего примера (webX.sX.olefa.com), который похож на рабочий пример. Эта попытка не удалась.
Мы попытались использовать относительные пути для устройства записи звука (например, /path/foo.ogg).
Мы попытались обновить Java до последней версии.
Мы попытались получить доступ к апплету по-другому.
У нас была похожая проблема 6 месяцев назад, которая была вызвана обновлением Java. Мы попробовали нерабочий пример на виртуальной машине с более старой java-версией. Оно работает. Тем не менее, мы подозреваем, что одна только Java не является виновником, поскольку та же самая java-версия / браузер работает на рабочем примере.
Soundrecorder отказывается только воспроизводить файлы, которые загружаются динамически через JS. Если он загружает файл в init, ошибки нет.
Сам апплет загружен. Вы можете сделать его видимым, задав ширину / высоту. Я подозреваю, что есть проблема в общении Java / JS (JS говорит Java, что играть, но связь неисправна?). Однако я пока не могу подтвердить это.
Вообще говоря, мы не можем выяснить, почему один и тот же код, работающий в одинаковых условиях, работает на одном сайте, но не работает на другом.
Решение
Решение является частью комментария. Проблему и решение можно найти здесь . Спасибо Райану за то, что он указал нам правильное направление.