I think this is a misinterpretation of the
spec by you (and others):
Applications can and in some cases are allowed
to use the jakarta.* namespace (or javax.*),
especially TCKs are for the last! And this is
for very good reason, too (Lukas explained
that in detail).
Well, it is explicitly forbidden since at least
10 years but if you can see a paragraph saying the
opposite - meaning the spec contradicts itself
(happens sadly) - it could be refined.
It was also respected by the TCK until the
javax->jakarta migration missed this point in a
"too fast" migration.
It is not - for good reasons:
Regarding common applications, your are not allowed to
use i.e. because of the trademark, naming conflicts etc.
Instead developers should use a namespace reflecting
their project organisation.
But i.e. the TCK is allowed to use it!
No since TCK must respect the spec and the spec stated it
is forbidden so as written numerous times, the application
part (embedded in an application) of TCK must not.
Scott S. pointed this our already, it is NOT forbidden in the
spec and as far as i know there is no TCK test available, that
ensures an implementation to do something else.
There was 2 quotations from the spec stating it is forbidden so no real discussion on that. Fact TCK don't test it is not a proof too (JPA spec can show you that TCK are not a proof of respect of the spec to cite only one spec ;)).
And for common applications the user is allowed to add
jakarta.* stuff too - i.e. to add jakarta specs, that
are not included in the implementation already.
Yes while not deployed in any application archive (which
means no literally).
Why not as part of the app package? As an application developer I
want do decide where to add functionality - as part the platform
implementation or my application.
Cause it is forbidden, as simple as this. The spec spirit is "infrastructure"/"container"/ vs "application" separation in terms of packages.
"As an application developer I want do decide where to add functionality - as part the platform implementation or my application."
No, as an application developer, JakartaEE (JavaEE) only materializes the application part, rest is not specified nor materialized in the spec - because vendors are too heteroclites and there are tons of options - so it does not exist for a JakartaEE user (it does for a container vendor user indeed but it is out of topic there).
Filtering misconfigured user applications (by adding
components already provided by the implementation) to
run them is not a good reason for filtering the hole
root namespace.
Once again, as mentionned, there are technical reasons to
enforce that and the first one is to ensure the jakarta
namespace is not corrupted by user code nor vulnerable from
applications (even if this part can evolve with recent java
versions).
Now I am curious: What are the exact technical reasons?
Ensuring the specs are the expected ones (container ones), ensuring the classes are available during the whole deployment (ie before the app is even fully loaded which is not the case of application classes), ensuring the user can't hack the container, ensuring the container is compatible with the spec versions and likely a few more I'm forgetting.
As soon as you allow the application to provide spec jars you violate it and start to get troubles (you become in an unspecified and invalid state to summarize it).
To ensure quality at low cost, I want to fail fast. As an
application developer preventing misconfiguration, I need to do
the before the deployment of the app - at compile time within the
IDE. May be you can add a check for me in the implementation too -
but I don't want to run an overloaded, misconfigured app without
notable feedback (fail to run the app at best). And I want to be
able to add things as an expert via my app - when I know what I am
doing.
This is perfectly compatible but it enters into vendor area and not JakartaEE scope (the common part if you want).
As explained, TomEE - for example - enabled that. Default is to respect the spec and harnessed run, ie the user compiled against the ee-api jar of the target instance in provided scope so has no surprise and can't compile/test code incompatible. In advanced mode you can put a spec and force tomee to use it instead of the container one - indeed it is limited to a set of spec, not all can support that feature.
I can add vulnerabilities at any part the app or an app container
runtime. Therefore hardening need to be done and depending on a
security analysis. When you talk about situations where the
Security Manager can sill be used: It's capabilities are limited,
but need fine grained configuration only (as part of the
hardening).
It is not really about security manager, it is never used and will be dropped. It is more about not loading the 8th level transitive dep of your build project which brings jakarta.foo.bar and override (child first) the container one so the implementation of the container is no more available (classloader tree/graph rule) and your application is only partially deployed or it is properly deployed but with a classloading graph wiring which is unsupported and untested by your vendor...unspecified and untested so bad for user *by default*.
At the moment there is only one platform
implementation mentioned in the threads
(TomEE), that has problems with that (please
add more):
No, all servers do it, even "subservers"
(partial support of EE like Tomcat) and even libs
(all JPA implementations for ex).
The scope is globally "if there is any work
with proxying and classloader" so it covers most
of the implementations even if some can be fully
contextual theorically - but I know none doing it
this way.
TomEE
(OpenLiberty ?)
Not sure it is enforced at openliberty - should if it is
servlet compatible at least ;) - but from what I have tested
it is random when you mix both and OSGi seems to play his
role until you configure it explicitly so without checking
more deeply I'd say it is in between by design but not
generally enabling too.
Once again, there is no real way to make *all* spec
working together without forcing all EE stack to be in the
same loader and the app parent loader must provide it so at
the end you must prevent the app to load it in general -
once again some cases can enable to be loaded from the app,
TomEE enabled to load jaxrs 2 from the app before when JAXRS
1 was still the default in, same for jsonp/jsonb - but
generally speaking it can't work if you also respect the
flat classloader for the app - and openliberty is not better
than others there since it inherit from EE classloading.
To give you a quick summary: look how EAR are broken and
vendors worked around their classloading, it is the same if
you don't respect this spec restriction.
I am not saying: Hey app developers, do what you want to -
especially not for the legal aspects and maintainability.
But in edge cases like your provided use case to patch an
existing implementation version or create a hotfix it is valid to
do so within jakarta.*.
Never said the opposite and it is fine to enable it at vendor level as mentionned. What wouldn't be fine is to open the door in the spec to do it portably since there is no way to guarantee it works in the spec due to its construction (or it would require to define very deeply the classloading - which is out of topic for this thread btw - and sounds like not the best option for "tomorrow" since everybody is becoming "flat classpath" - and not JPMS but literally "flat classpath" so if EE must invest time in defining any classloading compatibilty I'd say it would be about it more than anything else (but indeed it is my opinion and we kind of quit this thread topic so will not go way further on it).
The following component spec implementations
are mentioned to might have problems (please
add more):
EclipseLink
CXF
OpenWebBeans
The original decision was made to split the
TCK into parts, that fit into the spec project
- therefore I strongly recommend to drop it in
jakarta.[spec].* (some ? put it in
jakarta.[spec].tck.*), where it belongs to.
As explained you cant start with jakarta so
decision is more about what you put before, not
what you put after which is already done and does
not need to involve more work.
Yes, you can! (see above)
Best,
Jan
Am 22.01.22 um 13:13 schrieb Romain
Manni-Bucau:
Hi Markus,
The references and
explanations are higher - at the beginning
- in this thread. Long story short:
platform assumes api package is not
provided by the apps so tck simulating an
app must not use it by spec.
Can
you please publish that rule
on a place that we can link
to?
Also
it would be great to hear why
it is forbidden for us to
stick with jakarta.* for TCK
tests.
-Markus
Von:
jakartaee-platform-dev
[mailto:jakartaee-platform-dev-bounces@xxxxxxxxxxx]
Im Auftrag von David
Blevins Gesendet: Freitag,
21. Januar 2022 23:26 An:
jakartaee-platform
developer discussions Cc:jsonb-dev@xxxxxxxxxxx;
jakartaee-tck-dev@xxxxxxxxxxx;
jaxrs developer
discussions; jsonp
developer discussions Betreff: Re:
[jakartaee-platform-dev]
[jaxrs-dev] [External] :
Re: Jakarta TCK package
naming convention
The LJC is
the current elected Participant
Member of the Specification
Committee and voted +1. Of the
binding votes from members of
the Specification Committee who
did not abstain, the vote did
pass by super majority.
Using that
namespace is still optional,
however. The only requirement
is not to use jakarta.* for
TCK tests.
I
cannot see that a
concensus was actually
found. iJUG is voting
against this decision.
-Markus
Karg
iJUG
Vice Embassador at
Eclipse Foundation
Von:jaxrs-dev
[mailto:jaxrs-dev-bounces@xxxxxxxxxxx]Im
Auftrag vonEmily
Jiang via jaxrs-dev Gesendet:Dienstag,
18. Januar 2022
19:39 An:jakartaee-platform
developer
discussions Cc:Emily
Jiang; jsonp
developer
discussions; Scott
Stark;jakartaee-tck-dev@xxxxxxxxxxx; jaxrs
developer
discussions;jsonb-dev@xxxxxxxxxxx Betreff:Re:
[jaxrs-dev]
[jakartaee-platform-dev]
[External] : Re:
Jakarta TCK package
naming convention
Just
provide a quick
update on this
thread. We discussed
the TCK namespace
again at today's
Jakarta Platform
call. The conclusion
for the tck
namespace is as
follows.
oGeneral
agreement that
‘jakarta’
namespace
(starting with
‘jakarta’) must be
avoided in EE10
TCKs
oAny
non-’jakarta’
namespace is ok
for EE10
p.s.
I started a vote
to get one TCK
package namespace
(ee.jakarta.tck.[spec]) approved by the Jakarta spec committee, which
will be concluded
tomorrow. I will
share the result
then. If that
package name is
approved, it can
be used to replace
the jakarta.* in
EE 10 TCKs.
Thanks
for sharing your
thoughts! You
are heard:o. I
see you have
concerns with
the new package
of
ee.jakarta.tck.[spec].
From my
understanding,
ee.jakarta is
trying to say
Jakarta EE.
Jakarta EE
includes the
part of SE e.g.
Jakarta CDI is
under Jakarta EE
but it also
contains the
part CDI SE,
When it comes to
names, it is
almost
impossible to
make everyone
happy. It is
like people's
names. Different
people might
have different
opinions towards
a particular
name. If we
clearly document
ee.jakarta means
Jakarta EE and
it carries no
other meaning,
it might clarify
some doubts.
What
do other people
think?
Thanks
Emily
On
Thu, Jan 13,
2022 at 12:17 PM
Scott Marlow
<smarlow@xxxxxxxxxx>
wrote:
The
name change
impacts the
new tests
starting with
jakarta.*
(polls were
used to figure
out a name).
The overall
TCK buckets
should not be
affected. As
for the voting
schedule, it
was suggested
on the mailing
list but no
one objected.
Besides, we
need to come
to a quick
conclusion due
to the Jakarta
EE 10
train, so the
survey was
shorter than
others.
Hi
Emily,
People
were still
trying to be
heard that
seemed to be
ignored during
the
discussion.
Also
the vote ended
before we
reached a
conclusion on
which problem
needs to be
solved.
I
agree that
this mostly
impacts new
Standalone
TCKs but IMO
the most
popular choice
doesn't sound
right
appropriate
for Standalone
TCKs that test
both SE + EE.
:(
Anyway,
do you agree
that TCKs only
should avoid
using jakarta
as the initial
package
prefix?
I'm
not personally
against
picking a
standard TCK
package name
prefix for new
TCK tests.
One
possible
package name
prefix could
be
<spec>.tck
but I am sure
there other
options like
the ones you
mentioned that
don't have EE
in them that
could be
meaningful for
both SE + EE.
Thanks
for listening
to my feedback
:)
Scott
Thanks
Emily
L
On
Thu, Jan 13,
2022 at 9:44
AM Scott
Marlow <smarlow@xxxxxxxxxx> wrote:
In
summary, we
should avoid
using Jakarta
as the first
prefix in the
package name
of certain non
spec api
classes like
TCKs. The
reason being
that some EE
implementations
may be
filtering spec
api classes by
simply
checking for
"jakarta.*"
classes as
part of
application
deployment
processing.
I'm
still unsure
of the EE 10
schedule cost
for this
change. I
suggest that
we make the
package change
after other
TCK changes
are merged so
that there is
less delay
caused by this
change (e.g.
goal being to
minimize
breaking other
in progress
TCK work).
In
future
community
polls, we
should allow
more time for
input so that
more community
users can
participate.
I'm
not sure if
the choice to
use ee.jakarta.tck.[spec] will help any Standalone TCKs but if yes, you
now have the
option to use
it.
Historically,
we use EE for
Jakarta EE TCK
tests but not
consistently,
even less
consistently
now since all
newly added
tests might
start with EE.
Thank you
all for
who have
voted! Survey
result from
the community
for the TCK
package names
is as follows.
29
responses:
package
name: votes
==================
ee.jakarta.tck.[spec]:
14
tck.jakarta.[spec]:
7
org.eclipse.jakarta.tck.[spec]:
8
org.jakartatck.[spec]:
0
The clear
winner is
ee.jakarta.tck.[spec].
The NEW Jakarta
TCKs in
Jakarta EE 10
can start
adopting this
package name
if their
current
package names
are
jakarta.*.
To make
this vote
formal, I was
asked to start
a ballot on
the Spec
committee to
get this
community-chosen
package name ee.jakarta.tck.* formally
approved by
the committee.
I'll start
that process
momentarily.
Thank you
all for
who have
voted! Survey
result from
the community
for the TCK
package names
is as follows.
29
responses:
package
name: votes
==================
ee.jakarta.tck.[spec]:
14
tck.jakarta.[spec]:
7
org.eclipse.jakarta.tck.[spec]:
8
org.jakartatck.[spec]:
0
The clear
winner is
ee.jakarta.tck.[spec].
TheNEW Jakarta
TCKs in
Jakarta EE 10
can start
adopting this
package name
if their
current
package names
are
jakarta.*.
To make
this vote
formal, I was
asked to start
a ballot on
the Spec
committee to
get this
community-chosen
package nameee.jakarta.tck.*formally
approved by
the committee.
I'll start
that process
momentarily.
Do
we know how
long one needs
to wait to get
recommended
package name
OR
is it expected
that the
project teams
choose
something and
repeat the
exercise for
EE 11 once the
recommendation/requirement is in place?
Thevotewill
be closed on
9:21am Pacific
Wednesday 12th
Jan. You can
find the
current
responsehere.
You can
already see
the potential
winner there.
By the way, if
you choose
something not
starting with
jakarta.*, you
can stick to
it for future
releases. The
new naming
convention
applies to the
new TCKs from
Jakarta EE 11
onwards. Any
existing TCKs
are not
required to be
updated.
On
1/11/22 7:51
PM, Scott
Marlow wrote:
>
> On
1/11/22 1:04
PM, Scott
Stark wrote:
>> The
issue for EE10
is if TCKs are
delivering
application
deployments
>> under
the jakarta.*
package
namespace,
which
implementation
will
>>
challenge this
as invalid?
>>
>>
Historically
(Jakarta EE 9
and earlier),
tck
deployments
were under a
>>
vendor
specific
package
namespace,
com.sun.*,
org.jboss.*,
etc.
>>
>> The
short term
issue is
whether the
use of
jakarta.*
package
>>
deployments is
going to cause
problems with
getting
sufficient
>>
compatible
implementations
certified.
>
>https://github.com/eclipse-ee4j/jaxrs-api/issues/1081asks
for input on
> the
schedule
impact of
changing the
new RESTful
Web Services
TCK tests
> from
jakarta
package to
something that
doesn't start
with the
jakarta
> package.
>
> I'm
curious what
the schedule
impact would
be for the new
JSON Binding +
> JSON
Processing
TCKs to not
use the
jakarta
package name
in test
classes?
If you ask me
and assuming
current target
(end of Feb),
then from the
high level
perspective,
there are
still about 6
weeks to do
the work
which looks
fine, even
though it is
not clear to
what exactly
the
package is
expected to be
changed yet.
Just keep in
mind that
those who
are expected
to do the work
are supposed
to handle
other projects
(specs, impls,
TCKs) as well,
so more time
they spend on
this, less
time
they'll have
for other
stuff and that
other stuff
may not meet
the
currently
defined
deadline.
Do we know how
long one needs
to wait to get
recommended
package name
OR
is it expected
that the
project teams
choose
something and
repeat the
exercise for
EE 11 once the
recommendation/requirement is in place?