Учебная работа. Реферат: Распределенные системы обработки информации
Недашковский Вячеслав Михайлович
Лекции 2006
Содержание
Литература
1. язык программирования Java
1.1. История и предпосылки
1.2. Сравнение с C++
1.3. Архитектура Java
1.4. Синтаксис Java
1.5. Обыкновенные типы в Java
1.6. Классы и объекты в Java.
1.7. Переменные, именованные константы, массивы, перечисления в Java.
1.8. Наследование и о классе Class.
1.9. Интерфейсы и оборотные вызовы в Java.
1.10. Вложенные классы и интерфейсы.
1.11. Цикл for-each, аргументы переменной длины, настраиваемые типы в Java.
1.12. Многопоточность в Java: создание потоков.
1.13. Многопоточность в Java: синхронизация
1.14. Ввод-вывод в Java: общие сведения.
1.15. Форматированный ввод-вывод в Java (J2SE 1.5)
1.16. О программировании графики в Java.
1.17. Реализация технологии клиент-сервер на Java.
1.18. Апплеты в Java.
1.19. разработка RMI в Java.
1.20. О интерфейсе JDBC.
1.21. Общие сведения о технологии CORBA.
2. Общие положения теории РСОИ
2.1. понятие о РСОИ
2.2. Примеры РСОИ.
2.3. Нефункциональные требования к РСОИ
2.4. Прозрачность в РСОИ
2.5. Удаленный вызов процедуры: общие сведения
2.6. Передача характеристик при удаленном вызове процедур.
2.7. Организация распределенных объектов
2.8. Передача характеристик при воззвании к удаленным объектам.
2.9. Серверы объектов.
2.10. Перенос кода в РСОИ
2.11. Модель клиент-сервер
2.12. Общие сведение о именовании объектов и службе именования
2.13. Общие сведения о синхронизации в РСОИ
2.14. Актуальный цикл распределенных объектов
3. разработка J2EE
3.1. Общие сведения
3.2. Архитектура J2EE
3.3. EJB – Enterprise Java Beans
Литература
1. Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. язык программирования Java, 3-е изд. пер. с. англ. –М: изд. дом «Вильямс», 2002.
2. Таренбаум Э. Распределенные системы. Принципы и парадигмы. –СПб: Питер, 2003 – 877с.
3. Эммерих В. Конструирование распределенных объектов. способы и средства программирования интероперабельных объектов в архитектурах OMG/CORBA, Microsoft/Com и Java/RMI.
4. Изимбал А. А., Анишина М.Л. Разработка сотворения распределенных систем для экспертов – СПб:
Цель курса: привести главные сведения о языке Java также общие сведения о РС, и разработках сотворения РС; отдать первичные способности программирования на языке Java.
Язык программирования Java
1.1. История и предпосылки
1991г. Группа инжинеров SUN занялась разработкой языка, который можно было бы применять в бытовых устройствах. Мысль – сделать язык, который бы не зависил ни от машинки, ни от микропроцессора. За базу был взять синтаксис С++. язык не был нужен. Решили написать браузер с внедрением данной нам технологии. 1 версия языка возникла в 1996 году. 1998 году вышла версия языка Java 1.2 – настоящий язык. язык платформенно независим. Недочет – быстродействие. Программки производятся под виртуальной машинкой. Компиляция программ происходит в т.н. байткод, которые позже интерпретируется средой выполнения. В среде выполнения, в свою очередь, находится Менеджерсохранности. Оcобености:
1. Мобильный код – одна программка, много вычислительных платформ.
2. Неопасный код – интегрированная в язык защита от несанкционированного доступа к ресурсам компа.
3. Устойчивый код — обнаружение ошибок может быть на ранешних стадиях проектирования. больше нет ошибок управления памятью.
Java написан на базе C++ – синтаксис весьма похож.
1.2. Сравнение с C++
C++
Java
Разедление на объявления и определения
нет
Const
нет, есть final
>> — нет различия меж логическим и арифметическим сдвигом
>> — арифметический
>>> — логический
0, 1
false, true
строчки как таковые отсутствуют
ReadOnly, в памяти под новейшую строчку формируется пространство, древняя исчезает из области видимости
goto
нет goto, зато есть break <метка>
1.2 Архитектура Java
Промежный код – б код – виртуальной машинки Java. Управляемый код не может содержать указателей. Непременно должен находиться собиратель мусора.
1.3. Синтаксис Java
Простая программка:
class Hello { public static void main(String[] args) {
System.out.println(“Hello world!”); }}
Модификаторы и функция main необходимы, чтоб класс был приложением. String[] – массив. Потому что в способ main не передается адресок объекта, то он объявлен с модификатором static, а адресок объекта не передается, потому что до вызова никакого объекта не создавалось, то передавать нечего.
class Fib {/** Вывод на экран последовательности чисел Фибоначчи, наименьших 50 */ public static void main(String[] args) { int l = 1, ni = 1; System.out.println(l); while (ni < l) { System.out.println(ni); ni = l+ni; // новое Java
Обозначение типа
Размер (bit)
Примечание
byte
8
знаковый
short
16
знаковый
int
32
знаковый
long
64
знаковый
float
32
знаковый
double
64
знаковый
char
16
Unicode
1.4. Классы и объекты в Java.
Программка на языке Java – совокупа классов. Объявление класса:
abstract class ClassName
{
[constructors]
[variables]
[methods]
public static void main(String[] args) { … }
}
public – класс виден всем остальным классам (если не указан, класс виден лишь в собственном пакете), final – от класса недозволено породить потомков, abstract – недозволено сделать экземпляр класса. Функция main не неотклонима, это точка входа в программку.
Классы организуются в пакеты (аналог пространств имен). В одном файле быть может лишь один public-класс.
Создание объекта:
new ClassName(характеристики конструктора). Возвращает ссылку на объект.
Класс может содержать объявления конструкторов:
public ClassName(характеристики…) { … }
Если ни один конструктор не определен, неявно определяется конструктор без характеристик, которые устанавливает все поля в значения по дефлоту (числа – в нуль, логические – в ересь, ссылки – в null).
В первой строке конструктора можно вызвать иной конструктор:
public MyClass(String a) { … }
public MyClass() { this(“default”); … }
Определение способов:
protected void ИмяМетода(характеристики способа) { тело способа }
public – способ доступен всем классам, private – лишь данному классу, protected – лишь данному классу и его наследникам, без указания спецификатора – способ доступен в границах пакета.
Определение поля:
protected тип имя [= значение];
Инициализационный блок употребляется для установки исходных значений:
[static] { операторы присваивания… }
Статический инициализационный блок может инициализировать лишь статические переменные.
порядок инициализации объекта:
1. Все поля инициализируются значениями по дефлоту.
2. Срабатывают инициализаторы полей и инициализационные блоки в порядке их следования в коде.
3. Если в первой строке конструктора вызывается иной конструктор, он производится.
4. Производится конструктор.
5. В классе можно найти способ finalize(), который будет производиться при сборке мусора.
1.5 Переменные, именованные константы, массивы, перечисления в
Java
Переменные – обычных типов и ссылочные. Обыкновенные конкретно содержат
Обыкновенные типы: int, short, long, byte, float, double, char, boolean. Беззнаковых типов нет. Размерность типов не зависит от платформы. Char постоянно 2 б.
Для обычных типов есть их объектные аналоги: Integer, Character и т.п.
Константы обозначаются главным словом final (к примеру, final double MAX = 5; — требуется очевидная инициализация при объявлении).
Массив – объект, содержащий ссылки на остальные объекты.
MyType[] array = new MyType[5];
array[3] = new MyType();
int size = array.length; // 5
int[] iarr = { 1, 2, 3 };
Вначале всем элементам массива присваиваются значения по дефлоту.
Класс java.util.Arrays содержит статические способы для работы с массивами: сопоставление, сортировка, поиск и т.п.
Перечисление – тип объекта, который может принимать ограниченное огромное количество значений. Ранее для этого использовались классы, унаследованные от интерфейса Enumeration (способы hasMoreElements() и nextElement()). В Java 5 возник enum, как в C++.
public enum MyEnum { FIRST, SECOND, THIRD };
Enum – это настоящий класс, его значения – экземпляры класса. Любому значению можно сравнить характеристики конструктора:
public enum MyEnum {
FIRST(“first”), SECOND(“second”), THIRD(“third”);
MyEnum(String arg) {
text = arg;
}
String getText() { return text; }
private String text;
}
Можно перебрать все значения enum в цикле for:
for (MyEnum m : MyEnum.values())
doSomething(m);
1.6 Наследование и о классе Class
Наследование:
class DerivedClass extends BaseClass {…}
Можно наследовать лишь один класс (нет множественного наследования), зато можно реализовывать несколько интерфейсов. Для воззвания к полям и способам суперкласса в способе дочернего класс употребляется super. Также можно вызывать конструктор базисного класса в конструкторе дочернего:
public DerivedClass() {
super(param1, param2);
…
}
Для переопределения способа довольно снова обрисовать его в дочернем классе, все способы подвержены полиморфизму (нет необходимости объявлять их виртуальными). Чтоб способ недозволено было переопределить, употребляется модификатор final. Также можно объявить final класс, тогда от него недозволено будет унаследовать остальные классы.
Если объявить класс abstract, то недозволено сделать его экземпляр, лишь унаследовать. способ тоже быть может abstract – в этом случае его тело определяется не в этом классе, а в дочерних.
Дочерним классам доступны поля и способы уровня public и protected.
a instanceof B – возвращает true, если a – экземпляр класса B, в неприятном случае false.
Если наследуемый класс не указывается очевидно, то неявным базисным классом становится Object. Таковым образом, любой класс унаследован (может быть, косвенно) от Object. Переменную типа Object можно применять как ссылку на хоть какой объект. Обыкновенные типы не наследуются от Object. Object содержит ряд принципиальных способов:
equals() – инспектирует эквивалентность 2-ух объектов. Вначале инспектирует лишь равенство ссылок, потому должен переопределяться в дочерних классах.
getClass() – возвращает объект типа Class, описывающий тип данного объекта.
hashCode() – генерирует целое число на базе состояния определенного объекта. способ употребляется при включении объекта в хэш-таблицу. При переопределении equals() нужно переопределять и hashCode() – у эквивалентных объектов хэш-коды должны совпадать.
toString() – возвращает строчку, отражающую состояние объекта.
clone() – делает копию объекта. Без переопределения недоступен.
Class:
Обьект метаданных о каком или классе. Дозволяет выяснить способы, поля, сделать экземпляр другого класса. Обьект Class создается или как жертва.getClass() либо как Class.forName(“полное квалификационное имя”). Данный класс – база отражения (reflection).
1.7 Интерфейсы и оборотные вызовы в
Java
Интерфейс – спецификация требований к реализуемым классом способам:
public interface MyInterface {
int myMethod();
}
Все способы, объявленные в интерфейсе, числятся обьявлеными как public.
Класс может воплотить один либо несколько интерфейсов:
class MyClass implements MyInterface { … }
class MyClass2 implements MyInterface, MyInterface2 { … }
интерфейс – не класс, недозволено сделать его экземпляр. Но интерфейсная переменная может ссылаться на объект класса, который реализует этот интерфейс. При помощи instanceof можно проверить, реализует ли объект данный интерфейс.
В Java интерфейсы нередко используются заместо указателей на функции для организации механизма оборотного вызова. Объекту, который будет делать оборотный вызов, передается интерфейсная переменная, способ которой будет вызван. Опосля этого 1-ый объект сохраняет эту переменную и по мере необходимости вызывает один из ее способов. К примеру, таймер javax.swing.Timer просит интерфейс java.awt.event.ActionListener для повторяющегося выполнения оборотного вызова.
public class MoneyCounter implements ActionListener {
public void actionPerformed( ActionEvent e ) {
money += money * percent;
System.out.println( «средств на данный момент: » + money );
}
}
1.8
Вложенные классы и интерфейсы
Вложенный (inner) класс либо интерфейс – класс либо интерфейс, определенный снутри другого класса. объект вложенного класса имеет доступ ко всем полям и способам содержащего его класса (включая закрытые). Его можно скрыть от остальных классов пакета. Можно создавать анонимные вложенные классы.
class MyClass {
…
private class MyInnerClass { … }
}
Воззвание из вложенного класса к способам и полям наружного: можно просто someMethod(), а можно так: MyClass.this.SomeMethod().
Создание экземпляра вложенного класса:
MyInnerClass obj = new MyInnerClass();
MyInnerClass obj = this.new MyInnerClass();
А если вне класса:
MyClass myobj = new MyClass();
MyClass.MyInnerClass obj = myobj.new MyInnerClass();
Вложенный класс можно найти даже снутри способа (локальный вложенный класс). Они объявляются без спецификаторов видимости.
Анонимные внутренние классы:
Почаще всего употребляется в обработчиках GUI:
MyInterface obj = new MyInterface() { … };
myButton.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
doSmth( );
}
} );
Вложенный класс можно объявить static, в этом случае он не будет иметь доступ к нестатическим полям и способам наружного класса. Это полезно, если экземпляр вложенного класса создается в статическом способа наружного класса.
Вложенные классы, определенные в интерфейсах, числятся по дефлоту статическими и общественными.
1.9 Цикл for-each, аргументы переменной длины, настраиваемые типы в Java
Цикл for each дозволяет поочередно перебрать все элементы набора данных.
for (ElementType element : collection) { … }
объект collection должен поддерживать интерфейс Iterable либо быть массивом:
public interface Iterable<E> {
Iterator<E> iterator();
}
способ с переменным числом характеристик:
int sum(int… args);
void format(String fmt, Object… objs);
Многоточие тут эквивалентно [], другими словами args и objs – массивы аргументов обозначенного типа.
Настраиваемые типы (generics) – метод параметризации класса остальным классом. Обычно применяется в коллекциях объектов.
Внедрение:
LinkedList<Integer> li = new LinkedList<Integer>();
li.add(new Integer(0));
Объявление:
class LinkedList<T> {
void add(T element) { … }
}
Ограничение:
class MyClass<T extends Exception> { … }
тут T – подтип класса Exception.
Можно применять несколько характеристик:
class MyClass<T, E, M> {…}
Можно параметризировать способ:
<T> void method(T[] a, Colletion<T> c) { … }
Параметр ? обозначает хоть какой тип:
ArrayList<?> a = new ArrayList<Number>();
Можно также указать ограничения:
ArrayList<? extends Shape> a = new ArrayList<Triangle>(); /* Triangle – подкласс Shape */
ArrayList<? super Triangle> a = new ArrayList<Shape>(); /* Shape – базисный для Triangle */
Ограничения generics: недозволено применять обыкновенные типы в качестве характеристик, недозволено определять параметризированные массивы, недозволено применять generic-типы в исключениях, недозволено применять instanceof, недозволено задавать значения по дефлоту для характеристик типов, недозволено применять тип-параметр для сотворения объекта, недозволено клонировать объект, имеющий тип параметра. Механизм generics реализуется компилятором, на уровне виртуальной машинки про это ничего не понятно. При параметризации не создаются новейшие классы (ключевое отличие от templates в C++).
1.10 Многопоточность в Java: создание потоков
Класс, код которого будет производиться в другом потоке, должен реализовывать интерфейс Runnable:
public interface Runnable {
void run();
}
Потом действуем так:
MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
Можно также унаследовать собственный класс от Thread (он реализует Runnable), так еще проще.
Поток завершает работу, когда способ run() возвращает управление. Можно также запросить прерывание потока, вызвав t.interrupt(). Опосля этого поток может проверить статус прерывания:
if( Thread.currentThread( ).isInterrupted( ) ) { … }
Если interrupt() вызван для заблокированного потока, он заканчивается и выбрасывает исключение InterruptedException.
Поток блокируется, если для него вызван sleep(), если он делает блокирующий ввод-вывод, если он пробует заблокировать заблокированный объект, если он ждет выполнения условия, если для него вызван способ suspend() (устаревший).
1.11 Многопоточность в Java: синхронизация
Синхронизация в многопоточном приложении требуется в ситуации гонки (race condition). В этом случае требуется ограничить выполнение фрагмента кода одним потоком.
Ранее использовалось ключевое слово synchronized, которым помечается способ класса. Этот способ будет производиться лишь одним потоком сразу. Получается из-за неявного сотворения объекта блокировки.
Наиболее гибкий метод – внедрение объектов блокировок: Java.util.concurrent.locks.ReentrantLock.
myLock.lock(); // объект ReentrantLock
try { … }
finally { myLock.unlock(); }
объект ReentrantLock может блокироваться одним потоком несколько раз, но позже должен быть столько же раз разблокирован.
С объектом блокировки можно связать объект условия (типа Condition):
myCondition = myLock.newCondition();
Для условия определены способы:
myCondition.await() // уступить объект блокировки.
myCondition.signalAll() /* все ожидающие потоки возобновят выполнение */
Обычно делают так:
while (!(можно продолжать))
myCondition.await();
Любой объект быть может объектом блокировки. Для этого в классе Object есть способы notifyAll(), notify(), wait().
Синхронизированные блоки:
synchronized(obj) { … }
тут obj – хоть какой объект, который выступает в качестве объекта блокировки.
Можно создать проще – объявить переменную volatile, тогда синхронизация доступа к данной нам переменной будет происходить автоматом.
Блокирующие очереди – употребляются для ситуации читателей и писателей. Классы: LinkedBlockingQueue, ArrayBlockingQueue, PriorityBlockingQueue, DelayQueue. Такие очереди обеспечивают синхронизированный доступ к своим элементам и имеют способы: add (добавить элемент), remove (удалить из головы), element (вернуть из головы без извлечения), offer (добавляет элемент с проверкой переполнения), poll (удаляет из головы с проверкой пустоты), peek (возвращает из головы без извлечения с проверкой пустоты), put (блокирующее добавление элемента), take (блокирующее удаление из головы).
1.12 Ввод-вывод в Java: общие сведения
В Java ввод-вывод основывается на потоках (streams) и файлах (files).
Поток ввода – объект, из которого можно считывать последовательность байтов либо знаков, определяется абстрактным классом InputStream (описывает способ int read(), читающий один б). Поток вывода – объект, в который можно записывать последовательность байтов либо знаков, определяется абстрактным классом OutputString (описывает способ void write(int b), записывающий один б). способы read и write могут перекрыть поток. Есть и остальные способы: int read(byte[] b), void write(byte[] b) и т.д.
Классы Reader и Writer подобны InputStream и OutputStream, но употребляются для Unicode-текстов.
Потоки ввода-вывода можно соединять воединыжды в цепочки:
FileInputStream fin = new FileInputStream(“file.dat”);
DataInputStream din – new DataInputStream(fin);
double s = din.readDouble();
Консольный ввод-вывод осуществляется при помощи объектов System.in (типа InputStream) и System.out (типа PrintStream).
1.13 Форматированный ввод-вывод в Java (J2SE 1.5)
Класс Formatter – база логики форматирования. Примеры функции форматирования — задание точности и ширины дробного числа (%7.4f), представлеие времени (%tT). Можно использовать разные форматы для 1-го аргумента – в этом случае указываеться порядковый номер аргумента (%3$s для третьего). Вид параметра:
%[argument_index$][flags][width][.precision]conversion
Конструктору класса Formatter можно передать локаль хотимого языка. Само форматирование осуществляется способом format(). Подобно printf в него передается строчка с шаблоном форматирования и аргументы. Можно применять локаль, лучшую от той, что использовалась в конструкторе:
public Formatter format(String format, Object… args)
public Formatter format(Locale l, String format, Object… args)
formatter.format(«PI = %12.10f», Math.PI);
Классы PrintStream, PrintWriter разрешают перенаправить форматированный текст в поток. В обычных потоках (System.out, System.err) есть способы, дозволяющие сходу передавать в их форматированный текст. Не считая способа format() в классах, работающих с потоками, возникает printf(). Это синонимиы – ведут себя идиентично.
public PrintStream format(String format, Object… args)
public PrintStream format(Locale l, String format, Object… args)
System.out.format(«сейчас %1$tB %1$te, %1$tY.», Calendar.getInstance());
В классе String имеется способ format(). Работает так же, но возвращает String.
Можно применять собственные объекты с Formatter – для этого применяется интерфейс Formattable. Реализовав способ formatTo() в собственном классе, можно применять класс в качестве аргумента при форматировании строк:
void formatTo(Formatter formatter, int flags, Integer width, Integer precision);
Класс Scanner – обычный сканер, который может считывать обыкновенные типы и строчки. Есть частичная поддержка постоянных выражений. Scanner разбивает ввод, используя эталон разделителя (пробел по дефлоту). Из приобретенных лексем значения обычных типов достаются nextХХХ() способами: nextBoolean(), nextFloat(),nextInt() и т.д. и т.п.
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
способы hasNextXXX() (hasNextInt(), hasNextDouble(), …) инспектируют – является ли еще одна лексема значением обозначенного типа.
1.14 О программировании графики в Java
Поначалу в Java возникла библиотека AWT (abstract window toolkit) (Java.awt), которая употребляла платформенно-зависимые средства для отображения частей GUI. Позднее возникла IFC (internet foundation classes), которая все элементы интерфейса отрисовывала в окне. Ее преемницей стала библиотека Swing (javax.swing), которая употребляется и на данный момент. Swing не может работать без помощи других, без опоры на AWT. Swing работает медлительнее, чем AWT, но предоставляет наиболее обеспеченный набор средств, не зависит от платформы (меньше ошибок) и на всех платформах смотрится идиентично.
Окно верхнего уровня (не содержащееся снутри остальных окон) именуется фреймом: классы Frame (AWT) и JFrame (Swing).
Показывать данные можно конкретно на фрейме, но обычно он употребляется как контейнер для остальных GUI-компонентов. Фрейм состоит из нескольких слоев-областей (корневой области, область слоя, прозрачная область и область отображения). Составляющие располагаются на области отображения. К примеру, чтоб расположить компонент:
Container contentPane = frame.getContentPane();
Component c = …;
contentPane.add(c);
Для рисования на компоненте нужно переопределить его способ void paintComponent(Graphics g). Graphics – набор опций контекста для рисования. способ paintComponent вызывается автоматом, когда требуется перерисовка компонента, но можно вызвать его принудительно при помощи способа repaint().
При обработке событий в библиотеке AWT действия передаются от источников (к примеру, клавиш) к обработчикам. объект действия – это объект подкласса java.util.EventObject, который несет внутри себя информацию о событии. Обработчик – это хоть какой объект класса, реализующего особый интерфейс.
Пример:
class MyListener implements ActionListener {
public void actionPerformed(ActionEvent event) {…}
}
…
ActionListener listener = new MyListener();
JButton button = new JButton(“OK”);
button.addActionListener(listener);
В качестве обработчиков нередко употребляются вложенные классы.
1.15 Реализация технологии клиент-сервер на Java
Обмен данными меж клиентом и сервером осуществляется средством механизма сокетов. Для поключения к удаленному хосту употребляется класс Socket, конструктор которого воспринимает имя хоста и порт подключения. Опосля подключения вызываются способы getInputStream() и getOutputStream() для получения входного и выходного потока сокета. Закрытие сокета производит способ close().
Для сотворения сервера употребляется класс ServerSocket:
ServerSocket ss = new ServerSocket(1234); /* сокет для прослушивания порта */
Socket incoming = s.accept(); /* сокет для обмена данными с клиентом */
…
s.close();
Обычно делают многопоточным с одним основным потоком, который воспринимает входящие соединения и распределяет их по потокам (к примеру, при помощи блокирующих очередей).
Классы URL и URLConnection инкапсулируют подробности извлечения инфы с удаленного узла.
URL url = new URL(“somehost”);
URLConnection con = url.openConnection();
// настроить подключение …
con.connect(); // запрос заголовка
// обработка полей заголовка …
InputStream is = con.getInputStream();
Для представления веб-адресов употребляется класс java.net.InetAddress.
1.16 Апплеты в Java
Апплеты – это программки на Java, загружаемые с Интернет-сервера и выполняемые в браузере. Апплет представляет собой GUI-программу, написанную при помощи AWT и/либо Swing с той различием, что в данном случае программка запускается не из функции main, а методом сотворения объекта класса, унаследованного от класса html-файл, содержащий фрагмент:
<applet code=”MyFile.class” … />
В классе, унаследованном от аналог функции main(). Должен быть перегружен.
start() – производится при запуске апплета.
stop() – производится, когда юзер покидает страничку с апплетом.
destroy() – производится при окончании работы браузера.
Хотя обычно апплет не просит сотворения фреймов и производится на панели, тем не наименее, можно сделать фрейм. Он будет отображен в отдельном окне вне браузера, но при всем этом не будет самостоятельным приложением.
Если в классе апплета, унаследованном от работы приложения как в виде апплета, так и в виде обособленного приложения.
Апплеты работают в обособленной «песочнице» (sandbox). При выполнении апплетов действуют строгие правила сохранности: недозволено запускать исполняемые файлы на компе юзера, недозволено вести взаимодействие ни с какими компами, не считая сервера, недозволено обращаться к локальной файловой системе, недозволено получать информацию о локальном компе (кроме малой). Нарушение этих правил ведет к генерации исключения SecurityException. Некие правила можно обойти, если подписать апплет электрической подписью.
1.17 Разработка RMI в Java
RMI (remote method invocation) – разработка удаленного вызова способов объектов, написанных на Java. Клиент – тот, кто вызывает способ. – тот, чей способ вызывается. На клиентской стороне представителем серверного объекта является заглушка (stub), способ которой практически вызывает клиент. При вызове способа заглушка производит сериализацию объектов, их кодирование (маршалинг), упаковывает их в блок вкупе с информацией о вызываемом способе и передает серверу. На сервере объект-получатель (скелетон) делает оборотные деяния, производит выполнение способа, и таковым же образом передает результаты назад клиенту.
Для удаленного вызова клиент употребляет интерфейсную переменную (которая по сути ссылается на заглушку).
При передаче объекта меж виртуальными машинками обе машинки обязаны иметь доступ к файлу класса.
вместе применяемый интерфейс должен расширять интерфейс Java.rmi.Remote, а все способы интерфейса должны докладывать о том, что при их выполнении может появиться исключение RemoteException. Соответственно, при любом вызове удаленного способа нужно перехватывать RemoteException. Серверный объект должен наследовать Java.rmi.server.RemoteServer (абстрактный класс), но можно и определенную реализацию – UnicastRemoteObject.
В JDK классы заглушки и каркасы (скелетоны) генерируются автоматом, ранее необходимо было применять утилиту rmic.
Для получения ссылки на заглушку на клиентской стороне употребляется служба регистрации самозагрузки (bootstrap registry service). регистрирует удаленный объект под определенным именованием, а клиент его получает. К примеру:
//
IfaceImpl pl = new IfaceImpl();
Context namingContext = new InitialContext();
namingContext.bind(“rmi:myobject”m pl);
// клиент
Iface p = (Iface)namingContext.lookup(“rmi://myserver.com/toaster”);
Служба регистрации автозагрузки обязана быть запущена в операционной системе раздельно
1.18 О интерфейсе JDBC
Модель JDBC базирована на ODBC: программка ведет взаимодействие с диспетчером драйверов JDBC, который выбирает пригодный в данном случае драйвер (к примеру, драйвер Oracle) либо мост (к примеру, мост JDBC/ODBC). Целью разработки JDBC была разработка модели, работающей идиентично независимо от платформы и от поставщика данных. Предполагалось, что вся работа с БД будет осуществляться при помощи SQL и Java. Классы JDBC размещаются в пакетах java.sql и javax.sql.
Подключение к БД:
Connection con = DriverManager.getConnection(url, username, Password);
Выполнение запроса:
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(“SELECT …”);
ResultSet быть может изготовлен обновляемым (другими словами вносимые конфигурации отражаются в БД), если указать особенные характеристики при разработке Statement.
По дефлоту любая SQL-команда производится в собственной транзакции, но можно это отключить:
con.setAutoCommit(false);
con.commit();
con.rollback();
1.19 Общие сведения о технологии CORBA
CORBA (common object request broker architecture) – разработка удаленной работы с объектами. CORBA, в отличие от RMI, обеспечивает взаимодействие меж объектами, написанными на различных языках. Для этого употребляется брокер объектных запросов (ORB), который работает и на клиенте, и на сервере.
Поначалу описывается интерфейс на языке IDL. Позже это описание компилируется в классы-заглушки и вспомогательные классы на мотивированных языках. Потом реализуются и компилируются объекты-серверы, опосля что они регистрируются в программе-сервере (более комфортны метод регистрации – внедрение службы имен CORBA, аналогичной реестру RMI). Опосля этого уже можно создавать программу-клиент и запускать клиент и сервер.
2.
Общие положения теории РСОИ
2.1 понятие о РСОИ
РС содержит составляющие, которые распределены по различным компам.
РС – набор независящих компов, представляющихся их юзерам единой системой. Юзеры и приложения единообразно работают в РС, независимо от того, где и когда происходит их взаимодействие.
хост – комп, на котором расположены составляющие вычислительной системы: аппаратура и сетевая ОС.
Взаимодействие РС
А – головная )
боль для программистов.
РС содержит несколько хостов и наиболее 1-го компонента. Составляющие должны вести взаимодействие друг с другом.
Взаимодействие компонент:
Предоставляет доступ к своим службам
Компонент может запрашивать сервис у остальных компонент
Для взаимодействия употребляется тот либо другой вариант промежного уровня, который решает делему неоднородности и распределения. Промежный слой размещается меж компонентами и сетевой ОС
Промежный слой.
хост – комп, на котором производятся составляющие, составляющие часть распределенной системы.
Распределенная система – группа автономных хостов, соединенных с помощью компьютерных сетей.
На любом хосте:
производятся составляющие
работает промежный слой. Составляющие, которые координируют свои деяния, таковым образом, что юзер принимает систему как единое интегрированное вычислительное средство.
2.2 Примеры РСОИ
Распределенная система вычислений от Гугл.
РС Nutch построен на базе Hadoop — это фреймворк, реализующий идею MapReduce. определения map и reduce пришли из многофункционального программирования, где они означают последующее: reduce это функция типа α -> β, map — функция типа (α -> β) -> [α] -> [β]. Другими словами map применяет переданную ей первым аргументом функцию reduce к списку частей типа α и на выходе выходит перечень частей типа β. к примеру, если мы определим функцию square x = x ∗ x, вызов map square[1,2,3] возвратит [1,4,9]. Если reduce функция без побочных эффектов (другими словами она не изменяет ничего за пределами собственной области видимости), то использовать ее можно сразу к нескольким элементам входного перечня. Гугловый фреймворк MapReduce дозволяет прозрачно для программки разносить эти вычисления по почти всем машинкам. Hadoop представляет собой open-source реализацию данной нам же идеи на Java.
Распределенная система синхронизация кода.
Отличие таковых систем — отсутствие центрального репозитория, к которому обращаются клиентские программки; репозиториев быть может много и меж ними существует возможность синхронизации. Таковой механизм работы даёт больше свободы разрабу, заместо получения рабочей копии и её отправки назад в центральный репозиторий разраб может получить репозиторий в своё полное владение — заносить конфигурации на своё усмотрение и лишь отдельные конфигурации синхронизировать с главным репозиторием.
Распределенные системы обнаружения мусора.
Сбор инфы в разных репозитариях (характеристики приходящей почты, сигнатуры), анализ инфы (анализ технической инфы сообщения, анализ тела сообщения (контентный анализ) способами лингвистики, или статистики), на основании анализа публикация в репозитарии признаков мусора и синхронизация данной нам инфы с иными распределенными точками сбора инфы.
Распределенная система управления сетями.
Сбор и анализ инфы о сети. Управляющая станция со особым ПО , центральная БД. Агенты на разных устройствах и службах – собирают информацию, сохраняют для себя на лок. БД, отсылают информацию в определенные моменты управляющей станции.
Распределенная файловая система (Distributed File System – DFS) для OL Windows 2000 Server представляет собой одну из сетевых служб, которая упрощает поиск и администрирование данных в корпоративных сетях.
Когда вы пользуетесь распределенной файловой системой, ее настоящая структура укрыта от вас и в реальности может иметь динамический нрав. Так, можно сделать иерархическую файловую структуру, корневой каталог которой будет находиться на NT-сервере, а все ее узлы будут распределены на разных носителях в сети. DFS представляет собой инструмент, позволяющий юзерам корпоративной информационной системы получить единообразное системы – носят глобальный нрав и оказывают существенное воздействие на выбор общей архитектуры системы на шаге проектирования:
Масштабируемость
Способность системы приспособиться к будущему росту перегрузки. Задачи: узенькие места по обслуживанию (один сервер для огромного количества клиентов), по данным (один файл с общей информацией), по методам (централизованный метод и перегрузка коммуникационной сети). Характеристики децентрализованных алгоритмов:
· никто не владеет полной информацией о системе
· Решения принимаются на базе лекальной инфы
· Сбой в одном месте не вызывает нарушения работы метода
· существования одного времени не требуется
· Прозрачность (в последующем билете)
Открытость
Систему можно просто расширять и видоизменять (Интеграция новейших компонент, отвечающих новеньким многофункциональным требованиям => составляющие обязаны иметь верно определенные интерфейсы) Верный интерфейс обеспечивает возможность правильной совместной работы 1-го процесса с остальным, представляющим интерфейс. Самодостаточность и нейтральность. Переносимость охарактеризовывает, как приложение, изготовленное для одной системы, может работать в составе иной. Способность к взаимодействию охарактеризовывает, как две различные реализации системы в состоянии работать вместе.
Упругость – легкость конфигурирования системы, состоящей из разных компонент, и легкость подключения новейших компонент.
Неоднородность
В распределенных системах, составляющие должны объявлять о предлагаемых услугах. Заявки могут быть синхронными/асинхронными. клиент и сервер могут быть неоднородными. Предпосылки неоднородности:
· Составляющие могут приобретаться в готовом виде
· При разработке новейшего компонента, на него могут накладываться требования взаимодействия с существующими компонентами
· Составляющие создаются различными разрабами
· Употребляются разные технологии
Разделение ресурсов
Ресурс – аппаратура, ПО , данные. Требуется найти, кому будет разрешен доступ к ресурсу => требуется вести учет юзеров. Менеджерресурсов – компонент, предоставляющий доступ к разделяемым ресурсам.
Модели взаимодействия:
· клиент-серверная (сервер предоставляет доступ к ресурсам)
· Теория распределенных объектов, предоставляющих доступ к имеющимся у их ресурсам при воззвании остальных компонент
Отказоустойчивость
Система может продолжать работу даже в случае неисправности => избыточность => применение репликации (при отказе компонента, начинает работать его копия и сервис не прекращается)
2.4 Прозрачность в РСОИ
Имеет несколько разных качеств:
1. Прозрачность масштабируемости (обеспечивается 4, 5) — программер не должен знать, как достигается масштабируемость распределенной системы.
2. Прозрачность производительности (обеспечивается 4, 5) – юзер и программер не знают, как поддерживается отменная производительность.
3. Прозрачность отказа (обеспечивается 5, 6) — юзерам и программерам не требуется знать, как ВС совладевает с отказами.
4. Прозрачность передвижения (обеспечивается 7, 8) – перемещение компонент неприметно для юзеров и без особых действий со стороны разрабов этих компонент
5. Прозрачность репликации (обеспечивается 7, 8) – юзерам и разраба не требуется знать, кто предоставляет услугу – реплика либо главный компонент. Создатели составляющие не должны учесть возможность его репликации
6. Реплика – копия, которая остается синхронизированной с оригиналом
7. Прозрачность одновременного выполнения. значит, что юзеры программки не знают, что составляющие запрашивают услуги сразу. Несколько компонент могут запрашивать сервис сразу с сохранением его услов-ти. Юзеры и создатели не лицезреют, как организуется сразу сервис.
8. Прозрачность доступа – одинаковость интерфейсов для локальной и удаленной связи (интерфейс заявки на сервис должен быть одним и этим же для связи меж компонентами 1-го хоста и различных хостов)
9. Прозрачность местопребывания – метод вызова операции не зависит от местопребывания компонента (запрашивающему сервис объекту не требуется знать о физическом расположении компонента). Клиент не должен знать о местонахождении компонента либо его высказывания.
2.5 Удаленный вызов процедуры: общие сведения
Есть машинки: A и B. A вызывает функцию, которая производится на B.
count = read(fd, buf, bytes);
Стек при вызове процедуры:
bytes
buf
fd
адресок возварата
локальные переменные
Передавать характеристики по значению просто, а вот по ссылке – неувязка. Вызов через клонирование восстановлением. Удаленный вызов смотрится как локальный, другими словами RPC обеспечивает прозрачность для клиента. Сервер тоже не подозревает, что он делает удаленный вызов.
На сервере есть подобная заглушка; делает запрос, возвращает итог. Неувязка: передача по адресу. Решение: можно предавать копию буфера.
Последовательность передачи управления при RPC:
2.6 Передача характеристик при удаленном вызове процедур
При удаленном вызове процедур процесс на 1 узле вызывает функцию процесса на 2 узле. Сложность состоит в том, что процессы работают в различных адресных местах (АП). При передаче характеристик по значению это непринципиально, т.к. неувязка. Тут можно применять иной вариант передачи характеристик (отсутствует в С) – копирование-восстановление.
Передача характеристик по значению.
· Формируется пакет, содержащий имя процедуры и ее характеристики;
· Сообщение принимается заглушкой-сервером;
· Заглушка на сервере сформировывает вызов процедуры (как локальной).
Клиентский процесс приостанавливает свою работу и ожидает возвращение результата. При получении результата он продолжает работу.
Передача характеристик по ссылке (копирование-восстановление).
Пример: чтение удаленного файла в массив.
Передать копию ссылки не представляется вероятным, потому что ссылка – это указатель в АП клиента, глупо передавать ее копию. Вариант решения: можно поступить так: взять массив, на который указывает указатель, и передать копию этого массива. Все это помещается в сообщение, передаваемое на . На сервере выделяется пространство под массив, ссылка на массив в АП сервера. Заглушка передает характеристики серверному процессу, и он по всем правилам обращается к ОС и помещает итог в массив в собственном АП. Заглушка упаковывает массив в сообщение и передает его на клиентскую заглушку при помощи ОС. Клиентская заглушка распаковывает это сообщение и помещает значения в тот массив, который находится в АП клиента. Клиентский процесс получает итог, как как будто он обратился локально. Эта удаленность прозрачна для обоих.
Заглушки должны применять один протокол, по которому они будут представлять интегрированные типы. Если заглушки работают по одному и тому же протоколу, они будут различаться лишь интерфейсами на машинках.
Чтоб облегчить работу по созданию заглушек, употребляется язык определения интерфейсов. IDL – Interface Definition Language.
2.7 Организация распределенных объектов
Распределенный объект (РО) – таковой объект, реализация которого размещается на сервере, а взаимодействие клиентов с ним происходит через определенный интерфейс.
В адресное место клиента загружается реализация этого интерфейса – заместитель (proxy). Клиент конкретно ведет взаимодействие конкретно с заместителем.
процесс формирования интерфейса и заместителя – привязка клиента к РО. системы с РО предоставляют ссылки на объекты, неповторимые в границах системы. Такие ссылки могут передаваться меж действиями, запущенными на различных машинках. Виды привязки:
Неявная (автоматическая) – клиент прозрачно связывается с объектом в момент разрешения ссылки (это когда по имени объекта получаем ссылку на него).
Очевидная – клиент должен вызвать специальную функцию для привязки к объекту.
адаптер объектов – механизм группирования объектов в согласовании с политикой их активизации. Контролирует один либо несколько объектов.
Скелетон – образ клиента на сервере (заглушка сервера).
Клиент через заместителя вызывает определенный способ объекта и задает характеристики этого способа. Заместитель сформировывает и упаковывает сообщение (маршалинг) и посылает его на . В этом сообщении содержится ссылка на объект, способ и значения характеристик. получает сообщение, и передает его соответственному скелетону. Скелетон распаковывает сообщение (демаршалинг) и конкретно вызывает определенный способ объекта с данными клиентом параметрами. Если предполагается, что способ чего-нибудть возвращает, то скелетон упаковывает итог и посылает его заместителю.
Сохранные и нерезидентные объекты
Сохранный – объект продолжает существовать, даже не находясь повсевременно в адресном пространстве серверного процесса. Другими словами, объект постоянно можно воссоздать из памяти независимо от наличия процесса.
Нерезидентный – существует, пока им управляет . Когда завершает работу, это объект прекращает существование.
методы определения местопребывания РО
Именование – управление местами имен, представляющими из себя наборы связей меж именами объектов и ссылками на их.
Трейдинг – определение местопребывания объектов исходя из предоставляемых ими функций и свойства обслуживания.
2.8 Передача характеристик при воззвании к удаленным объектам
Статическое удаленное воззвание к способам (RMI).
При статическом воззвании интерфейс удаленного объекта описывается при помощи IDL, т.е. интерфейс известен на шаге компиляции.
Пример: Описание интерфейса футболиста.
interface Player: Object {
typedef struct Date {
short day; short month; short year;
}
attribute string name;
readonly attribute Date Dob;
};
interface PlayerStore: Object {
exception IDNotFound();
short save (in Player);
Player load(in short id) raises (IDNotFound);
void print(in Player p);
}
При использовании статического воззвания интерфейсы должны быть уже известны и при изменении интерфейса нужна перекомпиляция.
Динамическое удаленное воззвание к способам.
При динамическом воззвании интерфейс удаленного объекта заблаговременно не известен. характеристики воззвания к способу собираются в процессе выполнения. Заблаговременно непонятно, к какому способу будет воззвание.
invoke (object, method, input inparam, out outparam);
Передача характеристик.
Употребляются ссылки на объекты как характеристики, которые передаются при воззвании к удаленному объекту. объект, ссылка на который передается:
· находится в адресном пространстве клиента;
· находится удаленно.
Они реализуются по-разному. ссылка передается лишь для удаленных объектов. Если объект локальный, то передается копия самого объекта.
При удаленном вызове клиентом на машине А сервера на машине С осуществляется копирование объекта O1 и передача ссылки на объект O2.
2.9 Серверы объектов
Серверы объектов (СО) – серверы, направленные на поддержку распределенных объектов. СО (в отличие от обычных серверов) НЕ предоставляет определенные службы, т.к. определенные службы реализуются объектами, расположенными на сервере. СО предоставляет лишь средства воззвания к объектам, основанные на запросах от удаленных клиентов.
Активизация объекта – перемещение объекта в адресное место сервера (к примеру, десериализация). Правила воззвания к объектам – Политика активизации. Требуется механизм группировки объектов в согласовании с политикой активизации всякого из их. Сиим механизмом является адаптер объектов. Почаще всего он укрыт в наборе средств построения СО. Любой адаптер объектов контролирует 1 либо несколько объектов. При получении запроса к одному из контролируемых объектов адаптер инспектирует его состояние и по мере необходимости активизирует в согласовании с политикой активизации. Опосля этого запрос передается к заглушке (скелетону) объекта, которая производит демаршаллинг (распаковку характеристик) и производит вызов способа. адаптер ничего не понимает о интерфейсах объектов.
2.10 Перенос кода в РСОИ
Перенос кода нужен для:
· перераспределения перегрузки меж узлами для увеличения производительности;
· понижения трафика клиент-серверного взаимодействия.
У задачки выделяют последующие сегменты:
· сектор кода – команды;
· сектор выполнения – контекст задачки;
· сектор ресурсов – ресурсы.
Модели переноса кода:
Малые требования для переноса кода предъявляет модель слабенькой мобильности – перенос лишь сектора кода. Потому программка постоянно производится из собственного начального состояния. Пример: Java Applet.
В модели мощной мобильности переносится сектор кода и сектор выполнения. процесс приостанавливается, переносится и запускается на другом узле. Пример: мультиагентная платформа.
Типы связи процесса с ресурсом:
процесс передает в точности тот ресурс, на который ссылаются аргументы (более мощная связь);
Наиболее слабенькая связь — процессу необходимо лишь
Более слабенькая форма связи – процесс показывает только на внедрение ресурса определенного типа.
Программный агент.
Автономный процесс, способный реагировать на среду выполнения и вызывать в ней конфигурации, может быть в кооперации с иными агентами (кооперативные агенты) и юзером. Агент может работать автономно, в том числе проявлять инициативу. В мультиагентной системе бытуют кооперативные агенты, решающие общую задачку.
2.11 Модель клиент-сервер
Серверы – процессы, реализующие службы и предоставляющие к ним доступ.
Клиенты – процессы, использующие эти службы.
Разглядим на примере доступа к БД:
При трехуровневой организации системы имеем последующие логические уровни:
· Пользовательский интерфейс (ПИ на рисунке).
· Обработки (О).
· Данных (конкретная работа с БД).
Варианты физического разделения уровней меж узлами:
На этом рисунке клиент «утолщается» слева вправо.
Взаимодействие клиента с сервером происходит последующим образом:
2.12 Общие сведение о именовании объектов и службе именования
Именование – метод определения местопребывания распределенных объектов, при котором осуществляется управление местами имен, представляющими из себя наборы связей меж именами объектов и ссылками на их.
Контекст именования – последовательность обычных имен, идентифицирующая объект. К примеру “UEFA”, “England”, “Premier”, “Chelsea”.
Операции:
Связывание – регистрация объекта-сервиса по имени и объектной ссылке. Употребляется при добавлении новейшего объекта в систему либо при перемещении / копировании имеющегося объекта.
Разрешение – получение ссылки на объект по его имени. Употребляется клиентом для получения доступа к способам объекта.
Размещение мобильных сущностей.
Мобильные сути – это те объекты, которые могут гулять по различным хостам. В этом случае место имен комфортно разбить на 3 уровня:
· Глобальный
· Административный
· Управленческий
В 1 и 2 помещаются объекты, которые передвигаются относительно изредка. Тут отлично кэширование путей.
В 3 объекты гуляют нередко, и для их употребляется последующая система:
По имени объекта служба именования описывает его идентификатор, потом служба локализации по ид находит его физический адресок.
2.12 Общие сведения о синхронизации в РСОИ
У всякого узла собственный системный таймер. Возникает неувязка синхронизации часов. Пусть у узла р время Ср(t), тогда:
где ρ – наибольшая скорость дрейфа времени, t — UTC. Если требуется рассинхронизация не наиболее δ, то через любые
нужна синхронизация часов.
Метод Кристиана.
Есть узел, принимающий сигналы четкого времени – сервер времени. Другие узлы через любые
обращаются к серверу и получают
нужно время на запрос и возврат результата. Решение: если время запрошено в момент Т0, а получено в момент Т1, то установить часы на приобретенное время + (Т1-Т0)/2.
Если часы отстают, то мы их доставляем. А если часы торопятся, то мы их должны ставить вспять. А это не допустимо. Тогда мы не мгновенно подстраиваем часы, а растягиваем это во времени, просто замедляя их ход.
Метод Беркли.
один узел – бес – временами собирает времена других узлов, получает среднее и рассылает назад.
Логические часы. метод Лампорта.
Есть ситуации, когда принципиально не четкое время выполнения процесса, а четкая последовательность выполнения. Для таковых случаев употребляют довольно нередко метод Лампорта синхронизации логических часов.
Лампорт обусловил отношение: «Происходит ранее». Оно обозначается: a — b. Это означает, что все процессы согласны с тем, что событие а происходит ранее b.
· Для 1-го процесса, если а ранее b, то отношение производится.
· Если а — посылка сообщения, а b – получение такого же сообщения, то отношение тоже производится.
· Отношение транзитивно.
В методе любому событию a ставится метка времени C(a). Эта метка обязана быть принята как достоверно верная всеми действиями. Другими словами если вправду a — b, то C(a) < C(b). Любому сообщению прикрепляется временная метка. Получатель ассоциирует ее со своим временем. Если его время меньше метки, то оно устанавливается равным метка+1. Даже если 2 сообщения посланы практически сразу, их метки различаются.
2.13 Актуальный цикл распределенных объектов
2.13.1 C
оздание объектов
Требуется сделать объект в адресном пространстве (АП) сервера (конструктор сделал бы в АП клиента). Для этого нужна фабрика. Чтоб отыскать фабрику, нужен искатель фабрик. Чтоб отыскать искатель фабрик, употребляется именования либо трейдинг.
2.13.2 М
играция объектов.
Объектная миграция – копирование либо перемещение объекта сервера с 1 машинки на другую. Чтоб объект дозволял миграцию, нужен интерфейс, реализующий операции copy и move с параметром – искателем фабрик. Через фабрику создается объект на новеньком месте, в него копируется состояние начального объекта. Дальше в случае перемещения начальный объект удаляется. При копировании создается новенькая ссылка на объект (т.к. начальный объект остается).
При перемещении: Есть объект в каком-то адресном пространстве. При перемещении он оставляет заместителя, а в новеньком АП формируется скелетон. Таковая схема прозрачна для клиента: он не понимает, что происходили перемещения. При получении запроса ответ может пойти по прямой, если понятно, кто запросил сервис этого удаленного объекта.
скелетон
Если цепочка оборвалась (разрыв связи, зависание…), добраться до удаленного объекта больше нереально. Биться с сиим можно при помощи базисной точки.
машинка, на которой создавался объект, именуется базисной точкой. Требуется, чтоб эта машинка постоянно имела информацию о текущем местоположении сделанного ею объекта. Тогда если не удается по цепочке указателей добраться до объекта, т.е. некий промежный процесс завис, то происходит воззвание к базисной точке.
2.13.3 Копирование объектов
Чтоб объект дозволял копирование, нужен интерфейс, реализующий операцию copy с параметром – искателем фабрик. Через фабрику создается объект на новеньком месте, в него копируется состояние начального объекта. Создается новенькая ссылка на объект (т.к. начальный объект остается).
3. Разработка
J2EE
3.1 Общие сведения
Платформа J2EE – комплекс взаимодействующих технологий, базирующихся на спецификациях конторы Sun и представляющих эталон разработки серверных приложений (уровня компании).
Индивидуальности:
· Независимость от платформы.
· Простота разработки приложений на базе компонентной технологии.
· Переносимость и расширяемость.
· Возможность разработки распределенных приложений.
· Возможность интеграции с иными платформами.
· Возможность интеграции с существующими информационными системами.
· Обеспечение надежной защиты инфы.
J2EE – набор спецификаций, устанавливающих правила, которых следует придерживаться поставщикам определенных реализаций J2EE, также разрабам приложений.
3.2 Архитектура J2EE
Поддерживаются различные типы клиентов: HTML – браузеры, апплеты, автономные java-приложения.
Уровень представления – нередко реализуется в виде Интернет-уровня.
Уровень бизнес-логики – в виде уровня EJB (Enterprise Java Beans).
Уровень интеграции – уровень сервера БД – EIS (Enterprise Information Server). Это адаптеры ресурсов J2EE.
приложений – содержит контейнеры компонент EJB.
Индивидуальности:
· Доступ к инфраструктуре J2EE.
· Управление актуальным циклом компонент EJB.
· Доступ к БД с внедрением JDBC.
· Контейнер изолирует компонент от клиента. Все запросы перехватываются контейнером.
· У всякого компонента есть объект EJBContext, который является ссылкой на контейнер.
· Контейнер автоматом делает набор соединений с БД.
· Контейнер дозволяет соединять воединыжды несколько компонент снутри одной транзакции.
Аббревиатуры:
JMS – Java Messaging Service
JSP – Java Server Page
JTA – Java Transaction API
JAF – Java Beans Activation Framework
JAXP – Java API for XML Parser
JAAS – Java Authentication and Authorization Service
3.3 EJB – Enterprise Java Beans
EJB – серверная java разработка, основанная на транзакциях. Дозволяет стремительно и относительно просто разрабатывать распределенные, транзакционные, неопасные и портируемые Java приложения.
Компонент EJB представляет собой:
Remote – Расширенный интерфейс. Описывает способы компонента.
Remote Home – описывает способы актуального цикла для сотворения, удаления, поиска компонент(интерфейс фабрики классов)
Local – этот интерфейс употребляется иными компонентами находящимися в этом же контейнере.
Вызов происходит последующим образом
Модули EJB – объединенные в группу составляющие EJB, которые могут вести взаимодействие.
Типы компонент EJB:
Session
– соединены с бизнес действиями приложения; имеют доступ к бд, но не предоставляют доступа к ней; актуальный цикл – до перезагрузки сервера. ( вызов сессионных компонент: сервлетты, странички JSP, Java приложения). Делится на 2 типа:
Stateless
– не сохраняет инфы о собственном состоянии
Statefull
– могут сохранять инф о собственном состоянии
(У их очень различаются актуальные циклы.)
Entity
– моделируют бизнесс данные приложения; предоставляют доступ к БД; нередко 1 обращается к 2; t жизни = t жизни бд(при перезагр сервера автоматом восстанавливаются); вызов из 1 и компонент WEB;
MessageDriven
– прдставляют деяния. Их можно вызвать лишь отправив сообщение этому компоненту; При помощи 3 организуют доступ к 1. t жизни как у 1
Так цепочку воззваний в J2EE можно представить последующим образом:
Java Beans
JB это не EJB, EJB наиболее пространное понятие.
JB – для сотворения пользовательского интерфейса, для взаимодействия меж страничками.
EJB – для сотворения серв приложений, лишь не зрительные составляющие.
]]>