= Getting Started
:index-group: OpenEJB Standalone Server
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published

== The following instructions are written using Eclipse 3.2. We
will refer to the install location of OpenEJB as OPENEJB_HOME

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

== 1. Download and Install OpenEJB

Follow
these http://cwiki.apache.org/confluence/display/OPENEJB/Quickstart[instructions]

== 2. Setup your development environment

=== Eclipse

* Open eclipse and create a new java project. Name it EJBProject
* Add the following jars to the build path of your project --
OPENEJB_HOME/lib/geronimo-ejb_3.0_spec-1.0.jar
* Now create another project named EJBClient. This is where we will
write a test client
* Add the following jars to the build path of this project --
OPENEJB_HOME/lib/openejb-client-3.0.0-SNAPSHOT.jar
* Add the EJBProject to the classpath of the EJBClient project

== 3. Start the Server

Open the command prompt and run the following command:

[source,java]
----
d:\openejb-3.0.0-SNAPSHOT\bin\openejb start
----

You will get the following message on the console:

[source,java]
----
D:\openejb-3.0.0-SNAPSHOT>bin\openejb start
Apache OpenEJB 3.0.0-SNAPSHOT    build: 20070830-07:53
http://tomee.apache.org/
OpenEJB ready.
[OPENEJB:init]
 OpenEJB Remote Server
      ** Starting Services **
      NAME             IP          PORT
      httpejbd         0.0.0.0         4204
      admin thread         0.0.0.0         4200
      ejbd             0.0.0.0         4201
      hsql             0.0.0.0         9001
      telnet           0.0.0.0         4202
    -------
    Ready!
----

== 4. Write an EJB

In the EJB project create a new interface named Greeting

[source,java]
----
package com.myejbs;

import javax.ejb.Remote;

@Remote
public interface Greeting {
  public String greet();
}
----

Now create a new class named GreetingBean which implements the above
interface (shown below)

[source,java]
----
package com.myejbs;

import javax.ejb.Stateless;

@Stateless
public class GreetingBean implements Greeting {

    public String greet() {
        return "My First Remote Stateless Session Bean";
    }

}
----

== 5. Deploy the EJB

[arabic]
. Export the EJBProject as a jar file. Name it greeting.jar and put it
in the OPENEJB_HOME/apps directory.
. Open the command prompt and type in the following command:
+
d:-3.0.0-SNAPSHOT > bindeploy apps.jar

This should give you the following output:

[source,java]
----
D:\openejb-3.0.0-SNAPSHOT>bin\openejb deploy apps\greeting.jar

Application deployed successfully at \{0\}

App(id=D:\openejb-3.0.0-SNAPSHOT\apps\greeting.jar)

    EjbJar(id=greeting.jar, path=D:\openejb-3.0.0-SNAPSHOT\apps\greeting.jar)

    Ejb(ejb-name=GreetingBean, id=GreetingBean)

        Jndi(name=GreetingBeanRemote)
----

\{color:#330000}\{_}Notice the Jndi(name=GreetingBeanRemote)
information. Keep this handy as this is the JNDI name of the bean which
the client will use for lookup\{_}\{color}

== 6. Write the Client

In the EJBClient project, create a class named Client (shown below)

[source,java]
----
package com.myclient;

import com.myejbs.Greeting;

import javax.naming.InitialContext;
import java.util.Properties;

public class Client {
    public static void main(String[] args) {

        try {
            Properties p = new Properties();
            p.put("java.naming.factory.initial", "org.openejb.client.RemoteInitialContextFactory");
            p.put("java.naming.provider.url", "ejbd://127.0.0.1:4201");
            InitialContext ctx = new InitialContext(p);
            Greeting greeter = (Greeting) ctx.lookup("GreetingBeanRemote");
            String message = greeter.greet();
            System.out.println(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
----

== 7. Run the Client

Open Client.java in eclipse and run it as a java application. You should
see the following message in the console view:

[source,properties]
----
My First Remote Stateless Session Bean
----

== 8. Stop the server

There are two ways to stop the server: 1. You can press Ctrl+c on the
command prompt to stop the server 1. On the command prompt type in the
following command:

[source,java]
----
D:\openejb-3.0.0-SNAPSHOT>bin\openejb stop
----
