V tomto mini-tutoriálu chci ukázat postup, jak vytvořit jednoduchý session EJB3 bean a klienta k němu jako J2SE aplikaci.
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 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:
Spustíme klienta a je to. Jedná se o jednoduchý session bean s podporou časovače.
Diskuze
Zajimava ukazka ne ze bych to shanel ale dalo mi to inspiraci… dik