| Title: Hello World |
| This page shows the basic steps required to create, build, and run an EJB |
| and EJB client in its most minimum form. It does not hide steps or rely on |
| special build tools or IDEs and is about the most stripped down you can |
| get. |
| |
| _See the [Examples](examples.html) |
| page for a full list of examples that range from [@Stateles|Simple Stateless Example] |
| and [@Stateful|Simple Stateful Example] |
| beans, to [Dependency Injection|Injection of env-entry Example] |
| , JDBC [DataSources|Injection of DataSource Example] |
| , JPA [EntityManagers|Injection of EntityManager Example] |
| and more._ |
| |
| <a name="HelloWorld-AbasicEJBexample"></a> |
| ## A basic EJB example |
| |
| Here are some basic steps you need to perform to get started with OpenEJB |
| |
| 1. Download and install OpenEJB |
| 1. Setup your development environment |
| 1. Write an EJB |
| 1. Write an EJB client |
| 1. Start the server |
| 1. Deploy the EJB |
| 1. Run the client |
| 1. Stop the server |
| |
| <a name="HelloWorld-DownloadandinstallOpenEJB"></a> |
| ## Download and install OpenEJB |
| |
| This example pertains to OpenEJB 3.0 which can be [downloaded here](http://archive.apache.org/dist/openejb/3.0) |
| . Once you have downloaded OpenEJB, you can then simply extract the |
| contents of the downloaded file to whichever directory you want to install |
| OpenEJB in. |
| |
| After extracting the file contents, you should now see a directory named |
| openejb-3.0. If you look under this directory, you will find a few more |
| directories: |
| - *bin*: Contains commands to start/stop the server (You can also do a lot |
| of other stuff like deploy/undeploy, but we will just talk about things |
| needed to get you started) |
| - *lib*: Contains several jar files (you only need of few of these jars in |
| your classpath to do EJB development) |
| - *apps*: Once you create your EJB's and jar them up, you can place your |
| jar file in this directory and start the server. The server will |
| automatically deploy all the EJB's contained in this JAR. |
| - *conf*: This directory contains all the configuration files. Although you |
| may not see any file except for a README.txt file right now, but after you |
| start the server, the required configuration files will be automatically |
| created. It is highly recommeded to read the README.txt file under this |
| directory |
| - *logs*: Contains log files. |
| |
| <a name="HelloWorld-Setupyourdevelopmentenvironment"></a> |
| ## Setup your development environment |
| |
| <a name="HelloWorld-Createaworkingdirectory"></a> |
| ### Create a working directory |
| Assuming you are in your home directory, create a directory named projects |
| |
| karan@poweredge:~$ mkdir projects |
| |
| Go to the projects directory |
| |
| karan@poweredge:~$ cd projects |
| |
| We will do all our work in this directory. |
| <a name="HelloWorld-InstallJava"></a> |
| ### Install Java |
| Download and install Java (version 5 or higher). Also set it up so that you |
| can run the java and javac commands from any directory |
| <a name="HelloWorld-SetOPENEJB_HOME"></a> |
| ### Set OPENEJB_HOME |
| We will setup this variable to refer to the openejb install location. |
| |
| karan@poweredge:~/projects$ export |
| OPENEJB_HOME=/home/karan/install/openejb-3.0 |
| |
| <a name="HelloWorld-WriteanEJB"></a> |
| ## Write an EJB |
| Whatever files you create should be placed under the projects directory |
| <a name="HelloWorld-CreatetheRemoteInterface"></a> |
| ### Create the Remote Interface |
| Using your favorite editor, create a file named Hello.java (shown below) |
| |
| package org.acme; |
| import javax.ejb.Remote; |
| @Remote |
| public interface Hello{ |
| public String sayHello(); |
| } |
| |
| |
| <a name="HelloWorld-CreatetheBeanClass"></a> |
| ### Create the Bean Class |
| Now create a file named HelloBean.java (shown below) |
| |
| package org.acme; |
| import javax.ejb.Stateless; |
| @Stateless |
| public class HelloBean implements Hello{ |
| public String sayHello(){ |
| return "Hello World!!!!"; |
| } |
| } |
| |
| |
| <a name="HelloWorld-Compilethesourcecode"></a> |
| ### Compile the source code |
| Since we have imported the javax.ejb.Stateless and javax.ejb.Remote |
| annotations, we need these in our classpath to compile our source code. |
| These annotations can be found in the $OPENEJB_HOME/lib/javaee-5.0-1.jar. |
| Lets compile our source (make sure you are in the projects directory) |
| |
| karan@poweredge:~/projects$ javac -cp $OPENEJB_HOME/lib/javaee-5.0-1.jar -d |
| . *.java |
| |
| The above will compile all the .java files and also create the required |
| packages. You should now see a package named org under the projects |
| directory. All class files should be under org/acme directory. |
| <a name="HelloWorld-PackagetheEJB"></a> |
| ### Package the EJB |
| To package the EJB into a JAR, run the following command while you are in |
| the projects directory |
| |
| karan@poweredge:~/projects$ jar cvf hello.jar org |
| |
| The above command will package everything under the org directory |
| (including the org directory itself) into a jar file named hello.jar. Below |
| is the output from running the above command: |
| |
| karan@poweredge:~/projects$ jar cvf hello.jar org |
| added manifest |
| adding: org/(in = 0) (out= 0)(stored 0%) |
| adding: org/acme/(in = 0) (out= 0)(stored 0%) |
| adding: org/acme/Hello.class(in = 203) (out= 168)(deflated 17%) |
| adding: org/acme/HelloBean.class(in = 383) (out= 275)(deflated 28%) |
| |
| <a name="HelloWorld-WriteanEJBClient"></a> |
| ## Write an EJB Client |
| Now we will write a Client class which will lookup the EJB , invoke the |
| sayHello() business method and print the value returned from the method. |
| While you are in the projects directory, create a new file named |
| HelloClient.java . Add the following to this file: |
| |
| package org.acme; |
| import java.util.Properties; |
| import javax.naming.InitialContext; |
| import javax.naming.Context; |
| import javax.rmi.PortableRemoteObject; |
| public class HelloClient{ |
| public static void main(String[] |
| args) throws Exception{ |
| Properties props = new Properties(); |
| |
| props.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.RemoteInitialContextFactory"); |
| props.put(Context.PROVIDER_URL,"ejbd://127.0.0.1:4201"); |
| Context ctx = new InitialContext(props); |
| Object ref = ctx.lookup("HelloBeanRemote"); |
| Hello h = |
| (Hello)PortableRemoteObject.narrow(ref,Hello.class); |
| String result = h.sayHello(); |
| System.out.println(result); |
| } |
| } |
| |
| |
| <a name="HelloWorld-CompileHelloClient.java"></a> |
| ### Compile HelloClient.java |
| Run the following command: |
| |
| karan@poweredge:~/projects$ javac -d . HelloClient.java |
| |
| <a name="HelloWorld-StarttheServer"></a> |
| ## Start the Server |
| Go to the OpenEJB install directory (i.e. OPENEJB_HOME) and run the |
| following command: |
| |
| karan@poweredge:~/install/openejb-3.0$ bin/openejb start |
| |
| Once the Server starts, you will see an output similar to the below in your |
| console: |
| |
| karan@poweredge:~/install/openejb-3.0$ bin/openejb start |
| Apache OpenEJB 3.0 build: 20070926-12:34 |
| http://tomee.apache.org/ |
| OpenEJB ready. |
| [OPENEJB:init] |
| OpenEJB Remote Server |
| ** Starting Services ** |
| NAME IP PORT |
| httpejbd 0.0.0.0 4204 |
| telnet 0.0.0.0 4202 |
| ejbd 0.0.0.0 4201 |
| hsql 0.0.0.0 9001 |
| admin thread 0.0.0.0 4200 |
| ------- |
| Ready! |
| |
| Take out a minute to browse through the conf and logs directories. You |
| should now see some configuration and log files under the respective |
| directories. |
| <a name="HelloWorld-DeploytheEJB"></a> |
| ## Deploy the EJB |
| We will now use the deploy command to deploy the EJB in hello.jar. While |
| you are in the projects directory, run the following command: |
| |
| karan@poweredge:~/projects$ $OPENEJB_HOME/bin/openejb deploy hello.jar |
| |
| The above command should give you the following output: |
| |
| karan@poweredge:~/projects$ $OPENEJB_HOME/bin/openejb deploy hello.jar |
| Application deployed successfully at "hello.jar" |
| App(id=/home/karan/projects/hello.jar) |
| EjbJar(id=hello.jar, path=/home/karan/projects/hello.jar) |
| Ejb(ejb-name=HelloBean, id=HelloBean) |
| Jndi(name=HelloBeanRemote) |
| |
| Notice how the output neatly lays out various deployment details. One thing |
| you might want to note from the output is the JNDI name. This is the JNDI |
| name we used in the client to lookup the EJB |
| <a name="HelloWorld-RuntheClient"></a> |
| ## Run the Client |
| While you are in the projects directory, run the following command to run |
| the client: |
| |
| karan@poweredge:~/projects$ java -cp |
| $OPENEJB_HOME/lib/openejb-client-3.0.jar:$OPENEJB_HOME/lib/javaee-5.0-1.jar:. |
| org.acme.HelloClient |
| |
| The above should give you the following output: |
| |
| Hello World!!!! |
| |
| <a name="HelloWorld-Help!,itdidn'tworkforme!!."></a> |
| ## Help! , it didn't work for me!!. |
| No problem, we are here to help. Just send us an email at |
| users@tomee.apache.org. If possible, send us the contents of |
| logs/openejb.log file in the email. |
| |
| <a name="HelloWorld-Lookingformore?"></a> |
| # Looking for more? |
| |
| More EJB 3.0 examples, sample applications, tutorials and howtos available [here](examples.html) |
| . |