пятница, 7 августа 2009 г.

Новые изменения

1. Переработан полностью интерфейс команд сетевого взаимодействия сетевых клиентов. Теперь для обмена данными используются отдельные функции для каждой команды, что облегчает их использование в процессе разработки.
2. Введен новый класс - CaesarTable:
/**
* Класс представляет собой объект для хранения данных в виде таблицы строк. Объект оддерживает сетевое
* обновление, но не предназначен для хранения связанных данных с другими таблицами. Предназначен
* для хранения различных справочных данных в виде текстовой таблицы.
*/
Соответственно введены новые команды работы с таблицами по сети.
3. Начата разработка пользовательского интерфейса - регистрация программы, проверка на наличие других копий программы в сети, поиск информации если есть другие экземпляры.

воскресенье, 12 апреля 2009 г.

Промежуточные итоги

Давно не писал в блоге - был занят работой :).
Наконец то можно подвести итоги. В настоящий момент закончена и протестировано ядро логического хранения данных со всей обвязкой, структура взаимосвязи всех объектов, разрешения и привелегии, архивирование (1-й этап). Закончено, но не протестировано сетевое взаимодействие клиентов. Клиенты в автоматическом режиме самостоятельно , без дополнительных телодвижений пользователей находят друг-друга в сети, обмениваются наработанными данными. (2-й этап). После тестирования начнется 3-й этап - создание пользовательского интерфейса. Планируется реализация на JavaFX - интерфейс похожий на The Brain. 

четверг, 5 марта 2009 г.

Менеджер объектов CesarObject - Manager

Наконец то закончил и первично оттестировал менеджер объектов.
Краткое описание:
public class Manager
extends java.lang.Object

Менеджер объектов CesarObject. Управляет их размещением в памяти и на диске. В зависимости от статуса объект может быть размещен на диске или в памяти. Содержит множество самих объектов, их статусы, пользователей программы и текущего пользователя.
Инициализация - вызов Manager.Manager(). Он инициализирует множества, загружает ранее сохраненные или создает новые в каталоге пользователя в созданном подкаталоге .cesar 
Окончание работы - обязательный вызов save() - которая записывает все наработанные менеджером данные в файл. Это аналогично раздельному вызову saveStatuses() и saveUsers(). Данные по новому объекту сразу записываются в архивный файл при вызовеputCesarObject(CesarObject cesarObject)

http://tsvetkov.at.ua/publ/1-1-0-17 - полное описание

четверг, 5 февраля 2009 г.

Ревизия сделанного

Давно не публиковал сообщений, потому что столкнулся с проблемой размещения всех объектов CesarObject в памяти.
Поскольку изначально задача стояла в том, что объекты не удаляются, возникла проблема:
с течением времен количество объектов может вырасти настолько, что не поместится в памяти.
Принятое решение:
Разбил объекты CesarObject на четыре категории.
  1. Вновь созданный (неутвержденный) CesarObject. Работа с таким объектом ведется только текущим пользователем. После утверждения данный объект рассылается всем заинтересованным пользователям и не может быть удален. Виден на рабочем столе.  Размещен в оперативке. 
  2. Активный объект CesarObject. С активным объектом ведется какая-либо работа кем-то из пользователей. Виден на рабочем столе. Размещен в оперативке.
  3. Архивный объект CesarObject. Имеет срок хранения. После истечения срока хранения удаляется. Размещен на жестком диске в архивном файле объектов. При необходимости подгружается в оперативку.
  4. Удаленный объект CesarObject. Имеет срок хранения . После истечения срока хранения удаляется. Размещается в файле удаленных объектов. При необходимости подгружается в оперативку.
Активные и вновь созданные объекты сохраняются цельным объектом со всеми взаимосвязями в единый файл.
Архивные и удаленные объекты сохраняются в текстовый файл построково. При указании соответствующей опции защиты информация шифруется.
Архивный срок хранения редактируется собственником объекта. По умолчанию равен среднему сроку жизни документов в конкретной организации. Задается руководителем организации.

Данная схема позволяет более рационально управлять памятью, а также удалять устаревшие данные.

После проверки целостности схемы и подбора реализации, приступил к переделке CesarObject с учетом вышесказанного. Вместо ссылок на объекты новый CesarObject хранит внутри их хеш-коды в множестве HashMap. Класс CesarObject хранит единое множество всех объектов CesarObject. Дополнительно снабжу инструментами для подготовки информации для записи в текстовые файлы.

среда, 28 января 2009 г.

Проверка кода

Последнюю неделю занимался проверкой и отладкой всего написанного кода. Нашел замечательный плагин для NetBeans - https://sqe.dev.java.net/
Позволяет проверить код на наличие ошибок, а также укажет на потенциальные проблемы. Интегрируется в JDeveloper, Eclipse, JEdit, JBuilder, BlueJ, CodeGuide, NetBeans/Sun Java Studio Enterprise/Creator, IntelliJ IDEA, TextPad, Maven, Ant, Gel, JCreator и Emacs.

Возможности плагина:
Анализ код на наличие дефектов 
Поиск багов
Проверка стиля 
Поиск, проверка, анализ зависимостей

среда, 21 января 2009 г.

Вовремя заметил проблему

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