tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Blevins <david.blev...@gmail.com>
Subject Re: OPEN EJB most recent version and POJO's.
Date Tue, 07 Jun 2011 19:06:16 GMT
As of EJB 3.0 everything is based on POJOs exactly as you describe.  POJOs with Remote and
local access is supported through JNDI lookup.  Different lifecycles are available.  And all
of it is standard and handled by the container exactly as you describe.

In addition they can offer security and transaction support and interceptors.  Security is
off by default, transactions are on by default but can be shut off, and interceptors don't
factor in unless you explicitly add some.

On Jun 7, 2011, at 12:47 AM, Zachary1234 wrote:

> -A Pojo which I can have instantiated within openEJB
> by the context.lookup call either 

- @Stateful gives you a POJO that will be instantiated on lookup.  Each lookup will result
in a new instance of the POJO.
- @Singleton gives you a POJO that will be instantiated on *first* lookup.  Each subsequent
lookup will give you a reference to the same bean.

See http://openejb.apache.org/3.0/simple-stateful-example.html
See http://openejb.apache.org/3.0/singleton-example.html

There is another lifecycle called @Stateless, but doesn't sound like what you want.  That
is essentially a small pool of reusable instances hooked up to JNDI.

To get something into JNDI you need to use one of these three annotations on the POJO so we
know how you want us to handle its lifecycle when lookups occur.  I.e. it tells us what you
want us to give the caller; a new instance, the same instance, or an instance from a pool.

> -from within another static class/object within the same openEJB instance

Putting @LocalBean on the pojo class will make it available locally for JNDI lookup -- no
interface required.  By default the MyClass pojo will be available in JNDI under the name
"MyPojoLocalBean".  This is configurable.

Putting @Local on an interface and implementing that interface in the pojo will make it available
locally for lookup.  Only the methods of the interface will be accessible by others in the
same VM.  By default the MyClass pojo will be available under the name "MyClassLocal"

To lookup specify org.apache.openejb.client.LocalInitialContextFactory as your Context.INITIAL_CONTEXT_FACTORY
when creating the InitialContext, then use the name described above.

Note for unit testing, any @Remote interfaces (described below) can be looked up from the
LocalInitialContextFactory as well.  This is nice as the LocalInitialContextFactory involves
no ports or actual networking code.  Just plain direct access to JNDI of the VM you are in.

> -on the same PC in a seperate JVM.
> -Or on a seperate PC in a seperate JVM, through a classic network.

Putting @Remote on an interface and implementing that interface in the bean will make it available
remote for lookup and execution from another vm outside the server, either on the same PC
or elsewhere in the network.  By default the MyClass pojo will be available in JNDI under
"MyClassRemote".  This is configurable.

To lookup from a client in another vm specify org.apache.openejb.cient.RemoteInitialContextFactory
as the Context.INITIAL_CONTEXT_FACTORY and "ejbd://theserver:4201" as the Context.PROVIDER_URL.


> Of course, from seperate VM's, I intend to use JNDI.
> 
> -If just calling a class from within another class,
> do I just deploy the compiled class in a jar file
> to the JBOSS AS deployment directory, as per normal?

Two options.  You can put the app in a server, or you can put the server in your app.

Here is an example if putting the server in your app.

 http://openejb.apache.org/3.0/embedded-and-remotable.html

To put the app in a server, you just put the jar file of your app into the ${openejb.home}/apps/
directory and start the openejb server.

> -How can I run code like a main method
> inside the Microcontainer/AS (non EJB, any version standard)?

I'm not sure what you might mean with this one, but the 'embedded-and-remote' might be what
you are after.  That gives you a plain 'main method' java application that can also service
requests from remote clients.

> -If I then wish to use JNDI for context lookups, 
> how do I declare the POJO in my openEJB .class,.jar?
> Is a simple annotation necessary for this?
> -If annotation is necessary, what is the annotation 
> name/import statement/.jar lib filename?

This tutorial is a great one for showing all the steps with annotations and compiling and
running.  No IDE or build tool is used which makes it easier to see what is going on:

  http://openejb.apache.org/hello-world.html


-David


Mime
View raw message