2009-06-26 2 views
5

Ive читал введение Ляном в Java-программирование в течение нескольких недель, и этот вопрос возник, когда автор сказал: «Разработчикам нет необходимости создавать и устанавливать для пользователей новые новые версии программного обеспечения».Как работает обновление программного обеспечения?

Как работает обновление программного обеспечения? Например, патчи для игр, новая версия продуктов и т. Д. В этой книге есть пример того, что, пока вы держите интерфейс класса одинаковым, вам не нужно делать какие-либо изменения в любом из классов, зависящих от того, который вы изменили. Это хорошо, но все же немного абстрактно (например, как создать патч обновления только с этим классом?).

Я также интересуюсь книгами по этому вопросу.

Спасибо.

ответ

3

Посмотрите на книгу

Practical API Design - Confessions of a Java Framework Architect (Jaroslav Tulach, Apress, 2008)

Я думаю, что он охватывает большинство аспектов вы спрашиваете.

Для получения дополнительной информации о новых версиях или обновлениях программного обеспечения см., Например, технологию Java Web Start.

Отправка обновления в веб-приложение может считаться неявной перед пользователями, так как изменения, сделанные на централизованном сервере доставлены самим веб-браузером.

или набор серверов

-1

Это не ссылаясь на единый принцип ответственности. http://en.wikipedia.org/wiki/Single_responsibility_principle

На практике это не работает, если у вас нет чего-то по-настоящему огромного, как Windows, которое вы можете обновить кусочками или игрой, которая использует множество текстур, которые не нуждаются в изменении.

0

Рассмотрите игру, которая была сконструирована таким образом, чтобы иметь несколько независимых модулей, каждый из которых взаимодействует друг с другом только через интерфейсы. Первоначальное развертывание такой игры может состоять из 15 или 20 отдельных файлов jar.

Применяя обновления, вы должны подключиться к серверу, запрашивая последнюю версию каждого файла jar, сравнивая с файлом jar, который у вас уже есть, и загружайте только измененные файлы.

Версия для бедных людей была бы, если бы вы работали над проектом с 15 баночками, и вы делаете критическое исправление ошибок для одной из банок. Вам не пришлось бы копировать все 15 банок в систему вашего клиента - вы копируете тот, который изменился.

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный XML-файл, чтобы определить, какие версии каждой библиотеки необходимы. В этом случае первоначальное развертывание приложения можно выполнить, прочитав xml (обслуживаемый веб-сервером) и динамически загружая необходимые файлы jar в локальный кеш во время операции начальной загрузки. На самом деле нет начальной установки.

Возможно, важно упомянуть, что это преимущество, хотя и действительно действительное и реальное, довольно незначительно по сравнению с ремонтопригодностью и простотой кодирования, возникающей в результате сокращения зависимостей между модулями и использованием четко определенных интерфейсов.

0

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

Для настольных/толстых клиентов доступны некоторые коммерческие и бесплатные решения для обновлений программного обеспечения. См. Это article для сравнения. Он довольно старый, новые решения должны быть доступны.

2

Я думаю, что концепция, которую вы пытаетесь понять, использует интерфейс как тип. В java-программе переменная может быть объявлена ​​как тип некоторого определенного интерфейса. Затем классы, реализующие этот интерфейс, могут быть созданы для переменных типа интерфейса. Однако могут использоваться только те методы, которые указаны на интерфейсе. Во время компиляции интерфейс используется для проверки типов. Однако во время выполнения байт-код, который фактически выполняет эту работу, исходит от разработчика интерфейса. Пример:

public interface foo { 
    public void bar(); 
} 

public class A implements foo { 
    public void bar() { 
     // some code 
    } 
} 

public class Example { 
    public static void main(String[] args) { 
     foo aFoo = new A(); 
     aFoo.bar(); 
    } 
} 

В классе Пример: переменная с именем aFoo объявлена ​​как тип foo, интерфейс. A, который реализует интерфейс foo, будет содержать код для выполнения функции bar(). В классе Example переменная aFoo получает экземпляр класса A, поэтому любой код в методе bar() для A будет выполняться при вызове aFoo.bar(), хотя aFoo объявлен как тип foo.

Итак, мы установили, что вся работа выполняется в классе A. Два класса и один интерфейс выше могут быть определены в собственном файле. Все три файла .class могут быть упакованы в банку и отправлены клиентам в качестве версии 1.0 программы. Спустя некоторое время ошибка ошибки может быть обнаружена при реализации bar() в классе A. После того как исправление будет разработано, если все изменения содержатся внутри метода bar(), только файл .class для A должен быть отправлен в клиентов. Обновленный A.class можно вставить в файл .jar программы (файлы .jar - это всего лишь .zip-файлы), перезаписывая предыдущую сломанную версию A.class. Когда программа перезапускается, JVM загрузит новую реализацию A.bar(), и класс Example получит новое поведение.

Как и почти все, более сложные программы могут стать, к тому же, более сложными. Но принципы одинаковы.

0

В дополнение к обновлению отдельных файлов JAR (или в других программных средах, совместно используемых библиотечных файлов или DLL) существуют двоичные средства исправления, которые могут быть использованы в некоторых случаях для передачи набора изменений в отношении базового файла. Патч-программа возьмет этот разностный файл и объединит его с базовым файлом для создания нового измененного файла. Это работает только в том случае, если исходный файл не изменен в установленной системе, но может работать в некоторых случаях для постепенного исправления определенных компонентов программы.

0

Я бы немного изучил это в университете, и, проведя исследования специально для этого, я на самом деле нашел это довольно интересным. Одна вещь, которую нужно сделать, чтобы конкретно указывать обновления, - это запись версий, в которой для каждой версии, которую вы выпускаете, указывается, что обновлено. Скажем, например, разница между версиями 1.0.1 и 1.0.2 в том, что mylib.dll был обновлен. Теперь скажите, что разница между 1.0.2 и 1.0.4 заключается в том, что myotherlib.dll изменился, если кто-то обновляет свое программное обеспечение до последней версии (1.0.4), и в настоящее время они имеют 1.0.1, тогда обе библиотеки dll включены в обновление ,

Я не уверен, что это практикуется или используются более интеллектуальные методы. Это зависит от производителя программного обеспечения, довольно много разных методов. Я предполагаю, что некоторые разработчики шифруют файлы приложений и связывают их в настраиваемый формат.

0

Heres простой пакетный файл обновления, чтобы вы начали с концепции ... Вы можете запустить его в фоновом режиме и использовать его для обновления файлов, а не для записи в java, мне легче писать в C++ хоть.

@echo off 
if not exists "file.jar" goto FM 
cls 
echo [1] Update 
echo [2] Exit 
set /p "main=1OR2:" 

if %main% == 1 goto U 
if %main% == 2 exit 

:U 
cls 
echo Updating... 
del "file.jar" 
wget "http://yourserver.com/file.(EXTENSION)" 
if not exists "file.jar" goto FM 
cls 




:FM 
cls 
echo You are missing important files! 
pause >nul 
exit 

Я советую вам узнать, как это сделать в Java, но если вы хотите получить более продвинутыми вы можете поместить файл на сервере с именем «version.bat», а затем загрузить это тоже для пользователей ноутбуков так что он может прочитать его, и если его та же версия, что и у него, будет пропущена загрузка и скажет, что у вас есть версия ltest, доступная !.

ПРИМЕЧАНИЕ: Для этого кода вы должны пойти на Google и поиск wget, скачать соответствующий файл и поместить в ту же папку, что и выше код, а также сохранить приведенный выше код, как (anything.bat)

Смежные вопросы