вторник, 14 мая 2013 г.

Простое EJB 3 приложение из командной строки

В этом посте рассказывается, как создать простое EJB 3 приложение, которое написано, развёрнуто и запущено из командной строки. Не будет ни дескриптора развёртывания, ни клиентских стабов, ни файла jndi.properties. Целевой сервер приложений - glassfish. Англоязычный источник статьи здесь.

1. Структура директории проекта:
1
2
3
4
5
6
7
8
C:\simple-ejb3> tree /A /F
+---classes
|   \---foo
\---src
    \---foo
           Client.java
           FooBean.java
           FooRemote.java


2. В пакете foo в папке src/foo создадим 3 java-файла:
1
2
3
4
5
6
7
package foo;
import javax.ejb.*;
@Remote
public interface FooRemote {
public String echo(String s);
}


1
2
3
4
5
6
7
8
9
10
package foo;
import javax.ejb.*;
@Stateless
public class FooBean implements FooRemote {
public String echo(String s) {
  return s;
}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package foo;
import javax.ejb.*;
import javax.naming.*;
public class Client {
public static void main(String[] args) throws Exception {
  Context ic = new InitialContext();
  Object obj = ic.lookup(FooRemote.class.getName());
  System.out.println("lookup returned " + obj);
  FooRemote foo = (FooRemote) obj;
  String input = (args.length > 0) ? args[0] :
              "No application arg specified.";
  String s = foo.echo(input);
  System.out.println("foo.echo returned " + s);
}
}


3. Компилируем java-файлы. Желательно для удобства установить переменную окружения JAVAEE_HOME, но это не обязательно.

1
2
C:\simple-ejb3\classes> set JAVAEE_HOME=C:\Program Files\glassfish-3.1.2.2\glassfish
C:\simple-ejb3\classes> javac -d . -classpath %JAVAEE_HOME%\lib\javaee.jar;. ..\src\foo\*.java
Если javac не является внутренней или внешней командой, или в пути к библиотекам окажется символ пробела как в вышеприведённом случае, тогда можно использовать более явную команду с помещением пути с пробелами в кавычки:
%JAVA_HOME%\bin\javac -d . -classpath "C:\Program Files\glassfish-3.1.2.2\glassfish\lib\javaee.jar;." ..\src\foo\*.java

4. Стартуем сервер приложений:

1
C:\simple-ejb3\classes> "%JAVAEE_HOME%\bin\asadmin.bat" start-domain


5. Пакуем и автодеплоим ejb-jar. Мы можем совместить два шага в одном используя %JAVAEE_HOME%\domains\domain1\autodeploy в качестве директории назначения (destdir)
1
C:\simple-ejb3\classes> %JAVA_HOME%\bin\jar cvf "%JAVAEE_HOME%\domains\domain1\autodeploy\foo-ejb.jar" foo\FooBean.class foo\FooRemote.class

Убедиться в удачном деплоинге можно зайдя в директорию %JAVAEE_HOME%\domains\domain1\autodeploy, там должы появиться пара файлов foo-ejb.jar и foo-ejb.jar_deployed.

6. Запускаем standalone клиент и смотрим на вывод:
1
2
3
4
C:\simple-ejb3\classes> java -cp "%JAVAEE_HOME%\lib\javaee.jar;%JAVAEE_HOME%\lib\appserv-rt.jar;." foo.Client
lookup returned foo._FooRemote_Wrapper@e9738564
foo.echo returned No application arg specified.


7. Если тестовый проект на сервере нам не нужен, сделаем его андеплой:
1
del %JAVAEE_HOME%\domains\domain1\autodeploy\*.jar