пн, 5 дек. 2022 г. в 23:32, Christopher Schultz <[email protected]>:
>
> All,
>
> I've started looking at the migration path at $work for Jakarta EE and
> while Tomcat 10 has some fantastic features to help with that (hot
> migration is killer IMO), there are still some potential barriers I'm
> seeing to "slowly" migrating $work applications from Java EE -> Jakarta EE.
>
> When I say "slowly", I mean "not having to write one or more large
> revision-control changes to lock-step-upgrade from e.g. Tomcat 8/9 to
> Tomcat 10.1."
>
> One specific example is that we use Apache Velocity as our
> page-generation language and AIUI, these templates will not have their
> text scanned and replaced with updated strings. For example:
>
> #if($request.getAttribute('javax.servlet.error.request_uri'))
> ...
> #end
>
> [... skipped]
>
> I can think of a few ways to facilitate a dual-deployment (Tomcat 8/9 vs
> 10 aka Java EE vs Jakarta EE) application, at least for the specific
> example I present above:
>
> [... skipped]
6. I think that Migration Tool can be updated to change string
constants such as the above one.
There is a limited set of those names, and I expect them to always
appear as a whole string among string constants.
Going into java/javax/servlet of Tomcat 9 and running a search for `"javax.`,
except '.LocalStrings"' l10n resources names:
grep --line-number --recursive '"javax.' | grep --invert-match
'.LocalStrings"' - >../found.txt
I get the following 36 lines:
[[[
AsyncContext.java:30: "javax.servlet.async.request_uri";
AsyncContext.java:36: "javax.servlet.async.context_path";
AsyncContext.java:42: "javax.servlet.async.mapping";
AsyncContext.java:48: "javax.servlet.async.path_info";
AsyncContext.java:54: "javax.servlet.async.servlet_path";
AsyncContext.java:60: "javax.servlet.async.query_string";
jsp/PageContext.java:139: public static final String PAGE =
"javax.servlet.jsp.jspPage";
jsp/PageContext.java:145: public static final String PAGECONTEXT =
"javax.servlet.jsp.jspPageContext";
jsp/PageContext.java:151: public static final String REQUEST =
"javax.servlet.jsp.jspRequest";
jsp/PageContext.java:157: public static final String RESPONSE =
"javax.servlet.jsp.jspResponse";
jsp/PageContext.java:163: public static final String CONFIG =
"javax.servlet.jsp.jspConfig";
jsp/PageContext.java:169: public static final String SESSION =
"javax.servlet.jsp.jspSession";
jsp/PageContext.java:174: public static final String OUT =
"javax.servlet.jsp.jspOut";
jsp/PageContext.java:180: public static final String APPLICATION =
"javax.servlet.jsp.jspApplication";
jsp/PageContext.java:187: public static final String EXCEPTION =
"javax.servlet.jsp.jspException";
RequestDispatcher.java:47: static final String FORWARD_REQUEST_URI
= "javax.servlet.forward.request_uri";
RequestDispatcher.java:58: static final String FORWARD_CONTEXT_PATH
= "javax.servlet.forward.context_path";
RequestDispatcher.java:69: static final String FORWARD_MAPPING =
"javax.servlet.forward.mapping";
RequestDispatcher.java:80: static final String FORWARD_PATH_INFO =
"javax.servlet.forward.path_info";
RequestDispatcher.java:91: static final String FORWARD_SERVLET_PATH
= "javax.servlet.forward.servlet_path";
RequestDispatcher.java:102: static final String
FORWARD_QUERY_STRING = "javax.servlet.forward.query_string";
RequestDispatcher.java:114: static final String INCLUDE_REQUEST_URI
= "javax.servlet.include.request_uri";
RequestDispatcher.java:126: static final String
INCLUDE_CONTEXT_PATH = "javax.servlet.include.context_path";
RequestDispatcher.java:138: static final String INCLUDE_PATH_INFO =
"javax.servlet.include.path_info";
RequestDispatcher.java:150: static final String INCLUDE_MAPPING =
"javax.servlet.include.mapping";
RequestDispatcher.java:162: static final String
INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path";
RequestDispatcher.java:174: static final String
INCLUDE_QUERY_STRING = "javax.servlet.include.query_string";
RequestDispatcher.java:184: public static final String
ERROR_EXCEPTION = "javax.servlet.error.exception";
RequestDispatcher.java:194: public static final String
ERROR_EXCEPTION_TYPE = "javax.servlet.error.exception_type";
RequestDispatcher.java:204: public static final String
ERROR_MESSAGE = "javax.servlet.error.message";
RequestDispatcher.java:214: public static final String
ERROR_REQUEST_URI = "javax.servlet.error.request_uri";
RequestDispatcher.java:224: public static final String
ERROR_SERVLET_NAME = "javax.servlet.error.servlet_name";
RequestDispatcher.java:234: public static final String
ERROR_STATUS_CODE = "javax.servlet.error.status_code";
ServletContext.java:58: public static final String TEMPDIR =
"javax.servlet.context.tempdir";
ServletContext.java:66: public static final String ORDERED_LIBS =
"javax.servlet.context.orderedLibs";
]]]
7. If you look into implementation of
org.apache.catalina.connector.Request#getAttibute(...), you will see
the following:
[[[
public Object getAttribute(String name) {
// Special attributes
SpecialAttributeAdapter adapter = specialAttributes.get(name);
if (adapter != null) {
return adapter.get(this, name);
}
]]]
I think that this feature could be leveraged to provide mappings for
the legacy attribute names.
Best regards,
Konstantin Kolinko
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]