====== Jednoduchý EJB3 klient v JBoss AS ======
V tomto mini-tutoriálu chci ukázat postup, jak vytvořit jednoduchý session EJB3 bean a klienta k němu jako J2SE aplikaci.
===== Session Bean =====
Pomocí vašeho vývojového prostředí založte nový projekt s podporou J2EE a vložte do něj nový session bean, rozhraní a implementace je velmi jednoduchá:
package com.zapletalovi.tests;
public interface ExampleTimer {
void scheduleTimer(long milliseconds);
}
Příklad jsem vzal z vynikajícího [[http://docs.jboss.org/ejb3/app-server/tutorial/|repozitáře příkladů]] z JBosse, který doporučuji zkouknout. Je tam spoustu zajímavých informací a hlavně funkčních příkladů.
Ještě než se pustíme do implementace, je nutné v souboru ''jmx-console-users.properties'' v dané doméně (například JBOSS_HOME\server\default\conf\props) nastavit heslo pro uživatele admin, budete jej potřebovat při vytváření runtime JBoss konfigurace v IDE.
package com.zapletalovi.tests;
import javax.annotation.Resource;
import javax.ejb.*;
import java.util.Date;
@Stateless
@Remote(ExampleTimer.class)
@Local(ExampleTimer.class)
public class ExampleTimerBean implements ExampleTimer {
private
@Resource
SessionContext ctx;
public void scheduleTimer(long milliseconds) {
ctx.getTimerService().createTimer(new Date(new Date().getTime() + milliseconds), "Hello World");
}
@Timeout
public void timeoutHandler(Timer timer) {
System.out.println("---------------------");
System.out.println("* Received Timer event: " + timer.getInfo());
System.out.println("---------------------");
timer.cancel();
}
}
Pro úspěšné zkompilování je nutné J2EE API a přidání podpory pro AS. Projekt sestavte a dejte si pozor, aby adresáře, které z IDE "vypadnou" měly "příponu" .ear respektive .jar (pro J2EE aplikaci a pro EJB). JBoss to vyžaduje, například IntelliJ IDEA adresáře vytváří jako "MyBeanEJB", pro spuštění pod JBossem potřebujeme "MyBean.EJB". Druhou možností (například u Netbeans) je deployment archívů, což je malinko pomalejší.
Spusťte JBoss AS a proveďte deployment J2EE aplikace. Nyní naprogramujeme J2SE klienta, vytvořte nový modul nebo projekt:
package cz.zapletalovi.tests;
import com.zapletalovi.tests.ExampleTimer;
import javax.ejb.EJBAccessException;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
public class ExampleTimerClient {
public static void main(String[] args) throws Exception {
Properties env = new Properties();
env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099");
InitialContext ctx = new InitialContext(env);
ExampleTimer timer = (ExampleTimer) ctx.lookup("ExampleTimerBean/remote");
try {
System.out.println("Starting timer bean...");
timer.scheduleTimer(10000); // 10 sekund
System.out.println("Started...");
}
catch (EJBAccessException ex) {
System.out.println("Saw expected SecurityException: " + ex.getMessage());
}
}
}
Aby se projekt spustil, potřebujeme:
* javaee.jar (podpora pro J2EE)
* JBoss AS (vše ze složky JBOSS_HOME\lib)
* JBoss client libraries (vše ze složky JBOSS_HOME\client)
Spustíme klienta a je to. Jedná se o jednoduchý session bean s podporou časovače.
{{tag>java}}
~~DISCUSSION~~