среда, 30 мая 2012 г.

[JBoss]: Вызов бина, задеплоеного на удаленном сервере (3 способа)

EJB invocations from a remote client using JNDI
... return (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
... return (RemoteCounter) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful");

четверг, 24 мая 2012 г.

Использование Java на http://odnoklassniki.ru


Архитектура и платформа проекта Одноклассники:

Google Web Toolkit
Код написан на Java. Есть исключения – некоторые модули для кеширования данных написаны на C и C++. Java потому, что это удобный для разработки язык, много наработок в различных сферах, библиотек, open source проектов на Java.
хранения данных в памяти средствами Java Unsafe (я. - т.е. выделение памяти за пределами heap? почему не ByteBuffer.allocateDirect(int capacity))
Используются два решения для хранения и сервирования данных – MS SQL и BerkeleyDB.
Само сохранение происходит с помощью библиотеки log4j.
Для мониторинга “здоровья” оборудования используем Zabbix
WEB сервера – Apache Tomcat
Сервера бизнес логики работают под JBoss 4
Apache Lucene для индексирования и поиска текстовой информации
При общении серверов между собой используем свое решение, основанное на JBoss Remoting
Общение с SQL базами данных происходит посредством JDBC драйверов

среда, 23 мая 2012 г.

Интересно Ваше мнение

Что нужно от платформы для облачного PaaS?
    Рассмотрим следующую задачу: необходимо выбрать некоторый "Java Enterprise Application Server" (классическое Нечто, предоставляющее поддержку transaction, security, threading - EJB контейнер, Spring, возможно что-то еще) для написания некого PaaS. Пусть это будет некая гипотетическая 1C-в-облаке (или платформа для хостинга интернет-магазинов). Т.е. нечто имеющее свой front-end, кастомизированную бизнесс-логику и базу. Мы ожидает что у нас будет 10.000 корпоративных клиентов. Клиент - это группа пользователей, которые имеют возможность "шарить" между собой данные, под каждого клиента кастомизируется бизнесс-логика. Имеется следующая специфика - у нас 10-100 "бриллиантовых" клиентов - тех которые приносят нам основные доходы, под каждого из них выделяется 10-100 серверов (допустим они генерируют такую нагрузку) + остальные клиенты ничего нам не приносят, пришли в ходе рекламной кампании, завели полноценный экземпляр приложения и нагрузка от них такова, что можем позволить располагать их по 100 на одном сервере. Спектр между генерируемой нагрузкой непрерывно заполнен клиентами, т.е. есть такие клиенты, что их располагаем по 3 на сервере, а есть такие что требуют 1-3 сервера.
    Вопрос такой: что нам минимально необходимо требовать еще от платформы?
    Я пока вижу два основных требования:
    - поддержка multitenancy, т.е. возможность в рамках одного инстанса сервера/контейнера обрабатывать нескольких клиентов. При чем сервер/контейнер должен гарантировать как минимум две вещи: 1. невозможность одному клиенту вмешаться в работу другого (как минимум независимые classloader-ы, как у WAR в рамках сервлет-контейнера), 2. возможность выделять ресурсы контейнера каждому клиенту отдельно (конекшены к базе, пулы потоков, память под кэши). Ну или сверх-легковесный контейнер, такой что возможно запустить 100 инстансов контейнера на одной машине. Это для тех клиентов, которых сотня на машине.
    - прозрачная репликация бизнесс-модулей. Имею в виду следующее: любая функциональность, реализованная в виде "модуля" контейнера, получает логическое имя и в случае "выгорания" машины на которой выполнялся вызов функциональности, под это логическое имя автоматически поставляется другой экземпляр модуля на другой машине. Ну и, естественно, автоматическая балансировка нагрузки на модуль путем репликации. Это для высоконагруженных клиентов.

    Вопрос к знатокам - это все? Есть что почитать? Как с этим согласуется EJB/SOA/MOM/... ?

    P.S. Контекст таков - имеем EJB/Spring/WS-*/JMS спецов, хотим/будем писать/переводить продукт на PaaS.

вторник, 22 мая 2012 г.

[Блог]: Сценарии интеграции приложений

Сценарии интеграции приложений
...
Максим,
Шаблонов интеграции несколько больше четырех. То что вы упомянули: файл, бд, сообщения и удаленный вызов это домен шаблонов интеграции по типу обмена данными. Есть еще домены по методу интеграции (data-centric, function-centric, object-centric etc) и домен структурных шаблонов (точка-точка, звезда, смешанный).
Безусловно упомянутая вами группа шаблонов наиболее понятна, но и про другие забывать не стоит :)
У MS есть в открытом доступе неплохая книжка, правда с явным “закосом” под их же продукты и технологические стэк.
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=12474
Не то, чтобы я сильно любил MS, но у других вендоров с такой просветительской деятельностью вообще никак. Разве что у IBM: Patterns: Implementing an SOA Using an
Enterprise Service Bus
http://www.redbooks.ibm.com/redbooks/pdfs/sg246346.pdf

[Java EE]: хороший блог российского Архитектора

Архитектура Информационных систем
Максим Смирнов

Как я понял, Максим Смирнов - руководитель департамента ИТ-Архитектуры ЩФЩ "Вымпелком"

Articles on EIP

[wiki]: π-calculus

WIKI: π-calculus
    In theoretical computer science, the π-calculus (or pi-calculus) is a process calculus originally developed by Robin Milner, Joachim Parrow and David Walker as a continuation of work on the process calculus CCS (Calculus of Communicating Systems). The π-calculus allows channel names to be communicated along the channels themselves, and in this way it is able to describe concurrent computations whose network configuration may change during the computation.
    The π-calculus is elegantly simple yet very expressive. Functional programs can be encoded into the π-calculus, and the encoding emphasises the dialogue nature of computation, drawing connections with game semantics. Extensions of the π-calculus, such as the spi calculus and applied π, have been successful in reasoning about cryptographic protocols. Beside the original use in describing concurrent systems, the π-calculus has also been used to reason about business processes and molecular biology.

Articles About Java Technology

The Java Language Specification, Java SE 7 Edition

Patterns in Enterprise Software (Martin Fawler point of view)

Patterns in Enterprise Software
A personal survey of various efforts to catalog patterns for enterprise software development.

1. Patterns of Enterprise Application Architecture
2. Core J2EE Patterns
3. Enterprise Integration Patterns
4. Microsoft Enterprise Solution Patterns
5. Microsoft Data Patterns
6. Microsoft Integration Patterns
7. Domain Driven Design
8. Anasis Patterns
9. Data Model Patterns
10. Gang of Four
11. POSA

P.S. 11 книг только по паттернам, только в области корпоративной разработки и только по мнению Фаулера ... 

четверг, 3 мая 2012 г.

[Book]: Интересные книги

[Java EE]: Good Java EE Examples

Good JavaEE Examples

CDI:
    cdi-basic
    cdi-request-scope
    cdi-application-scope    
    cdi-interceptors
    cdi-produces-disposes
    decorators
    cdi-alternative-and-stereotypes
Web Services
    simple-webservice *
    webservice-handlerchain *
    webservice-holder *
    webservice-attachments
    webservice-inheritance
    webservice-security
    webservice-ws-security
...

[Java EE]: Adam Bien's Weblog

Adam Bien's Weblog
Блог Адама прекрасный способ ознакомится со всеми "tips&trics" современного Java EE(EJB, JMS, JNDI, JPA, JTA, JDBC, JSF, ServletAPI, ...).

P.S. Я на него вышел как на автора
1) Real World Java EE Patterns Rethinking Best Practices
2) Real World Java EE Night Hacks--Dissecting the Business Tier
Великолепные книги, маленькие (270+170страниц), но посвящающие в достаточно глубокие делали. Скажем, для меня было новостью, что CDI можно использовать для рассылки событий, java.net.URLConnection имеет проблемы с кэшированием и еще кучу мелочей.

Mnesia A Distributed Robust DBMS for Telecommunications Applications

[java.net]: Orderly Versus Abortive Connection Release in Java

Orderly Versus Abortive Connection Release in Java  

Overview
To ensure orderly or graceful release of TCP connections is a challenge with TCP networking applications. Abortive or ungraceful release may result if special care is not taken. In Java, an unexpected abortive release can manifest itself by the application receiving a java.net.SocketException when reading or writing to the socket. read() and write() normally return a numeric value indicating, respectively, the number of bytes received or sent. If an exception is received instead, this indicates the connection has been aborted and also that data may have been lost or discarded. This article explains what causes socket connections to be aborted and provides tips for avoiding the situation, except for the case where an application intends to abort the connection.