--- In jug-indonesia@yahoogroups.com, "Joshua Jackson" <[EMAIL PROTECTED]> 
wrote:
>
> Dear Members,
> 
> It is a great honor for us because one of the committer of OpenEJB and
> one the Expert Group of EJB3 has decided to join our Java community
> :). So please help me welcome David Blevins and make his stay in our
> community comfortable and enjoyable.

Thanks for the warm welcome everyone!  I've been pretty impressed with the size 
and 
activity in this community.  From the text I can read, it looks like some fun 
and very 
spirited debates happen here, which is something special.

I think it will be great to get the feedback of the people here as more drafts 
of the EJB 3.1 
specification come out.  EJB 3.0 was very heavily persistence focused.  EJB 3.1 
so far has 
been very heavily focused on the session bean side of things.  For the first 
time in years 
we have a new bean type, the @Singleton.  In my opinion, the Singleton is going 
to replace 
a lot of what people are using @Stateless for today.  

The Singleton is essentially what you get if you take a Stateless bean and 
adjust the pool 
size to be exactly 1 and could allow concurrent access to that bean like a 
servlet.  It can do 
everything a Stateless can do such as support Web Services, Security, 
Transactions, etc.  It 
will have an @Startup annotation which is similar in concept to the servlet 
<load-on-
startup>, but unlike servlets it doesn't take a number as an argument.  
Instead, you can 
use an @DependsOn annotation to say which other Singletons you need and the 
container 
will ensure they start before you.

Singletons will also support two modes of concurrent access, Container-Managed 
Concurrency (the default) and Bean-Managed Concurrency.  With Bean-Managed 
Concurrency the container sends all invocations into the bean and let's the 
Singleton bean 
instance decide how and when to synchronize access, if at all.  Here the 
'synchronization' 
keyword is allowed as well as the full javax.util.concurrent set of libraries.  
With Container-
Managed Concurrency, the container will enforce concurrency for you.  Two 
modes, called 
"locks" will exist and can be assigned to the class or on a per method basis.  
The first and 
the default is a "write" lock.  Essentially with a write lock, the caller hold 
an exclusive lock 
on the bean for the duration of the method call and all other threads for that 
or any other 
method must wait.  The other option is a "read" lock.  The read lock allows 
full concurrent 
access to the methods (assuming no write locks are held).  The default mode of 
WRITE will 
essentially make your bean a single-threaded bean, which is very slow.  The 
more 
conservative @Lock(WRITE) as chosen as the default as this is how all the other 
bean types 
work (on a single thread may access a bean instance at any given time).  Those 
that are 
aware of how to handle concurrent access can easily put @Lock(READ) on their 
bean class, 
thus changing the default, and then @Lock(WRITE) on specific methods if needed.

We have an implementation of this in OpenEJB which I quite literally finished 
yesterday.  I'd 
love to get some feedback for both the spec and for OpenEJB.  It's the only 
@Singleton 
implementation in existence that I'm aware of and I'm pretty excited to see 
what people 
think.  I've put together a snapshot build of the svn trunk for the group to 
try out along 
with the examples:

  http://people.apache.org/~dblevins/jug-indonesia/

Thanks again for the welcome and happy EJB'ing :)

-David



Kirim email ke