Написал черновик статьи, в которой попытался собрать различные высокоуровневые методологии/технологии (SOA, бизнес-процессы, автоматизация, OLTP, OLAP и т.д.) в единую информационную систему.
Получилось довольно размыто, обзорно и, естественно, туда поместилось не все, что хотелось. Но для закрепления определенного этапа - я думаю достаточно.
SOA в корпоративной информационной системе (161 КБ)
Обновление 25.04.2008
Статья опубликована: Вестник филиала Всероссийского заочного финансово-экономического института в г. Владимире. Выпуск 2. - Владимир, 2007. - 218 с. ISBN 5-89368-767-1 стр. 109-113
Saturday, November 24, 2007
SOA в корпоративной информационной системе
Ярлыки: BPMS, ESB, OLAP, OLTP, SOA, Мои Публикации
Автор Unknown на 11:59 PM 0 комментария(ев)
Обращение к private-элементам в Java (Java Reflection)
Недавно у нас с Ивом состоялся разговор о private-элементах Java (приватные классы, поля и т.д.)
Он был уверен, что если класс объявлен как приватный - его экземпляр нельзя создать где-либо еще, кроме как из класса, в котором он был объявлен. То же самое с приватными полями - если поле описано с модификатором доступа private, то к нему нельзя получить доступ если нет соответствующих getter/setter-методов.
На самом деле, механизм Java Reflection позволяет сделать с кодом все, что угодно и получить доступ к любой информации о коде и к состоянию объектов.
PublicClass.java
01
02 public class PublicClass {
03
04
/**
05* Значение этой переменной нельзя непосредственно установить из Java-кода
06 * оператором присваивания, но, как будет видно дальше, это значение можно
07 * изменить при помощи механизма рефлексии.
08 */
09 private int a = 0;
10
11 public int getA() {
12 return a;
13 }
14
15 /**
16 * Это приватный класс. Дальше в примерах мы создадим экземпляр этого класса
17 * и вызовем на нем метод <code>toString()</code>.
18 *
19 * Этот класс может существовать только в контексте экземпляра
20 * {@link PublicClass}; мы увидим, как можно установить контекст для нового
21 * экземпляра {@link PrivateInnerClass}.
22 *
23 * @author dmitrygusev
24 *
25 */
26 @SuppressWarnings("unused")
27 private class PrivateInnerClass {
28 @Override
29 public String toString() {
30 return "Hello from PrivateInnerClass instance!";
31 }
32 }
33
34 }
TestAccessPrivateMembers.java
01 import static org.junit.Assert.assertEquals;
02
03 import java.lang.reflect.Constructor;
04 import java.lang.reflect.Field;
05 import java.lang.reflect.Member;
06
07 import org.junit.Test;
08
09 public class TestAccessPrivateMembers {
10
11 /**
12 * Получим список объявленных конструкторов. Методы
13 * <code>java.lang.Class.getDeclaredXXX()</code>, например,
14 * {@link Class#getDeclaredConstructors()}, возвращают список всех
15 * объявленных элементов ({@link Member}), а не только
16 * <code>public</code>.
17 *
18 * Если нужно получить только <code>public</code> элементы, то можно
19 * воспользоваться методами <code>java.lang.Class.getYYY()</code>
20 * (например, {@link Class#getConstructors()}).
21 *
22 * @see java.lang.reflect.Member
23 * @see java.lang.Class
24 * @see java.lang.reflect.Field
25 * @see java.lang.reflect.Method
26 * @see java.lang.reflect.Constructor
27 */
28 @Test public void accessPrivateMembers() throws Exception {
29 /*
30 * В данном случае у нас лишь один inner-класс - PrivateInnerClass
31 */
32 Class<?> clazz = PublicClass.class.getDeclaredClasses()[0];
33
34 /*
35 * Получим его конктруктор по умолчанию
36 */
37 Constructor<?> constr = clazz.getDeclaredConstructors()[0];
38
39 /*
40 * Установим признак доступности этого конструктора, чтобы его можно
41 * было вызвать
42 */
43 constr.setAccessible(true);
44
45 /*
46 * Создадим класс-контекст для внутреннего класса
47 */
48 PublicClass pc = new PublicClass();
49
50 /*
51 * Создадим экземпляр внутреннего класса, передав класс-контекст в
52 * качестве параметра конструктору
53 */
54 Object o = constr.newInstance(pc);
55
56 /*
57 * Вызовем метод toString() на внутреннем классе
58 */
59 assertEquals("Hello from PrivateInnerClass instance!", o.toString());
60
61 /*
62 * Прочитаем значение private-переменной через соответствующий
63 * getter-метод
64 */
65 assertEquals(0, pc.getA());
66
67 /*
68 * Изменим значение этой private-переменной. Для этого нужно получить
69 * соответствующий объект java.lang.reflect.Field, у которого есть метод
70 * Field.set(object, value).
71 */
72 Field fieldA = pc.getClass().getDeclaredField("a");
73
74 fieldA.setAccessible(true);
75
76 fieldA.set(pc, 2);
77
78 /*
79 * Прочитаем значение private-поля - оно должно быть равно 2
80 */
81 assertEquals(2, pc.getA());
82 }
83
84 }
Ярлыки: Java
Автор Unknown на 10:36 PM 4 комментария(ев)
Tuesday, November 06, 2007
Сувениры Java
Заметил, что у меня накопилось уже много сувениров так или иначе связанные с тематикой Java. Буду выкладывать их в этот пост, интересно посмотреть... :)
Постер JavaPolis 2007
Прислали сегодня приглашение на JavaPolis 2007, в конверте был постер конференции. Пока что это эксклюзив, его видели меньше 3000 человек в мире :) Точнее те из них, кто также запросил подтверждение о регистрации на конференции :)
Резиновый Duke
На Sun Tech Days 2006 в Москве и Sun Tech Days 2007 в Питере ведущий (не помню, как его зовут... Джефри?), который объявлял спикеров, да и все спикеры, включая Джеймса Гослинга, во время выступлений кидали в зал резиновых Duke'ов, футболки с логотипами Duke/Sun/Java и прочие сувениры.Этот Duke с STD2007, его поймала моя Настя :) Стоит сейчас у нас дома на компьютерном столе.
Ярлыки: Fun, Java, Sun Microsystems
Автор Unknown на 8:10 PM 2 комментария(ев)
Monday, November 05, 2007
Семинар Keyintegrity "Основы Java"
В середине октября 2007 я с моими коллегами Павлом Чурсиным и Алексеем Солодовниковым провели многодневный обучающий семинар по теме "Основы Java" в ТатАСУНефть.
Семинары состояли из двух дней лекций, и одного дня лабораторных работ.
Некоторые вопросы, рассмотренные в рамках лекций:
- Введение в Java
- Историческая справка
- Платформы Java ME/SE/EE
- Версии платформы Java
- JRE/JDK и JVM
- HelloWorld
- Точка входа в приложение, аргументы командной строки, код возврата
- Из чего состоят, как компилируются и запускаются приложения Java
- Поддержка ООП в Java
- Классы в Java
- Атрибуты класса
- Имя
- Модификаторы класса
- Поля
- Методы
- Конструктор
- Инициализатор
- Вложенные, Анонимные и Абстрактные классы
- Наследование и полиморфизм
- Интерфейсы
- Статический контекст
- Пакеты
- JavaBean и POJO
- Синтаксические конструкции языка
- Основные конструкции
- Потоки выполнения
- Исключительные ситуации
- Иерархия исключительных ситуаций
- Аннотации
- Generics
- Collections API (java.util.*)
- Collections, List, Set, Queue
- Vector, Stack
- Map
- Многопоточность
- Thread/Runnable
- Concurrency API (java.util.concurrency.*)
- I/O Streaming API (java.io.*)
- Serializable
- Input/OutputStream и иерархия
- И др.
- потоковый ввод/вывод и Collections API
- многопоточное приложение и ООП
Лабораторная работа №1
Цель работы:
Ознакомиться со средой разработки Eclipse JDT. Закрепить навыки создания и отладки простых консольных приложений на Java. В этой работе используются:
- стандартные пакеты для работы с потоковым вводом/выводом,
- сериализация объектов,
- разбор параметров командной строки,
- Java Collections API,
- определение простых классов (JavaBeans),
- сортировка списка объектов из этих классов по заданным критериям.
Лабораторная работа №2
Цель работы:
В этой предполагается создание утилиты для работы с файловой системой. Основными особенностями являются:
- Использование возможностей ООП в Java: работа с интерфейсами и абстрактными классами, перегрузка методов;
- Использование рекурсии для работы с файловой системой;
- Создание многопоточного приложения с разделением общих объектов и синхронизацией потоков.
Исследовать возможности многопоточного программирования и применения интерфейсов, абстрактных классов и наследования в Java.
Решения для лабораторных работ можно скачать здесь (15 КБ).
Отдельно хочется отметить BlueJ - отличная вещь для преподавания ООП и Java.
Ярлыки: Eclipse IDE, Java, Keyintegrity
Автор Unknown на 3:53 PM 0 комментария(ев)
Семинар Keyintegrity "Сближая бизнес и IT: методология и инструментарий BPM для эффективного управления бизнес-процессами предприятия"
Второго октября 2007 компания Keyintegrity провела бесплатный семинар в г. Набережные челны по теме "Сближая бизнес и IT: методология и инструментарий BPM для эффективного управления бизнес-процессами предприятия".
Я читал доклад о взаимосвязи SOA, BPMN и BPEL (презентация прилагается, 173 КБ).
Хотя про перечисленные выше технологии сегодня говорят очень много, у руководителей IT-подразделений все еще не до конца сложилось представление о них. В ходе семинара мы на конкретных примерах продемонстрировали место этих и сопутствующих технологий в организации.
На демонстрации разбирался пример, опубликованный в одном из предыдущих постов, реализованный на Intalio|BPMS.
Особенно хочется отметить роль Open Source'овых продуктов. Известно, что внедрение SOA рекомендуется начинать постепенно, с "маленьких" бизнес-процессов, потихоньку на практике знакомясь с особенностями применения данной методологии. Закупать для этих целей полнофункциональные продукты уровня Enterprise, такие как, например, семейство продуктов WebSphere (ESB, Process Server, и т.д.) - слишком дорогое удовольствие, а применение бесплатных Open Source аналогов может быть вполне оправданным.
Функциональных возможностей Open Source аналогов может быть вполне достаточно и для их дальнейшего использования в production, а если возникнет необходимость в переносе уже реализованного функционала на коммерческие продукты, то этот процесс не займет больших усилий:
- С одной стороны благодаря поддержке открытых стандартов - для переноса возможно нужно будет поменять только схемы деплоймента (BPEL, WS, Java EE и т.д.);
- С другой стороны это связано с одной из моделей коммерческого Open Source. Производители коммерческого ПО выносят базовую функциональность своих продуктов в Open Source, оставляя в коммерческой версии функции, необходимые для применения в production. В этом случае все проекты смогут работать в коммерческой версии "как есть".
Ярлыки: BPEL, BPMN, Intalio, Keyintegrity, SOA
Автор Unknown на 2:42 PM 0 комментария(ев)
Saturday, November 03, 2007
Java-, WS- и XML-технологии в проекте WebSeller
Проект WebSeller, который я делал в магистратуре в рамках курсовой работы/проекта в 2005 году.
Возможно, сейчас, я бы кое-что поменял, как в реализации, так и в своем понимании и изложении концепций и технологий, но для исторической чистоты прилагаю этот проект как есть (ссылка внизу).
АннотацияЦель данного учебного проекта – получить навыки разработки распределенных программных систем на платформе J2EE. В качестве основной архитектуры рассматривается сервис-ориентированная архитектура (Service-Oriented Archi-tecture, SOA) на основе web-служб. Рассмотрены основные технологии разра-ботки web-служб, в частности – JAX-RPC и язык описания бизнес процессов на основе web-служб – BPEL, а также разработаны две web-службы с использова-нием рассмотренных технологий.
В проекте используются, в основном, продукты Apache Software Foundation и другие open source проекты. Дается краткое описание использованных техноло-гий и приемы работы с ними.
Так же уделяется внимание унифицированному процессу RUP, как подходу к проектированию подобных учебных проектов.
В приложениях на компакт диске представлены исходные коды в виде проекта для IDE Eclipse 3.1; набор разработанных артефактов RUP для проекта, а также дистрибутивы использованных программных технологий.
Табл.: 2; Ил.: 15.
Скачать проект (2 МБ):
- Пояснительная записка
- Плакаты
- Артефакты RUP
- Проект WebSeller для Eclipse 3.1.1
Ярлыки: ActiveBPEL, ASF, Axis, BPEL, JAX-RPC, Open Source, RUP, Web Services, WSDL, Xindice, XML, XML Schema, Учеба
Автор Unknown на 11:33 PM 0 комментария(ев)