Технологии объектно-ориентированного языка программирования - Java

Автор работы: Пользователь скрыл имя, 10 Октября 2013 в 11:12, курсовая работа

Описание работы

В данном проекте рассмотрены технологии объектно-ориентированного языка программирования - Java и распределенной базы данных на Access ,а также Сетевые средства Java (протокол TCP/IP, InetAddress, дейтаграммы и
Клиентские и серверные сокеты ServerSocket и CliebtSocket которые были использованы для написания приложения на Java).
В практической части приведены примеры:
1) Пример Создание графического приложения « клиент-сервер » на Java.
2) Пример Взаимодействия распределенной базы данных на Access и Java.

Содержание работы

Введение……………………………………………………………………………..2
1. Распределенные системы……………………………………………………….3

1.1 Промежуточная среда………………………………………………………….6

1.2 Программное обеспечение Распределенных систем……………………….7
1.3 Сетевые средства……………………………………………………………..10

2. Практическая часть…………………………………………………………….13

2.1 Описание……………………………………………………………………….13

2.2 Структура проекта…………………………………………………………13

2.2.1 Клиентская часть (файл SimplestAppClient.java)………………………13

2.2.2 Серверная часть (файл SimplestAppServer.java)……………………….18

2.3 Пользовательский интерфейс …………………………………………….21

3. Распределенные базы данных………………………………………………….22

3.1 Распределенная база данных на Access и Java……………………………….24

Заключение………………………………………………………………………….27
Список используемой литературы…………………………………

Файлы: 1 файл

GPT KURSA4.docx

— 1.40 Мб (Скачать файл)

      }

//Запись объекта на  сервер

   outputStream.writeObject(vect1);

           System.out.println("!!!!!!client ");

//Чтение объекта от сервера

    inputStream = new ObjectInputStream(client.getInputStream());

    Object obj = null;

    try {

                    if ((obj = inputStream.readObject()) != null) {

                        outputStream.close();

       if (obj instanceof Vector) {

                System.out.println("Сообщение От сервера: " + ((Vector) obj));

                  }

              }

                } catch (ClassNotFoundException ex) {

                                   }    

                client.close();

            } catch (IOException ie) {

                System.out.println("I/O error " + ie);

            }

        }

        }

    }

    public static void main(String[] args) {

        Box box = new Box(BoxLayout.X_AXIS);

    jb.addActionListener(new MyActionListener());

      JFrame jf=new JFrame();

                 jf.setVisible(true);

      jf.setSize(533, 333);

      box = Box.createHorizontalBox();

      box.add(je);

      box.add(jb);

      jf.getContentPane().add(box);

      jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рабочий вид Клиента.

 

Рисунок 4. Клиент SimplestAppClient.java

 

Рисунок 5. Клиент SimplestAppClient.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  2.2.2 Серверная часть (файл SimplestAppserver.java)

 

 

simplestAppServer.java

 

import java.net.*;

import java.io.*;

import java.util.*;

 

public class simplestAppServer {

       static Vector vector =new Vector();

       static Vector vectortemp =new Vector();

       static String str="";

static void modifyVector(Vector vect){

    String temp="";

    vector.clear();

    for(int i=0;i< vect.size();i++){

        temp=vect.get(i).toString()+" "+i;

        vector.add(temp);

    }

 

}

public static void main(String [] args) throws ClassNotFoundException {

 

ServerSocket server = null;

Socket client;

ObjectOutputStream outputStream = null;

ObjectInputStream inputStream = null;

int portnumber = 1270;

 

  // Создание серверного сокета

        try {

            server = new ServerSocket(portnumber);

        } catch (IOException ie) {

            System.out.println("Cannot open socket." + ie);

            System.exit(1);

        }

  System.out.println("ServerSocket is created " + server);

        while(true) {

                    Vector vect =new Vector();

            try {

   //Прослушивание соединения  и прием данных.

                System.out.println("Ждем соединения с сервером...");

                client = server.accept();

 

                System.out.println("Соединение с сервером готово...");

  String clientHost = client.getInetAddress().getHostAddress();

  int clientPort = client.getPort();

  System.out.println("Хост клиента = " + clientHost + " Порт клиента = " + clientPort);

 

  //Запись данных в поток вывода

  outputStream = new ObjectOutputStream(client.getOutputStream());

  outputStream.writeObject(vector);

        //Чтение  данных от клиента

        InputStream clientIn = client.getInputStream();

        System.out.println("Клиент " );

        inputStream = new ObjectInputStream(client.getInputStream());

            Object obj = null;

 

   if((obj = inputStream.readObject()) != null) {

            if (obj instanceof Vector) {

 

                    System.out.println("Получено сообщение "+((Vector)obj));

               //Чтение объекта из входного потока и перевод его в вектор

               vectortemp=(Vector)obj;

           //Обработка вектора

               modifyVector(vectortemp);

             }

           }

 

            inputStream.close();

            outputStream.close();

 

            } catch (IOException ie) {

            }}}}

       

 

 

Запуск  Сервера

Рисунок 6. Клиент SimplestAppServer.java

 

Рабочий вид сервера.

 

Рисунок 7. Клиент SimplestAppServer.java

 

  2.3 Пользовательский интерфейс

 

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

  Простейший вариант программы пользовательского интерфейса не содержит

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

контролирует все взаимодействия, включая работу с клавиатурой  и монитором,

мы вряд ли можем говорить о модели клиент-сервер. Однако во многих случаях

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

форм, в котором можно отредактировать введенные данные до их пересылки на

главный компьютер.

  В наше время даже в среде мэйнфреймов наблюдаются более совершенные

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

выпадающие меню и множество  управляющих элементов, доступных  для мыши

или клавиатуры. Типичные примеры  таких интерфейсов — надстройка X-Windows,

используемая во многих UNIX-системах, и более ранние интерфейсы, разработанные для персональных компьютеров, работающих под управлением MSDOS и Apple Macintosh.

  Современные пользовательские интерфейсы значительно более функциональны. Они поддерживают совместную работу приложений через единственное графическое окно и в ходе действий пользователя обеспечивают через

это окно обмен данными. Например, для удаления файла часто достаточно

перенести значок, соответствующий  этому файлу, на значок мусорной корзины.

Аналогичным образом многие текстовые процессоры позволяют  пользователю

перемегцать текст документа в другое место, пользуясь только мышью.

 

Интерфейс приложения сервера и клиента и сервера  состоит из :

JButton  - кнопка (Отправить) знает, когда на нее нажимают; это обрабатывается внутри компонента, код для обработки этого не нужен. Однако прослушиватель должен зарегистрироваться для получения этого события от JButton, для того чтобы вы могли вывести сообщение . Класс listener делает это, реализуя интерфейс listener и вызывая метод addActionListener()компонента JButton:

 JEditorPane (сдесь выводятся сообщения от сервера и клиента, с помощью нажатия отдельной кнопки Отправить).

3. Распределенные базы данных.

 

Системы распределенных вычислений появляются, прежде всего, по той причине, что в крупных автоматизированных информационных системах, построенных на основе корпоративных сетей, не всегда удается организовать централизованное размещение всех баз данных и СУБД на одном узле сети. Поэтому системы распределенных вычислений тесно связаны с системами управления распределенными базами данных (РБД).

При построении РБД приходится решать ряд сложных проблем, связанных  с минимизацией трафика, обеспечением интероперабельности обработки данных и целостности данных.

Минимизация трафика нужна  в связи с тем, что обслуживание запроса может потребовать использования  данных из многих узлов, пересылаемых по сети. Возможности минимизации  видны из примера обработки данных нескольких таблиц из разных узлов. Очевидно, что целесообразна однократная  пересылка таблиц, причем таблиц именно меньшего размера, на один узел, на котором  и будет обрабатываться запрос.

Интероперабельность выражает способность взаимодействия программ, работающих в гетерогенных сетях (в разных операционных средах или с разными СУБД). Интероперабельность обеспечивается с помощью программ-шлюзов (конверторов, стабов или драйверов) для каждой пары взаимодействующих сред, на основе технологий типа CORBA, SOAP или с помощью единого унифицированного языка взаимодействия СУБД. Таким языком является язык SQL, подход реализуется в известной системе ODBC.

Обеспечение целостности  в РБД намного сложнее, чем  в одноузловых БД. Поэтому вместо классических РБД чаще применяют  БД, основанные натиражировании данных. Тиражирование данных — асинхронный процесс переноса изменений данных на все локальные БД, размещаемые в серверах ячейки DCE. Перенос осуществляет сервер тиражирования — репликатор. Он реагирует на события, фиксируемые триггерами, и периодически пересылает обновленные данные в копии БД.

Тиражирование вносит избыточность в хранимые данные, появляются трудности  с разрешением конфликтов из-за возможных  несогласованных изменений в  локальных БД. Однако по сравнению с классическими РБД, в которых данные не дублируются, заметно уменьшается трафик, надежнее и проще работа с локальными БД. Обеспечение надежности и удобства работы особенно актуально в случае ненадежных и медленных каналов связи, что имеет место во многих сетях в России.

Тиражирование может быть реализовано также следующим  образом. В периферийных узлах имеются  копии БД или некоторых частей БД, в которых возможны не только чтение, но и запись. Тиражирование (перепись обновленных частей БД) происходит периодически. Если обновление одной и той же части было более чем в одном месте, т.е. фиксируется конфликт, то выдается сигнализация о конфликте, а его разрешение осуществляется в соответствии с приоритетами, устанавливаемыми администратором БД.

В распределенных СУБД (РСУБД) необходимо управление одновременным  доступом, которое должно гарантировать  целостность (сериализуемость) БД. Наиболее широко используются алгоритмы управления, основанные на механизме блокировки. При этом блокировкой называют ситуацию, когда некоторая транзакция объявила о желании получить полномочия на доступ к странице памяти и, следовательно, другие транзакции не имеют права занимать этот ресурс.

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

В РСУБД с репликацией данных имеется единственный узел, в котором возможно обновление данных, — это узел, хранящий первичную копию. Поэтому здесь нет проблемы согласования при записи действий многих узлов. Собственно тиражирование чаще всего выполняется по правилу полной эквивалентности: обновленные данные сразу же после изменившей их транзакции рассылаются по всем локальным БД. Чтение же выполняется из БД одного конкретного узла, наиболее близкого к пользователю в функциональном или географическом смысле.

Сложнее решать проблемы распределенного  управления, что требуется в РСУБД  без тиражирования. Одним из распространенных протоколов распределенного управления является протокол двухфазной фиксации транзакций (2PC). На первой фазе инициатор транзакции (координатор) рассылает участникам выполнения транзакции оповещения о блокировке. В ответ узлы сообщают о своей готовности или неготовности. На второй фазе координатор сообщает либо о "глобальной фиксации", т.е. о выполнении транзакции, либо об откате транзакции. Неприятности возможны при сбоях, которые могут оставить некоторый узел в заблокированном состоянии: он не может ни выполнять транзакцию, ни отменять ее в одностороннем порядке.

Благодаря таким техническим  нововведениям, как GPRS (технология пакетной передачи данных по мобильным сетям  радиосвязи общего пользования), UMTS (универсальные  мобильные телекоммуникационные системы 3-го поколения), Bluetooth, WLAN (беспроводные локальные вычислительные сети) и UWB (системы со сверхширокой полосой пропускания), компании могут обеспечить постоянный доступ своих сотрудников к Интернету и корпоративным базам данных.

 

3.1 Распределенная  база данных на Access и Java.

 

Пример 2.

 

Kontakty.mdb (Файл Бд). Рисунок 1.

 

 

 Рисунок 8.  Таблица Access Kontakty.mdb

 

 

Поля. Рисунок 2.

 

 

 

Рисунок 9.  Таблица Access Kontakty.mdb(поля)

 

Установка драйверов ODBC.

 

 

Рисунок 10.  Установка  драйверов ODBC  в Access

 

 

Рисунок 11.  Установка  драйверов ODBC  в Access

 

Работа БД Java.

 

 

 

Рисунок 12. Взаимодействие Access и Java

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 

  Распределенные системы состоят из автономных компьютеров, которые работают совместно, представая в виде единой связной системы. Их важное преимущество состоит в том, что они упрощают интеграцию различных приложений, работающих на разных компьютерах, в единую систему. Еще одно их преимущество — при правильном проектировании распределенные системы хорошо масштабируются.

  Их размер ограничивается только размером базовой сети. Платой за эти

преимущества часто является очень сложное программное обеспечение, падение производительности и особенно проблемы с безопасностью. Тем не менее заинтересованность в построении и внедрении распределенных систем наблюдается повсеместно. Существуют различные типы распределенных систем. Распределенные операционные системы используются для управления аппаратным обеспечением взаимосвязанных компьютерных систем, к которым относятся мультипроцессорные  и гомогенные мультикомпьютерные системы. Эти распределенные системы на самом деле не состоят из автономных компьютеров, но успешно воспринимаются в виде единой системы. Сетевые операционные системы, с другой стороны, с успехом объединяют различные компьютеры, работающие под управлением своих операционных систем, так что пользователи с легкостью могут получать доступ к локальным службам каждого из узлов. Однако сетевые операционные системы не создают ощущения работы с единой системой, которое характерно

для распределенных операционных систем. Современные распределенные системы обычно содержат поверх сетевой  операционной системы дополнительный уровень программного обеспечения. Этот

Информация о работе Технологии объектно-ориентированного языка программирования - Java