26 April 2009

Создание простейшего EJB 3 и клиентского приложения

Эта статься посвящена созданию простейшего EJB-модуля, его инсталляции в сервер приложений JBoss и удалённому вызову метода из клиентской программы.

Для понимания необходимо: базовое знание языка Java (наследование, интерфейсы)

Простейший EJB, пригодный для удалённого вызова, состоит из двух .java файлов:

1. Интерфейс, в котором описаны методы, предоставляемые бином, файл TestRemote.java:

import javax.ejb.Remote;

// Аннотация "@Remote" означает, что это интерфейс, описывающий
// методы доступные для вызова удалёнными клиентами
@Remote
public interface TestRemote
{
// Назовём наш метод просто getTime()
// Он вернёт строку с серверным временем
String getTime();
}


2. Собственно реализация, файл TestBean.java:

import javax.ejb.Stateless;

// Аннотация "@Stateless" указывает, что это будет
// бин без сохранения состояния между вызовами методов
@Stateless
public class TestBean implements TestRemote
{
// реализация метода, указанного в интерфейсе
public String getTime()
{
java.util.Date d = new java.util.Date();
return "Server time: " + d;
}
}


Компилируется командой:
javac -classpath .:<путь к папке JBoss>/common/lib/jboss-javaee.jar TestBean.java
Обратите внимание на двоеточие в опции -classpath, в среде Windows следует использовать ";".

После успешной компиляции мы получим два .class-файла. Теперь нужно собрать их в один .jar, это делается командой
jar -cf test.jar *.class
Тут мы получаем файл test.jar. Копируем его в каталог server/default/deploy в папке JBoss.
Если JBoss запущен, то обнаружив новый или обновлённый .jar в папке deploy - он подхватит и задеплоит его, о чём сообщит:


Теперь наш бин загружен в сервер приложений и доступен для вызова извне. Напишем простую программу для вызова метода - client.java:

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;

public class client
{
public static void main( String[] arg ) throws Exception
{
// Указываем параметры для связи с сервером приложений:
// классы для создания контекста и адрес сервера
Properties p = new Properties();
p.put( Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory" );
p.put( Context.PROVIDER_URL, "localhost" );

// Создаём начальный контекст, в котором будет
// производиться поиск объетов
Context ctx = new InitialContext(p);

// Ищем бин по имени, которое сообщил нам JBoss
Object ref = ctx.lookup( "TestBean/remote" );

// Приводим ссылку на объект к интерфейсу бина
TestRemote bean = (TestRemote)ref;

// И вызывем метод
String serverTime = bean.getTime();
System.out.println( serverTime );
}
}

Компилируется командой:
javac client.java

И запускаем:
java -classpath .:<путь к папке JBoss>/client/jbossall-client.jar client

Если программа не выбросила никаких иксепшенов, а вывела на консоль строку вида "Server time: Sun Apr 26 16:38:04 EEST 2009" - значит всё работает!

При реальном использовании у клиента должен быть доступ только к .class-файлу TestRemote. TestBean должен находиться только на сервере приложений.

В дальнейшем я планирую осветить некоторые неочевидные вопросы контроля доступа, авторизации с использованием БД и пр.

12 April 2009

end of the road

Решил уйти с OS/2. Скорее всего на линукс.

25 January 2009

SIM/2 и проблемы с аськой

Подробное описание проблемы здесь.

На данный момент работает например такое решение.

24 August 2008

Updated Yahoo plugin for SIM/2

I updated it months ago, but not posted to public, sorry.

Download - yahoo_20080419.zip

It includes a fix for April's protocol change in Yahoo! Messenger.

17 December 2007

OS/2: Extended Attributes

Написал в ЖЖ статейку о пользе расширенных атрибутов в OS/2.

05 December 2007

SIM-IM for OS/2 Update

I made some updates to OS/2 version of SIM Instant Messenger.

Download: sim-im-os2-0.9.4.3-r2.zip (7.2 MB)

Changes since previous release:
  • Updated Qt library which includes DBCS support and styles support.
  • Ported and included AutoAway plugin.

Notes:
  • Styles plugin provides style switching now. But Warp 4 style doesn't work, SIM will crash on it.
  • SYSGLIT.DLL provides WinGetLastInputTime() function for AutoAway plugin. You may copy this dll into \OS2\DLL directory.
  • This release requires GCC 0.6.3 runtime library: libc-0_6_3-csd3.exe or libc-0_6_3-csd3.wpi.

See SIM under OS/2 screenshots in previous announce.

12 September 2007

My new site

My site moved to http://www.eros2.info.
http://eros2.by.ru is not maintained anymore.