| :index-group: EJB Legacy |
| :jbake-type: page |
| :jbake-status: status=published |
| = Component Interfaces |
| |
| _Help us document this example! Click the blue pencil icon in the upper |
| right to edit this page._ |
| |
| == FriendlyPerson |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| import javax.ejb.Init; |
| import javax.ejb.Local; |
| import javax.ejb.LocalHome; |
| import javax.ejb.Remote; |
| import javax.ejb.RemoteHome; |
| import javax.ejb.Remove; |
| import javax.ejb.Stateful; |
| import java.text.MessageFormat; |
| import java.util.HashMap; |
| import java.util.Locale; |
| import java.util.Properties; |
| |
| /** |
| * This is an EJB 3 style pojo stateful session bean |
| * it does not need to implement javax.ejb.SessionBean |
| * |
| */ |
| //START SNIPPET: code |
| |
| // EJB 3.0 Style business interfaces |
| // Each of these interfaces are already annotated in the classes |
| // themselves with @Remote and @Local, so annotating them here |
| // in the bean class again is not really required. |
| @Remote({FriendlyPersonRemote.class}) |
| @Local({FriendlyPersonLocal.class}) |
| |
| // EJB 2.1 Style component interfaces |
| // These interfaces, however, must be annotated here in the bean class. |
| // Use of @RemoteHome in the FriendlyPersonEjbHome class itself is not allowed. |
| // Use of @LocalHome in the FriendlyPersonEjbLocalHome class itself is also not allowed. |
| @RemoteHome(FriendlyPersonEjbHome.class) |
| @LocalHome(FriendlyPersonEjbLocalHome.class) |
| |
| @Stateful |
| public class FriendlyPerson implements FriendlyPersonLocal, FriendlyPersonRemote { |
| |
| private final HashMap<String, MessageFormat> greetings; |
| private final Properties languagePreferences; |
| |
| private String defaultLanguage; |
| |
| public FriendlyPerson() { |
| greetings = new HashMap(); |
| languagePreferences = new Properties(); |
| defaultLanguage = Locale.getDefault().getLanguage(); |
| |
| addGreeting("en", "Hello {0}!"); |
| addGreeting("es", "Hola {0}!"); |
| addGreeting("fr", "Bonjour {0}!"); |
| addGreeting("pl", "Witaj {0}!"); |
| } |
| |
| /** |
| * This method corresponds to the FriendlyPersonEjbHome.create() method |
| * and the FriendlyPersonEjbLocalHome.create() |
| * <p/> |
| * If you do not have an EJBHome or EJBLocalHome interface, this method |
| * can be deleted. |
| */ |
| @Init |
| public void create() { |
| } |
| |
| /** |
| * This method corresponds to the following methods: |
| * - EJBObject.remove() |
| * - EJBHome.remove(ejbObject) |
| * - EJBLocalObject.remove() |
| * - EJBLocalHome.remove(ejbObject) |
| * <p/> |
| * If you do not have an EJBHome or EJBLocalHome interface, this method |
| * can be deleted. |
| */ |
| @Remove |
| public void remove() { |
| } |
| |
| public String greet(String friend) { |
| String language = languagePreferences.getProperty(friend, defaultLanguage); |
| return greet(language, friend); |
| } |
| |
| public String greet(String language, String friend) { |
| MessageFormat greeting = greetings.get(language); |
| if (greeting == null) { |
| Locale locale = new Locale(language); |
| return "Sorry, I don't speak " + locale.getDisplayLanguage() + "."; |
| } |
| |
| return greeting.format(new Object[]{friend}); |
| } |
| |
| public void addGreeting(String language, String message) { |
| greetings.put(language, new MessageFormat(message)); |
| } |
| |
| public void setLanguagePreferences(String friend, String language) { |
| languagePreferences.put(friend, language); |
| } |
| |
| public String getDefaultLanguage() { |
| return defaultLanguage; |
| } |
| |
| public void setDefaultLanguage(String defaultLanguage) { |
| this.defaultLanguage = defaultLanguage; |
| } |
| } |
| ---- |
| |
| == FriendlyPersonEjbHome |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| //START SNIPPET: code |
| |
| import javax.ejb.CreateException; |
| import javax.ejb.EJBHome; |
| import java.rmi.RemoteException; |
| |
| public interface FriendlyPersonEjbHome extends EJBHome { |
| FriendlyPersonEjbObject create() throws CreateException, RemoteException; |
| } |
| ---- |
| |
| == FriendlyPersonEjbLocalHome |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| //START SNIPPET: code |
| |
| import javax.ejb.CreateException; |
| import javax.ejb.EJBLocalHome; |
| import java.rmi.RemoteException; |
| |
| public interface FriendlyPersonEjbLocalHome extends EJBLocalHome { |
| FriendlyPersonEjbLocalObject create() throws CreateException, RemoteException; |
| } |
| ---- |
| |
| == FriendlyPersonEjbLocalObject |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| import javax.ejb.EJBLocalObject; |
| |
| public interface FriendlyPersonEjbLocalObject extends EJBLocalObject { |
| String greet(String friend); |
| |
| String greet(String language, String friend); |
| |
| void addGreeting(String language, String message); |
| |
| void setLanguagePreferences(String friend, String language); |
| |
| String getDefaultLanguage(); |
| |
| void setDefaultLanguage(String defaultLanguage); |
| } |
| ---- |
| |
| == FriendlyPersonEjbObject |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| //START SNIPPET: code |
| |
| import javax.ejb.EJBObject; |
| import java.rmi.RemoteException; |
| |
| public interface FriendlyPersonEjbObject extends EJBObject { |
| String greet(String friend) throws RemoteException; |
| |
| String greet(String language, String friend) throws RemoteException; |
| |
| void addGreeting(String language, String message) throws RemoteException; |
| |
| void setLanguagePreferences(String friend, String language) throws RemoteException; |
| |
| String getDefaultLanguage() throws RemoteException; |
| |
| void setDefaultLanguage(String defaultLanguage) throws RemoteException; |
| } |
| ---- |
| |
| == FriendlyPersonLocal |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| //START SNIPPET: code |
| |
| import javax.ejb.Local; |
| |
| @Local |
| public interface FriendlyPersonLocal { |
| String greet(String friend); |
| |
| String greet(String language, String friend); |
| |
| void addGreeting(String language, String message); |
| |
| void setLanguagePreferences(String friend, String language); |
| |
| String getDefaultLanguage(); |
| |
| void setDefaultLanguage(String defaultLanguage); |
| } |
| ---- |
| |
| == FriendlyPersonRemote |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| import javax.ejb.Remote; |
| |
| //START SNIPPET: code |
| @Remote |
| public interface FriendlyPersonRemote { |
| String greet(String friend); |
| |
| String greet(String language, String friend); |
| |
| void addGreeting(String language, String message); |
| |
| void setLanguagePreferences(String friend, String language); |
| |
| String getDefaultLanguage(); |
| |
| void setDefaultLanguage(String defaultLanguage); |
| } |
| ---- |
| |
| == FriendlyPersonTest |
| |
| [source,java] |
| ---- |
| package org.superbiz; |
| |
| import junit.framework.TestCase; |
| |
| import javax.ejb.embeddable.EJBContainer; |
| import javax.naming.Context; |
| import java.util.Locale; |
| |
| /** |
| * @version $Rev: 1090810 $ $Date: 2011-04-10 07:49:26 -0700 (Sun, 10 Apr 2011) $ |
| */ |
| public class FriendlyPersonTest extends TestCase { |
| |
| private Context context; |
| |
| protected void setUp() throws Exception { |
| context = EJBContainer.createEJBContainer().getContext(); |
| } |
| |
| /** |
| * Here we lookup and test the FriendlyPerson bean via its EJB 2.1 EJBHome and EJBObject interfaces |
| * |
| * @throws Exception |
| */ |
| //START SNIPPET: remotehome |
| public void testEjbHomeAndEjbObject() throws Exception { |
| Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbHome"); |
| FriendlyPersonEjbHome home = (FriendlyPersonEjbHome) object; |
| FriendlyPersonEjbObject friendlyPerson = home.create(); |
| |
| friendlyPerson.setDefaultLanguage("en"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia")); |
| |
| friendlyPerson.setLanguagePreferences("Amelia", "es"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia")); |
| |
| // Amelia took some French, let's see if she remembers |
| assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia")); |
| |
| // Dave should take some Polish and if he had, he could say Hi in Polish |
| assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave")); |
| |
| // Let's see if I speak Portuguese |
| assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David")); |
| |
| // Ok, well I've been meaning to learn, so... |
| friendlyPerson.addGreeting("pt", "Ola {0}!"); |
| |
| assertEquals("Ola David!", friendlyPerson.greet("pt", "David")); |
| } |
| //END SNIPPET: remotehome |
| |
| |
| /** |
| * Here we lookup and test the FriendlyPerson bean via its EJB 2.1 EJBLocalHome and EJBLocalObject interfaces |
| * |
| * @throws Exception |
| */ |
| public void testEjbLocalHomeAndEjbLocalObject() throws Exception { |
| Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbLocalHome"); |
| FriendlyPersonEjbLocalHome home = (FriendlyPersonEjbLocalHome) object; |
| FriendlyPersonEjbLocalObject friendlyPerson = home.create(); |
| |
| friendlyPerson.setDefaultLanguage("en"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia")); |
| |
| friendlyPerson.setLanguagePreferences("Amelia", "es"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia")); |
| |
| // Amelia took some French, let's see if she remembers |
| assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia")); |
| |
| // Dave should take some Polish and if he had, he could say Hi in Polish |
| assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave")); |
| |
| // Let's see if I speak Portuguese |
| assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David")); |
| |
| // Ok, well I've been meaning to learn, so... |
| friendlyPerson.addGreeting("pt", "Ola {0}!"); |
| |
| assertEquals("Ola David!", friendlyPerson.greet("pt", "David")); |
| } |
| |
| /** |
| * Here we lookup and test the FriendlyPerson bean via its EJB 3.0 business remote interface |
| * |
| * @throws Exception |
| */ |
| //START SNIPPET: remote |
| public void testBusinessRemote() throws Exception { |
| Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonRemote"); |
| |
| FriendlyPersonRemote friendlyPerson = (FriendlyPersonRemote) object; |
| |
| friendlyPerson.setDefaultLanguage("en"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia")); |
| |
| friendlyPerson.setLanguagePreferences("Amelia", "es"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia")); |
| |
| // Amelia took some French, let's see if she remembers |
| assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia")); |
| |
| // Dave should take some Polish and if he had, he could say Hi in Polish |
| assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave")); |
| |
| // Let's see if I speak Portuguese |
| assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David")); |
| |
| // Ok, well I've been meaning to learn, so... |
| friendlyPerson.addGreeting("pt", "Ola {0}!"); |
| |
| assertEquals("Ola David!", friendlyPerson.greet("pt", "David")); |
| } |
| //START SNIPPET: remote |
| |
| /** |
| * Here we lookup and test the FriendlyPerson bean via its EJB 3.0 business local interface |
| * |
| * @throws Exception |
| */ |
| public void testBusinessLocal() throws Exception { |
| Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonLocal"); |
| |
| FriendlyPersonLocal friendlyPerson = (FriendlyPersonLocal) object; |
| |
| friendlyPerson.setDefaultLanguage("en"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia")); |
| |
| friendlyPerson.setLanguagePreferences("Amelia", "es"); |
| |
| assertEquals("Hello David!", friendlyPerson.greet("David")); |
| assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia")); |
| |
| // Amelia took some French, let's see if she remembers |
| assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia")); |
| |
| // Dave should take some Polish and if he had, he could say Hi in Polish |
| assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave")); |
| |
| // Let's see if I speak Portuguese |
| assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David")); |
| |
| // Ok, well I've been meaning to learn, so... |
| friendlyPerson.addGreeting("pt", "Ola {0}!"); |
| |
| assertEquals("Ola David!", friendlyPerson.greet("pt", "David")); |
| } |
| |
| } |
| ---- |
| |
| == Running |
| |
| [source,console] |
| ---- |
| ------------------------------------------------------- |
| T E S T S |
| ------------------------------------------------------- |
| Running org.superbiz.FriendlyPersonTest |
| Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 |
| http://tomee.apache.org/ |
| INFO - openejb.home = /Users/dblevins/examples/component-interfaces |
| INFO - openejb.base = /Users/dblevins/examples/component-interfaces |
| INFO - Using 'javax.ejb.embeddable.EJBContainer=true' |
| INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) |
| INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) |
| INFO - Found EjbModule in classpath: /Users/dblevins/examples/component-interfaces/target/classes |
| INFO - Beginning load: /Users/dblevins/examples/component-interfaces/target/classes |
| INFO - Configuring enterprise application: /Users/dblevins/examples/component-interfaces |
| INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) |
| INFO - Auto-creating a container for bean FriendlyPerson: Container(type=STATEFUL, id=Default Stateful Container) |
| INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) |
| INFO - Auto-creating a container for bean org.superbiz.FriendlyPersonTest: Container(type=MANAGED, id=Default Managed Container) |
| INFO - Enterprise application "/Users/dblevins/examples/component-interfaces" loaded. |
| INFO - Assembling app: /Users/dblevins/examples/component-interfaces |
| INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonLocal") |
| INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonRemote") |
| INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbLocalHome") |
| INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbHome") |
| INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson") |
| INFO - Jndi(name="java:global/EjbModule803660549/org.superbiz.FriendlyPersonTest!org.superbiz.FriendlyPersonTest") |
| INFO - Jndi(name="java:global/EjbModule803660549/org.superbiz.FriendlyPersonTest") |
| INFO - Created Ejb(deployment-id=FriendlyPerson, ejb-name=FriendlyPerson, container=Default Stateful Container) |
| INFO - Created Ejb(deployment-id=org.superbiz.FriendlyPersonTest, ejb-name=org.superbiz.FriendlyPersonTest, container=Default Managed Container) |
| INFO - Started Ejb(deployment-id=FriendlyPerson, ejb-name=FriendlyPerson, container=Default Stateful Container) |
| INFO - Started Ejb(deployment-id=org.superbiz.FriendlyPersonTest, ejb-name=org.superbiz.FriendlyPersonTest, container=Default Managed Container) |
| INFO - Deployed Application(path=/Users/dblevins/examples/component-interfaces) |
| INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization |
| INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization |
| INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization |
| Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.444 sec |
| |
| Results : |
| |
| Tests run: 4, Failures: 0, Errors: 0, Skipped: 0 |
| ---- |