====== 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~~