Archive for November, 2006

mail.jug.org.ua / start.jug.org.ua

Wednesday, November 29th, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

Добрый вечер!

Для доступа к Hosted Gmail (почтовые ящики *@jug.org.ua) теперь можно использовать короткий адрес: http://mail.jug.org.ua

Также появилась долгожданная Dashboard-страница. Встречайте: http://start.jug.org.ua

К странице можно добавить погоду в Киеве и RSS-ленты блога и форума.

Вот как это счастье в итоге выглядит:

jug.org.ua start page

Enjoy!

Clustering - EJBs vs JMS vs POJOs

Saturday, November 25th, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

The entire application was written in Java (JSE and JEE) in a typical 3-tier architecture topology. The application was deployed on 2 application server nodes. All transient and persistent data was pushed into the Database to address high availability. As it turned out, as the user-base grew, the database was the major bottleneck towards RAS and performance. We had a couple of options: pay a major database vendor an astronomical sum to buy their clustering solution, or redesign the architecture to be a high-performing RAS system. Choosing the first option was tempting, but it just meant we were pushing the real shortcomings of our architecture “under the carpet”, over and above having to spend an astrnomical sum. We chose the latter.

Via pojomojo
Перевод.

Приложение было написано с использованием Java SE и Jave EE, типичная трёхзвенная архитектура, и его выполнение было распределено между двумя серверами приложений. В целях обеспечения лучшей доступности как временная, так и нуждающаяся в сохранении информация хранилась в базе данных. Но, как только число пользователей увеличилось, база данных стала узким местом производительности и RAS (Reliability, Availability, Serviceability). У нас было два варианта:

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

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

H2 Database Engine

Friday, November 24th, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

20 ноября’06 выпущен релиз 1.0 версии СУБД H2 - HSQLDB второго поколения.

Сайт проекта: http://www.h2database.com/ :

Добро пожаловать на сайт H2, the free SQL database. Главными возможностями H2 являются:

  • Высокая производительность
    за счёт того что природа СУБД-движка - in-memory
  • доступность исходного кода; может быть скомпилированая с помощью GCJ - Gnu Compiler for Java (Linux)
    Возможность компилирования с помощью GNU-компилятора в свете релиза исходников основных компонентов Java под лицензией GPL уже не актуален, но тем не менее такая возможность присутствует.
  • режими Embedded, Server и Cluster
  • JDBC и (частично) ODBC API
  • Web Client application

Тестирование производительности показывает значительный отрыв вперёд по сравнению с Apache Derby, MySQL и HSQLDB первого поколения:

H2 Database Engine Performance

Sun Tech Days Developer Conference Atlanta

Wednesday, November 22nd, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

Команда Technology Outreach Team (The Sun Microsystems) заявляет: Sun спонсирует проведение “FREE Developer Conference” в Atlanta GA, в январе’07, 16-18 числа.

Для участников JUG создан специальный регистрационный код. Предусмотрена встреча организаторами тех джуговцев, которые будут приезжать “толпами” :-) (jug meet-up)

Referral Code знают организаторы JUG’ов, и если вы вдруг соберётесь и поедете - помнимте: код всегда можно узнать, написав на info(at)jug.org.ua

Если среди участников JUG’а присутствуют те, кто всегда хотел попасть на JavaOne, но не мог себе этого позволить из-за высокой стоимости посещения или сильной занятости на работе, то программа Sun Tech Days является прекрасной возможность получить те же знания, что и на JavaOne (… плюс навыки практического применения, что называется “пощупать”, дальше про Hands-On Labs Sessions).

Программа

Список запланированных докладов (предварительный), презентации в формате PDF :

Для себя выделил доклады по Java SE и Java Scripting в 6.0 :-)

В рамках конференции пройдут так называемые Sun Tech Days Hand-On Labs sessions(предлагают закатать рукава и захватить с собой ноутбук) :

Meta

The Finch Wire News: Open Source Java

Tuesday, November 21st, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

Оригинал - из Juggy The Java Finch’s Blog

Open Source Java - GPL

Tuesday, November 21st, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

http://java.sys-con.com/read/302954.htm

Pepperdine, a former Enterprise Editor of Java Developer’s Journal, identifies two controls that, he says “offer us protection from incompatible forks that come with the Java label.

  • The first is that the Java specification is still controlled by the JCP and so “you can’t call something Java unless it passes the compatibility test suite (CTS).” The second key element is the choice of license, the GPL.
    Pepperdine seeks to clear up a widespread misapprehension about the GPL:
  • “What people fear is that GPL license requires that anything that touches a piece of GPL’ed code must be published. The implication is that all Java applications that make use of Sun’s JDK/JRE would be copy-left’ed into the world of open source. This is where the Classpath exception comes into play.

Classspath is the GNU implementation of the Java platform specification. In the license agreement that comes it is a specific exception to the GPL license. That exception limits the reach of the GPL license by stating that only code modifications to Classpath must be republished and code extending or using Classpath does not. Let’s consider this in light of an example using java.util.ArrayList.

If all you were to do was subclass ArrayList than the Classpath exception would apply and you would not have to publish your code. However, if you were to alter the code in ArrayList, than you would be required to publish your modifications. As you can see the Classpath exception leaves business free to build upon yet protects the underlying implementation.”

All on Java Programming

Monday, November 20th, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

В рамках проекта Google Co-Op участниками сообщества создана редактируемая директория сайтов, содержащих документацию по java- и web- программированию. Предложенные участниками сайты выделены; в результатах поиска присутствуют информация и с тех сайтов, которые не были добавлены.

Присоединяйтесь: All on Java Programming !

P.S. Для поиска можете воспользоваться:

  • формой, расположенной справа-вверху этого блога
  • титульной страницей сайта jug.org.ua
  • адресом в проекте Co-Op

JBoss Web Server

Friday, November 17th, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

http://www.jboss.com/products/jbossweb

Enterprise Web Server powered by Apache Tomcat.

JBoss Web Server - новый opensource проект разработки единой высокопроизводительной платформы для развёртывания приложений, основанных на таких технологиях:

  • Java Server Pages (JSP) и Java Servlet
  • Microsoft ASP.NET
  • PHP и CGI.

JBoss Web построен на базе Apache Tomcat и включает такие технологии как Apache Portable Runtime (APR) и Tomcat native technologies, что позволяет достичь характеристик масштабируемости и производительности, сравнимых и превосходящих возможности Apache HTTP Server.

JBoss Web Server характеризуется такими функциональными возможностями:

  • Возможность одновременного обслуживания более чем 10,000 подключений
  • Поддержка протоколов HTTP, HTTPS и AJP (Apache JServ Protocol)
  • OpenSSL для поддержки Secure Sockets Layer (SSL)
  • URL rewriting “на лету” благодаря гибкому механизму обработки URL-запросов, поддерживающему неограниченное количество правил и условий
  • Поддержка “in-” и “out-of-process” техник выполнения CGI и PHP скриптов, а также приложений ASP.NET
  • Улучшенный балансировщик нагрузки, предоставляющий высокий уровень доступности приложений и возможность сегментации удалённых подсистем, выполняющихся в режиме “out-of-process”

Подробности: http://www.jboss.com/products/jbossweb

Эклипсу исполнилось пять лет

Thursday, November 2nd, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

Оригинал

Проекту Eclipse 5 лет!

7 ноября 2001 года IBM выложила Eclipse в опенсорс.

Simple Java Network Transparency

Thursday, November 2nd, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

Оригинал

A short example of how to provide, and use ordinary Java objects across the network, without modification. No XML, no annotations: simply powerful network distributed applications that everyone can immediately understand, and use

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

Этот пример показывает как использовать класс TransparentItemProxy из проекта cajo. Хм, хотя название у проекта cajo довольно странное название, сделать эту мутку с помощью класса TransparentItemProxy довольно легко, никаких тебе WSDL… :)

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

Duck.java

public interface Duck {
   boolean looks();
   boolean walks();
   boolean talks();
   Duck getDuck();
}

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

DuckServer.java

import java.io.Serializable;
import gnu.cajo.invoke.Remote;
import gnu.cajo.utils.ItemServer;
import gnu.cajo.utils.CodebaseServer;

public class DuckServer implements Duck, Serializable {
  public boolean looks() {
     System.out.println(”hi there!”);
     return true;
  }

  public boolean walks() {
     System.out.println(”waddle waddle”);
     return true;
  }

  public boolean talks() {
     System.out.println(”quack quack!”);
     return true;
  }

  public Duck getDuck() {
     return new DuckServer();
  }

public static void main(String args[]) { // simple unit test
  try {
          Remote.config(null, 1198, null, 0); // use cajo port 1198
          new CodebaseServer(null, 0);
          ItemServer.bind(new DuckServer(), “Donald”);
          System.out.println(”duck server running”);
     } catch(Exception x) {
          x.printStackTrace();

   }
  }
}

Компилируем удаленный интерфейс Duck и сервер его реализующий, для этого нужна либа https://cajo.dev.java.net/cajo.jar

Компилируем

javac -classpath . Duck.java
javac -classpath cajo.jar;. DuckServer.java

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

java -classpath cajo.jar;. DuckServer

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

DuckClient.java

import gnu.cajo.invoke.NoSecurityManager;
import gnu.cajo.utils.extra.TransparentItemProxy;

public class DuckClient { // try out DuckServer
  public static void main(String args[]) {
    try {
         System.setSecurityManager(new NoSecurityManager());
          Duck duck = (Duck)TransparentItemProxy.getItem(
              “//serverHost:1198/Donald”,
              new Class[] { Duck.class }
          );

       duck = duck.getDuck(); // by value
       System.out.println(”looks like = ” + duck.looks());
       System.out.println(”walks like = ” + duck.walks());
       System.out.println(”talks like = ” + duck.talks());

    } catch(Exception x) {
        x.printStackTrace();
    }
  }
}

Примечание: замените localhost на имя хоста с запущенным сервером.

Компилируем и запускаем клиент

javac -classpath cajo.jar;. DuckClient.java
java -classpath cajo.jar;. DuckClient

У клиента в консоли будет

looks like = true
walks like = true
talks like = true

а в консоли сервера

hi there!
waddle waddle
quack quack!

Получается, что клиент использует серверный объект так, как будто бы тот был создан пару строчками выше.

В этом примере использовался вызов удаленного объекта по ссылке, вы можете посмотреть пример использования удаленного объекта по значению.