Жаңа нұсқаларды тез арада жаңарту! JUpdater – Java бағдарламаларыңызды автоматты түрде жаңартуға арналған құрал. PHP сервері мен Java клиентінен тұрады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
JUpdater – Java бағдарламаларына нұсқа тексеруін жылдам енгізуге мүмкіндік беретін қосымша құрал жасауды мақсат ететін жоба. Бұл құрал пайдаланушыға жаңа нұсқалар туралы хабарлауды және бағдарлама ішінде соңғы нұсқаға оңай жаңартуды қамтамасыз етеді, осылайша ешқандай қосымша әрекеттер қажет болмайды. Құрал тек қана ескірген файлдарды жүктейді, бұл трафикті үнемдейді. JUpdater екі бөліктен тұрады: қолданыстағы бағдарламаларға оңай интеграцияланатын кішкентай Java клиенті және нұсқаларды қадағалап, клиентке қажетті барлық ақпаратты ұсынатын PHP серверлік бөлігі. Жоба әлі де дамып жатыр, сондықтан қателер болуы мүмкін. JUpdater арқылы жаңартылатын кез келген бағдарлама jar файлы түрінде болуы тиіс.
JUpdater is a project which aims to create a utility that allows developers to quickly implement version checks into Java programs. The utility ensures that the user can always be notified of new versions, and easily upgrade to the latest version from within the program, without having to do anything. The utility only downloads the files that are out of date, saving bandwidth. JUpdater is split into two parts. A small Java client, which can easily be implemented into existing programs, and a PHP server part, which keeps track of the versions and provides the client with all the info it requires. The project is still in development, possibly containing bugs. Any program that is to be updated via JUpdater has to be contained in a jar file.
Клиент
Бағдарламаларға шағын кластар жиынтығы, JUpdater клиенті қосылуы тиіс, осылайша олар өз нұсқаларын орталық сервермен салыстыра алады. Клиентке JRE 1.5 немесе одан жоғары нұсқасы қажет. Клиент үш негізгі операцияны қамтамасыз етеді. Барлық файлдардың MD5 тексеру сомаларын салыстыру арқылы белгілі бір jar файлын жаңарту, бұл төменде сипатталған бірнеше қадамда орындалады. Jar манифестіндегі Implementation Version атрибутын пайдаланып, серверде жаңа нұсқа бар-жоғын тексеру. Implementation Version атрибутын пайдаланып, жаңа нұсқаның бар-жоғын тексеріп, сәйкес өзгерістер журналын алу. Жаңарту процесін бақылау үшін интерфейс міндетті түрде енгізілмейді, бірақ қолданылуы мүмкін. Бұл ақпаратты мысалы, пайдаланушыға арналған графикалық интерфейсте көрсетуге болады.
A small bundle of classes, a JUpdater client, has to be added to programs so that they can compare their versions with a central server. The client requires JRE 1.5 or greater. The client provides three main operations. Update a specified jar file by comparing all files' MD5 checksums, this is done in several steps described below. Check if a new version is available on the server by using the Implementation Version attribute in the jar manifest. Check if a new version is available and get the corresponding changelog by using the Implementation Version attribute. An interface can optionally be implemented in order to listen to the update process. This information can then for instance be displayed in a GUI for the user.
Сервер
JUpdater соңғы нұсқа туралы ақпаратты сақтайтын орталық серверді қажет етеді. Клиенттер жаңа нұсқалардың бар-жоғын тексеру және өзгерістерді, сондай-ақ өзгертулер тізімін жүктеу үшін серверге қосылады. Серверге PHP 4.3 немесе одан жоғары нұсқасы және MySQL 4.0 немесе одан жоғары нұсқасы қажет.
JUpdater requires a central server that contains information about the latest version. The clients connect to the server in order to check if there are new versions and to download the changes and changelog. The server requires PHP 4.3 or greater and MySQL 4.0 or greater.
Жаңарту қалай жұмыс істейді
Мұнда толық жаңарту тексеруі кезінде нақты не болатынының егжей-тегжейлі сипаттамасы келтірілген. JUpdater мысалының updateJar әдісі жаңартуға арналған jar файлының атын және тиісті бағдарламаның атын алып шақырылады. Клиент серверге қосылыс ашып, бағдарламаның атын (HTTP Post арқылы) жібереді. Сервер сеанс орнатып, сеанс ID және сол бағдарламаның сервердегі jar файлының URL мекенжайымен жауап береді. Осы сәттен бастап клиент пен сервер сеанста болады, сондықтан сервер клиент қай бағдарламаны жаңартуды қалайтынын осы нақты жаңартуға қатысты барлық келесі сұраулар кезінде есте сақтайды. Клиент сервердің жауабын сақтап, сервердің jar файлының файлдар тізімін XML RPC арқылы сұрайды. Сервер тізіммен жауап береді (сервердің дерекқорынан алынған). Клиент сервердегі файлдар тізімін қарап, таба алатын барлық жергілікті файлдар үшін MD5 тексеру сомасын есептейді, ал қалғандарына 0 тексеру сомасы беріледі. Содан кейін клиент нәтижені серверге (XML RPC арқылы) жібереді. Сервер барлық MD5 тексеру сомаларын дерекқордағы жазбалармен салыстырып, тексеру сомалары сәйкес келмеген барлық файлдардың тізімін қайтарады (яғни, барлық ескірген файлдардың тізімі). Күндері өткен әрбір файл үшін келесі массив қайтарылады: [файл аты, көлемі, дұрыс MD5] (олардың барлығы дерекқордан оқылады). Егер ештеңе ескірмеген болса, клиент осы жерде тоқтайды, әйтпесе жалғастырады. Клиент серверден өзгерістер журналын (XML RPC арқылы) сұрайды. Сервер клиенттің нұсқалары мен соңғы нұсқа арасындағы барлық өзгерістерге (әкімші енгізгендей) жауап береді. Клиент өзгерістерді көрсетеді және тыңдаушыдан файлдарды жүктеуге бола ма деп сұрайды. Егер әдіс false қайтарса, клиент осы жерде тоқтайды, әйтпесе жалғастырады. Клиент ескірген файлдарды бірінен соң бірін уақытша сақтау орнына жүктей бастайды. Клиент әр файл үшін MD5 тексеру сомасын есептеп, оның сәйкес келетініне көз жеткізеді, әйтпесе (әрекеттер таусылғанша) қайтадан тырысады. Клиент барлық ескірген файлдар жүктелгеннен кейін жаңартуды бастайды. Ол ағымдағы jar-дың жаңартылған файлдарын жаңа jar файлына көшіріп, содан кейін жүктелген файлдарды сол jar-ға жазады. Барлық қателерсіз орындалғаннан кейін ол ескі jar-ды жаңартылған jar-мен ауыстырады, осылайша жаңарту аяқталады.
Here's an in depth description of what actually happens behind the scenes when performing a complete update check. The JUpdater instance's updateJar method is called with the name of the jar file to update and the relevant program name. The client opens a connection to the server and sends the program name (via HTTP Post). The server establishes a session and responds with the session id and the server's jar URL for that program. From this point on the client and server are in a session and the server therefore remembers what program the client wants to update during all further requests connected to that specific update. The client stores the server's response and sends a request for the file list of the server's jar file via XML RPC. The server responds with a list (taken from the server's database). The client calculates MD5 checksums for all local files that it can find (looking in the file list from the server), the rest are given a checksum of 0. The client then sends the result to the server (via XML RPC). The server checks all MD5 checksums against the entries in the database and returns a list of all the files for which the checksums did not match (i. e. a list of all files that are out of date). The following array is sent back for each file that is out of date: [filename, size, correct md5] (all of those things are read from the database). If nothing is out of date then the client stops here, otherwise it continues. The client requests a changelog from the server (via XML RPC). The server responds with all changes (as entered by the administrator) made between the client's versions and the latest version. The client displays the changes and asks the listener with shouldStartDownloading if it should download the files. If false is returned from the method then the client stops here, otherwise it continues. The client starts downloading the out of date files one by one into a temporary storage. For each file the client calculates the MD5 checksum and make sure that it matches, otherwise it tries again (until it's out of tries). The client begins to patch once all out of date files are downloaded. It copies the current jar's up to date files into a new jar file and then writes the downloaded files into that jar. Once all is done without errors it replaces the old jar with the up to date jar, hence completing the update.