= Embedded and Remotable
:index-group: OpenEJB Standalone Server
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published

= Overview

This example shows how to use OpenEJB3's remoting capabilities in an
embedded scenario. By remoting we mean that you wish to allow _clients
in other vms_ access your ejbs. _Note, you do not need to go to this
extreme to unit test ejbs with remote interfaces._

The basic recipe is the same for a standard embedded scenario but with
these added ingreditents:

* _openejb.embedded.remotable_ property
* _openejb-ejbd_ jar

While creating the InitialContext, pass in the
openejb.embedded.remotable property with the value of "true". When this
is seen by the LocalInitialContextFactory, it will boot up the Server
ServiceManager in the VM which will in turn look for ServerServices in
the classpath.

Provided you have the openejb-ejbd jar in your classpath along with it's
dependencies (openejb-server, openejb-client, openejb-core), then those
services will be brought online and remote clients will be able to
connect into your vm and invoke beans.

If you want to add more ServerServices such as the http version of the
ejbd protocol you'd simply add the openejb-httpejbd jar to your
classpath. A number of ServerServices are available currently:

* openejb-ejbd
* openejb-http
* openejb-telnet
* openejb-derbynet
* openejb-hsql
* openejb-activemq

_The source for this example is in the "telephone-stateful" directory
located in the openejb:download.html[openejb-examples.zip] available on
the http://tomee.apache.org/downloads.html[download page]._

\{note} If your goal is simply to unit test beans with remote
interfaces, this is _not_ the right example for you. The
LocalInitialContextFactory completely supports remote interfaces and all
spec required pass-by-value (serialization) semantics without the need
for network sockets. This example shows the use of OpenEJB in an
embedded environment where connection _outside_ the vm is
required.\{note}

= The Code

For this example we have a simple Stateful bean called TelephoneBean as
defined below. As a simple way of demonstrating the state we have to
methods: speak and listen. You call _speak_ and pass in some text, then
you call _listen_ to get your answer.

== bean

\{snippet:id=code|url=openejb3/examples/telephone-stateful/src/main/java/org/superbiz/telephone/TelephoneBean.java|lang=java}

== business interface

\{snippet:id=code|url=openejb3/examples/telephone-stateful/src/main/java/org/superbiz/telephone/Telephone.java|lang=java}

{title= EJB3 Notes} The bean class uses the annotation _`@Remote_` but
does not specify a list of interfaces as is normally required. Per EJB3
rules, if the bean implements exactly _one business interface_ it may
use `@Remote` with no other values and that business interface is then
implied to be a remote business interface. The same rule applies to
identical usage of `@Local`.

The critical thing to know is that if you add another interface the
rules change and require that you specify both interfaces in the `@Remote`
annotation as in `@Remote`(\{Telephone.class, SecondInterface.class}).
\{tip}

= Embedding

We're going to embed OpenEJB3 into a plain JUnit TestCase as a simple
means of demonstrating the remote capabilities. We'll do the embedding
in our test setUp method, then will make two test methods: - one for
invoking the bean's remote interface via the
_LocalInitialContextFactory_ which goes straight against the embedded
container system - one for invoking the bean's remote interface via the
_RemoteInitialContextFactory_ which connects to a Socket and
communicates to the embedded container system over the ejbd protocol.

== setUp

\{snippet:id=setup|url=openejb3/examples/telephone-stateful/src/test/java/org/superbiz/telephone/TelephoneTest.java|lang=java}

== LocalInitialContextFactory: making in-vm calls to a remote business

interface

\{snippet:id=localcontext|url=openejb3/examples/telephone-stateful/src/test/java/org/superbiz/telephone/TelephoneTest.java|lang=java}

== RemoteInitialContextFactory: making networked calls to a remote

business interface

This is the part you would want to do in apps that are running a
different VM than the one in which the ejb container is embedded. These
"client" VMs need only have the the _openejb-client jar_ in their
classpath and connect to OpenEJB via the RemoteInitialContextFactory
like any other remote EJB client.

\{snippet:id=remotecontext|url=openejb3/examples/telephone-stateful/src/test/java/org/superbiz/telephone/TelephoneTest.java|lang=java}

= Maven setup

\{snippet:id=desc|url=openejb3/examples/telephone-stateful/pom.xml}

\{snippet:id=openejbdep|url=openejb3/examples/telephone-stateful/pom.xml|lang=xml}

= Running

Running the example is fairly simple. In the "telephone-stateful"
directory of the openejb:download.html[examples zip] , just run:

$ mvn clean install

Which should create output like the following.

[source,java]
----
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.telephone.TelephoneTest
Apache OpenEJB 3.0    build: 20080408-04:13
http://tomee.apache.org/
INFO - openejb.home =
----

/Users/dblevins/work/openejb-3.0/examples/telephone-stateful INFO -
openejb.base =
/Users/dblevins/work/openejb-3.0/examples/telephone-stateful 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 - Configuring
Service(id=Default JDK 1.3 ProxyFactory, type=ProxyFactory,
provider-id=Default JDK 1.3 ProxyFactory) INFO - Found EjbModule in
classpath:
/Users/dblevins/work/openejb-3.0/examples/telephone-stateful/target/classes
INFO - Configuring app:
/Users/dblevins/work/openejb-3.0/examples/telephone-stateful/target/classes
INFO - Configuring Service(id=Default Stateful Container,
type=Container, provider-id=Default Stateful Container) INFO -
Auto-creating a container for bean TelephoneBean:
Container(type=STATEFUL, id=Default Stateful Container) INFO - Loaded
Module:
/Users/dblevins/work/openejb-3.0/examples/telephone-stateful/target/classes
INFO - Assembling app:
/Users/dblevins/work/openejb-3.0/examples/telephone-stateful/target/classes
INFO - Jndi(name=TelephoneBeanRemote) -->
Ejb(deployment-id=TelephoneBean) INFO - Created
Ejb(deployment-id=TelephoneBean, ejb-name=TelephoneBean,
container=Default Stateful Container) INFO - Deployed
Application(path=/Users/dblevins/work/openejb-3.0/examples/telephone-stateful/target/classes)
** Starting Services ** NAME IP PORT +
ejbd 127.0.0.1 4201 +
admin thread 127.0.0.1 4200 +
------- Ready! Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time
elapsed: 0.89 sec

[source,properties]
----
Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
----
