• Базы данных
  • Oracle
  • Сбор и воспроизведение нагрузки базы данных Oracle 11g Database Replay

Использование Oracle Berkeley DB Java Edition как менеджера хранения объектов для Google Web Toolkit - Пользовательский интерфейс в GWT, обратные вызовы и DTO

ОГЛАВЛЕНИЕ


Пользовательский интерфейс в GWT, обратные вызовы и DTO

Наш пример использует очень простую концепцию задания номинальной информации и данных о болезни существующего пользователя (или пациентя). Он показывает как можно использовать концепцию наследования в базе данных Berkeley DB Java Edition DPL. Следующий рисунок - это простой Widget, используемый для создания отчета о болезни пользователя.

Приведем действительный код для этого примера:

public class Profile extends Composite { 
private TextBox injury;
private TextBox userNameTextBox;
private ListBox typesOfInjuries;
public Profile() {
...
final Button saveButton = new Button();
absolutePanel.add(saveButton, 13, 6);
saveButton.addClickListener(new ClickListener() {
    public void onClick(final Widget sender) {
        saveProfile();
    }
});
saveButton.setText("Save");
...
protected void saveProfile() {
    AsyncCallback callback = new AsyncCallback() {
        public void onSuccess(Object result) {
            Window.confirm("Profile Saved");
        }
        public void onFailure(Throwable ex) {
        Window.confirm(ex.getMessage());
    }
    };

UserDTO wUserDTO = new UserDTO();
wUserDTO.setUserName( userNameTextBox.getText() );
wUserDTO.setInjury( injury.getText() );
ProfileService.Util.getInstance().save( wUserDTO, callback);
}

В этом коде-примере можно увидеть, что SaveButton event " OnClick " вызывает метод SaveProfile (). Этот метод использует простой блок обратного вызова для обработки возвращенного объекта от метода класса (на стороне сервера) UserService., POJO, используется для передачи данных со стороны сервера на сторону клиента и содержит только базисные типы Java -данных, что позволяет ему быть классом сериализации. createUser (). UserDTO

JavaScript работает только с базисными типами данных. Они должны быть сериализованы для передачи Web -браузеру клиента и удаленному серверу приложений; это ограничение становится требованием всех DTO в GWT. Если внимательно посмотреть на наши классы сущностей, то видно, что они не придерживаются какой-либо концепции клиентских приложений и не реализуют GWT -интерфейсов. Они полностью изолированы от клиентских приложений. Для достижения такого отделения используется шаблон проектирования Java EE - DTO. Эти DTO содержат только базисные типы данных и используются обоими пакетами (Services и GWT Remote Services). Они должны реализовать интерфейс GWT IsSerializable и конфигурационный XML -файл GWT также нужно создать. Другая важная причина для использования DTO заключается в том, что клиентские классы GWT должны быть преобразованы в код JavaScript. Для этого GWT использует Java -подобный ассемблер, который не поддерживает полную Java Platform, Standard Edition API или последние функции, такие как: аннотации и типизированные массивы (typed arrays). Это небольшое ограничение проектирования в GWT, оно не влияет на большинство задач программирования.

Примечания:

  • Важным изменением в версии 1.4.60 GWT является новая поддержка для интерфейса Serializable interface,. Это приводит к проблемам, когда атрибут члена инициализируется небазисным типом данных [то есть, скорее Class, чем int ]. Использование интерфейса IsSerializable interface вызывает исключительную ситуацию времени выполнения [и в Linux, и в Windows ]. Предпочтительнее использовать Serializable вместо IsSerializable. GWT, возможно, откажется от IsSerializable в будущих версиях или разрешит эту ошибку. который "ведет" себя иначе, чем IsSerializable
  • Совет по внедрению: Используйте три различных проекта; один проект, который включает DTOs, второй - для концептуальных классов, и третий и последний для Web -приложения GWT. Добавив специальное определение на XML согласно GWT (GWT XML definition) в корень пакета, Web -приложения, разработанные в GWT, могут унаследовать эти классы и использовать их. Имейте в виду, что любые классы, используемые GWT -пакетами на стороне клиента, будут преобразованы в JavaScript, так что они не смогут использовать специфичные для Java 1.5 функции, включая аннотации. Эти два класса функциональности нельзя смешивать, чтобы GWT клиентские приложения могли использовать пакеты DTO также, как классы бизнес-сервисов в проекте концептуальных классов.