You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hivemind.apache.org by Howard Lewis Ship <hl...@gmail.com> on 2004/08/09 16:31:35 UTC

Remove ThreadLocalStorage?

In the dept. of general cleanups ... ThreadLocalStorage seemed like a
good idea at the time, but with service-property:,
ServicePropertyFactory and threaded/pooled services it doesn't seem to
be such a good idea.  I don't forsee myself ever using it and would
like to remove it. thoughts?
-- 
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Jakarta Tapestry
Creator, Jakarta HiveMind
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-user-help@jakarta.apache.org


Re: Remove ThreadLocalStorage?

Posted by Pablo Lalloni <pl...@afip.gov.ar>.
We're using it mainly for "call context" data storage, such as security
data and the like.

I guess every use we have can be converted to the scheme you propose
--threaded services & SPF-- but that's not built and the current
solution is working, or we could just copy & paste ThreadLocalStorage to
our codebase...

Why you think threaded services & SPF is better or cleaner than TLS?


El lun, 09-08-2004 a las 11:31, Howard Lewis Ship escribió:

> In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> good idea at the time, but with service-property:,
> ServicePropertyFactory and threaded/pooled services it doesn't seem to
> be such a good idea.  I don't forsee myself ever using it and would
> like to remove it. thoughts?

-- 
Pablo I. Lalloni <pl...@afip.gov.ar>
Teléfono +54 (11) 4347-3177 
Proyecto Pampa
Dirección Informática Tributaria
AFIP

> In 2010, M$ Windows will be a quantum processing emulation layer for a
> 128-bit mod of a 64-bit hack of a 32-bit patch to a 16-bit GUI for an
> 8-bit operating system written for a 4-bit processor from a 2-bit
> company that can't stand 1 bit of competition.

Re: Remove ThreadLocalStorage?

Posted by Harish Krishnaswamy <ha...@gmail.com>.
Well either way I think I see how this works. Actually this is quite
similar to the kind of thing I am currently doing.

So a +1 to remove ThreadLocalStorage.

-Harish

On Mon, 9 Aug 2004 19:25:18 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> The SPF creates a proxy that accesses another service, and a property
> provided by that service.  If the HibernateSession service is threaded
> and HibernateService is not, then *every* access to the
> HibernateSession service will, potentially, cause a new Hibernate
> session object to be created.
> 
> But I might be missing something; I was looking for a reasonable
> example, but I don't know the Hibernate APIs off the top of my head.
> 
> On Mon, 9 Aug 2004 13:45:53 -0400, Harish Krishnaswamy
> 
> 
> <ha...@gmail.com> wrote:
> > Why not make the HibernateSession service threaded and have the SPF go
> > to the HibernateService (which is essentially a hibernate session
> > factory service) to get a session? Why does a threaded service need to
> > be isolated? I guess I am missing something while trying to avoid the
> > wrapper service.
> >
> > -Harish
> >
> >
> >
> > On Mon, 9 Aug 2004 13:08:11 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > > Yes. My reasoning on why this is better:
> > >
> > > If you have a threaded service, say HibernateSessionHolder, which has
> > > getSession() and setSession() methods, then you can make use of
> > > ServicePropertyFactory.
> > >
> > > SPF can access the session proeprty of HibernateSessionHolder, to form
> > > a new service, HibernateSession ... whose interface is
> > > hibernate.Session.
> > >
> > > This hibernate.Session instance is a wrapper around your threaded
> > > holder service and, ultimately, the actual Session object.
> > >
> > > You can inject the HibernateSession service into your code directly.
> > > You can then access the Hibernate Session "normally" ... you don't
> > > have to de-reference through a holder service, or through a
> > > ThreadLocalMap or anything.
> > >
> > > This will clarify and simplify your code and make it easier to test
> > > (your only have to mock hibernate.Session, not ThreadLocalMap or any
> > > of the rest).
> > >
> > > The bridge service, created by SPF, isolates the service that is
> > > threaded from the other services, which can be ordinary singletons.
> > >
> > > On Mon, 9 Aug 2004 11:32:52 -0400, Harish Krishnaswamy
> > >
> > >
> > > <ha...@gmail.com> wrote:
> > > > Which means I have to have a threaded service now to wrap a thread
> > > > local item like the Hibernate session?
> > > >
> > > > -Harish
> > > >
> > > >
> > > >
> > > > On Mon, 9 Aug 2004 10:31:35 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > > > > In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> > > > > good idea at the time, but with service-property:,
> > > > > ServicePropertyFactory and threaded/pooled services it doesn't seem to
> > > > > be such a good idea.  I don't forsee myself ever using it and would
> > > > > like to remove it. thoughts?
> > > > > --
> > > > > Howard M. Lewis Ship
> > > > > Independent J2EE / Open-Source Java Consultant
> > > > > Creator, Jakarta Tapestry
> > > > > Creator, Jakarta HiveMind
> > > > > http://howardlewisship.com
> > > > >
> > > > > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > > > >
> > > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > > >
> > > >
> > >
> > > --
> > > Howard M. Lewis Ship
> > > Independent J2EE / Open-Source Java Consultant
> > > Creator, Jakarta Tapestry
> > > Creator, Jakarta HiveMind
> > > http://howardlewisship.com
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> >
> >
> 
> --
> Howard M. Lewis Ship
> Independent J2EE / Open-Source Java Consultant
> Creator, Jakarta Tapestry
> Creator, Jakarta HiveMind
> http://howardlewisship.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org


Re: Remove ThreadLocalStorage?

Posted by Howard Lewis Ship <hl...@gmail.com>.
The SPF creates a proxy that accesses another service, and a property
provided by that service.  If the HibernateSession service is threaded
and HibernateService is not, then *every* access to the
HibernateSession service will, potentially, cause a new Hibernate
session object to be created.

But I might be missing something; I was looking for a reasonable
example, but I don't know the Hibernate APIs off the top of my head.

On Mon, 9 Aug 2004 13:45:53 -0400, Harish Krishnaswamy
<ha...@gmail.com> wrote:
> Why not make the HibernateSession service threaded and have the SPF go
> to the HibernateService (which is essentially a hibernate session
> factory service) to get a session? Why does a threaded service need to
> be isolated? I guess I am missing something while trying to avoid the
> wrapper service.
> 
> -Harish
> 
> 
> 
> On Mon, 9 Aug 2004 13:08:11 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > Yes. My reasoning on why this is better:
> >
> > If you have a threaded service, say HibernateSessionHolder, which has
> > getSession() and setSession() methods, then you can make use of
> > ServicePropertyFactory.
> >
> > SPF can access the session proeprty of HibernateSessionHolder, to form
> > a new service, HibernateSession ... whose interface is
> > hibernate.Session.
> >
> > This hibernate.Session instance is a wrapper around your threaded
> > holder service and, ultimately, the actual Session object.
> >
> > You can inject the HibernateSession service into your code directly.
> > You can then access the Hibernate Session "normally" ... you don't
> > have to de-reference through a holder service, or through a
> > ThreadLocalMap or anything.
> >
> > This will clarify and simplify your code and make it easier to test
> > (your only have to mock hibernate.Session, not ThreadLocalMap or any
> > of the rest).
> >
> > The bridge service, created by SPF, isolates the service that is
> > threaded from the other services, which can be ordinary singletons.
> >
> > On Mon, 9 Aug 2004 11:32:52 -0400, Harish Krishnaswamy
> >
> >
> > <ha...@gmail.com> wrote:
> > > Which means I have to have a threaded service now to wrap a thread
> > > local item like the Hibernate session?
> > >
> > > -Harish
> > >
> > >
> > >
> > > On Mon, 9 Aug 2004 10:31:35 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > > > In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> > > > good idea at the time, but with service-property:,
> > > > ServicePropertyFactory and threaded/pooled services it doesn't seem to
> > > > be such a good idea.  I don't forsee myself ever using it and would
> > > > like to remove it. thoughts?
> > > > --
> > > > Howard M. Lewis Ship
> > > > Independent J2EE / Open-Source Java Consultant
> > > > Creator, Jakarta Tapestry
> > > > Creator, Jakarta HiveMind
> > > > http://howardlewisship.com
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > > >
> > > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > >
> > >
> >
> > --
> > Howard M. Lewis Ship
> > Independent J2EE / Open-Source Java Consultant
> > Creator, Jakarta Tapestry
> > Creator, Jakarta HiveMind
> > http://howardlewisship.com
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> 
> 


-- 
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Jakarta Tapestry
Creator, Jakarta HiveMind
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org


Re: Remove ThreadLocalStorage?

Posted by Pablo Lalloni <pl...@afip.gov.ar>.
The GoodThing I see in HibernateSession is that you can register it as a
thread cleanup listener to close the inner H's session when
appropriate... or I'm missing something also :)

El lun, 09-08-2004 a las 14:45, Harish Krishnaswamy escribió:

> Why not make the HibernateSession service threaded and have the SPF go
> to the HibernateService (which is essentially a hibernate session
> factory service) to get a session? Why does a threaded service need to
> be isolated? I guess I am missing something while trying to avoid the
> wrapper service.
> 
> -Harish
> 
> On Mon, 9 Aug 2004 13:08:11 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > Yes. My reasoning on why this is better:
> > 
> > If you have a threaded service, say HibernateSessionHolder, which has
> > getSession() and setSession() methods, then you can make use of
> > ServicePropertyFactory.
> > 
> > SPF can access the session proeprty of HibernateSessionHolder, to form
> > a new service, HibernateSession ... whose interface is
> > hibernate.Session.
> > 
> > This hibernate.Session instance is a wrapper around your threaded
> > holder service and, ultimately, the actual Session object.
> > 
> > You can inject the HibernateSession service into your code directly.
> > You can then access the Hibernate Session "normally" ... you don't
> > have to de-reference through a holder service, or through a
> > ThreadLocalMap or anything.
> > 
> > This will clarify and simplify your code and make it easier to test
> > (your only have to mock hibernate.Session, not ThreadLocalMap or any
> > of the rest).
> > 
> > The bridge service, created by SPF, isolates the service that is
> > threaded from the other services, which can be ordinary singletons.
> > 
> > On Mon, 9 Aug 2004 11:32:52 -0400, Harish Krishnaswamy
> > 
> > 
> > <ha...@gmail.com> wrote:
> > > Which means I have to have a threaded service now to wrap a thread
> > > local item like the Hibernate session?
> > >
> > > -Harish
> > >
> > >
> > >
> > > On Mon, 9 Aug 2004 10:31:35 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > > > In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> > > > good idea at the time, but with service-property:,
> > > > ServicePropertyFactory and threaded/pooled services it doesn't seem to
> > > > be such a good idea.  I don't forsee myself ever using it and would
> > > > like to remove it. thoughts?
> > > > --
> > > > Howard M. Lewis Ship
> > > > Independent J2EE / Open-Source Java Consultant
> > > > Creator, Jakarta Tapestry
> > > > Creator, Jakarta HiveMind
> > > > http://howardlewisship.com
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > > >
> > > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > >
> > >
> > 
> > --
> > Howard M. Lewis Ship
> > Independent J2EE / Open-Source Java Consultant
> > Creator, Jakarta Tapestry
> > Creator, Jakarta HiveMind
> > http://howardlewisship.com
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > 
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org

-- 
Pablo I. Lalloni <pl...@afip.gov.ar>
Teléfono +54 (11) 4347-3177 
Proyecto Pampa
Dirección Informática Tributaria
AFIP

> In 2010, M$ Windows will be a quantum processing emulation layer for a
> 128-bit mod of a 64-bit hack of a 32-bit patch to a 16-bit GUI for an
> 8-bit operating system written for a 4-bit processor from a 2-bit
> company that can't stand 1 bit of competition.

Re: Remove ThreadLocalStorage?

Posted by Harish Krishnaswamy <ha...@gmail.com>.
Why not make the HibernateSession service threaded and have the SPF go
to the HibernateService (which is essentially a hibernate session
factory service) to get a session? Why does a threaded service need to
be isolated? I guess I am missing something while trying to avoid the
wrapper service.

-Harish

On Mon, 9 Aug 2004 13:08:11 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> Yes. My reasoning on why this is better:
> 
> If you have a threaded service, say HibernateSessionHolder, which has
> getSession() and setSession() methods, then you can make use of
> ServicePropertyFactory.
> 
> SPF can access the session proeprty of HibernateSessionHolder, to form
> a new service, HibernateSession ... whose interface is
> hibernate.Session.
> 
> This hibernate.Session instance is a wrapper around your threaded
> holder service and, ultimately, the actual Session object.
> 
> You can inject the HibernateSession service into your code directly.
> You can then access the Hibernate Session "normally" ... you don't
> have to de-reference through a holder service, or through a
> ThreadLocalMap or anything.
> 
> This will clarify and simplify your code and make it easier to test
> (your only have to mock hibernate.Session, not ThreadLocalMap or any
> of the rest).
> 
> The bridge service, created by SPF, isolates the service that is
> threaded from the other services, which can be ordinary singletons.
> 
> On Mon, 9 Aug 2004 11:32:52 -0400, Harish Krishnaswamy
> 
> 
> <ha...@gmail.com> wrote:
> > Which means I have to have a threaded service now to wrap a thread
> > local item like the Hibernate session?
> >
> > -Harish
> >
> >
> >
> > On Mon, 9 Aug 2004 10:31:35 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > > In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> > > good idea at the time, but with service-property:,
> > > ServicePropertyFactory and threaded/pooled services it doesn't seem to
> > > be such a good idea.  I don't forsee myself ever using it and would
> > > like to remove it. thoughts?
> > > --
> > > Howard M. Lewis Ship
> > > Independent J2EE / Open-Source Java Consultant
> > > Creator, Jakarta Tapestry
> > > Creator, Jakarta HiveMind
> > > http://howardlewisship.com
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> >
> >
> 
> --
> Howard M. Lewis Ship
> Independent J2EE / Open-Source Java Consultant
> Creator, Jakarta Tapestry
> Creator, Jakarta HiveMind
> http://howardlewisship.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org


Re: Remove ThreadLocalStorage?

Posted by Howard Lewis Ship <hl...@gmail.com>.
Yes. My reasoning on why this is better:

If you have a threaded service, say HibernateSessionHolder, which has
getSession() and setSession() methods, then you can make use of
ServicePropertyFactory.

SPF can access the session proeprty of HibernateSessionHolder, to form
a new service, HibernateSession ... whose interface is
hibernate.Session.

This hibernate.Session instance is a wrapper around your threaded
holder service and, ultimately, the actual Session object.

You can inject the HibernateSession service into your code directly. 
You can then access the Hibernate Session "normally" ... you don't
have to de-reference through a holder service, or through a
ThreadLocalMap or anything.

This will clarify and simplify your code and make it easier to test
(your only have to mock hibernate.Session, not ThreadLocalMap or any
of the rest).

The bridge service, created by SPF, isolates the service that is
threaded from the other services, which can be ordinary singletons.

On Mon, 9 Aug 2004 11:32:52 -0400, Harish Krishnaswamy
<ha...@gmail.com> wrote:
> Which means I have to have a threaded service now to wrap a thread
> local item like the Hibernate session?
> 
> -Harish
> 
> 
> 
> On Mon, 9 Aug 2004 10:31:35 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> > In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> > good idea at the time, but with service-property:,
> > ServicePropertyFactory and threaded/pooled services it doesn't seem to
> > be such a good idea.  I don't forsee myself ever using it and would
> > like to remove it. thoughts?
> > --
> > Howard M. Lewis Ship
> > Independent J2EE / Open-Source Java Consultant
> > Creator, Jakarta Tapestry
> > Creator, Jakarta HiveMind
> > http://howardlewisship.com
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> 
> 


-- 
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Jakarta Tapestry
Creator, Jakarta HiveMind
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org


Re: Remove ThreadLocalStorage?

Posted by Harish Krishnaswamy <ha...@gmail.com>.
Which means I have to have a threaded service now to wrap a thread
local item like the Hibernate session?

-Harish

On Mon, 9 Aug 2004 10:31:35 -0400, Howard Lewis Ship <hl...@gmail.com> wrote:
> In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> good idea at the time, but with service-property:,
> ServicePropertyFactory and threaded/pooled services it doesn't seem to
> be such a good idea.  I don't forsee myself ever using it and would
> like to remove it. thoughts?
> --
> Howard M. Lewis Ship
> Independent J2EE / Open-Source Java Consultant
> Creator, Jakarta Tapestry
> Creator, Jakarta HiveMind
> http://howardlewisship.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org


Re: Remove ThreadLocalStorage?

Posted by Paul Russell <wo...@paulrussell.org>.
Hi there,

On 9 Aug 2004, at 15:31, Howard Lewis Ship wrote:
> In the dept. of general cleanups ... ThreadLocalStorage seemed like a
> good idea at the time, but with service-property:,
> ServicePropertyFactory and threaded/pooled services it doesn't seem to
> be such a good idea.  I don't forsee myself ever using it and would
> like to remove it. thoughts?

I actually implemented something using the ThreadLocalStorage service 
just last week. I used it as a direct replacement to 
java.lang.ThreadLocal. Was this not its intention? In this particular 
situation, ThreadLocal was used to store context information about a 
particular request that could be picked up from anywhere in the call 
hierarchy. I know this sounds like hideous design, but it's not, I 
promise -- I'm over simplifying here!

Overall, I'm not too worried if you feel it should be removed -- I'm 
only really using it because it allows me to 'swap out' real 
ThreadLocalStorage for a fake one for my unit tests. I could either 
just use java.lang.ThreadLocal directly, or implement my own version of 
the service. I leave the call to you, but just wanted you to be aware 
that there was at least one person using it!

Cheers,

Paul
-- 
Paul Russell
work@paulrussell.org


---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-dev-help@jakarta.apache.org