Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jakarta support (as java21 version) #22

Open
jflute opened this issue Jul 25, 2024 · 2 comments
Open

Jakarta support (as java21 version) #22

jflute opened this issue Jul 25, 2024 · 2 comments
Assignees

Comments

@jflute
Copy link
Contributor

jflute commented Jul 25, 2024

// Japanese here

*概要
JakartaサポートしたバージョンをJava21コンパイルでリリースする。
他のLastaFluteプロダクトと足並み合わせてやる。

*課題1

Jakarta対応するためには、Thymeleaf3に対応しないといけないんじゃない?
いやぁ、やっぱりそうだよね(><

Thymeleaf 3.1 adds support for the new jakarta.* class namespace in the Servlet API since version 5.0, without removing support for the javax.* classes in previous versions.

https://www.thymeleaf.org/doc/articles/thymeleaf31whatsnew.html

Thymeleaf3対応は一度挫折しているので、これは厳しいかも...

すでにThymeleaf3対応してリリース済みだった、忘れてた(><

*課題2
でもどのみち、WebContextのコンストラクターの引数が変わっているので、3.1対応をしないといけない。

return new WebContext(request, response, servletContext, locale);

↑これが、IWebExchange 引数に変わっておる。
JakartaServletWebExchangeをnewすれば良いのだろうか?

*課題3
ServletContextTemplateResolverがjavax前提のクラスになっていて利用できない。
ITemplateResolverになる代わりのクラスを利用しないといけないかな?

WebApplicationTemplateResolverかな?

@jflute jflute self-assigned this Jul 25, 2024
@jflute
Copy link
Contributor Author

jflute commented Jul 25, 2024

*課題2

JakartaServletWebExchangeをnewすれば良いのだろうか?

JakartaServletWebApplicationはnewできない。パッケージスコープで隠されている。
JakartaServletWebApplicationがnewしているが、このクラスのインスタンスは勝手にnewしていいのか?

お試し実装。果たしてこれでいいのか?

protected WebContext createTemplateContext(RequestManager requestManager) {
    final HttpServletRequest request = requestManager.getRequest();
    final HttpServletResponse response = requestManager.getResponseManager().getResponse();
    final ServletContext servletContext = request.getServletContext();
    final IServletWebExchange exchange = createWebExchange(request, response, servletContext);
    return newWebContext(exchange, requestManager.getUserLocale());
}

protected IServletWebExchange createWebExchange(HttpServletRequest request, HttpServletResponse response,
        ServletContext servletContext) {
    final JakartaServletWebApplication application = JakartaServletWebApplication.buildApplication(servletContext);
    return application.buildExchange(request, response);
}

protected WebContext newWebContext(IServletWebExchange exchange, Locale locale) {
    return new WebContext(exchange, locale);
}

@jflute
Copy link
Contributor Author

jflute commented Jul 25, 2024

*課題3

ITemplateResolverになる代わりのクラスを利用しないといけないかな?
WebApplicationTemplateResolverかな?

これでいいのかな?

protected ITemplateResolver createTemplateResolver() {
    final WebApplicationTemplateResolver resolver = createWebApplicationTemplateResolver();
    resolver.setPrefix(getHtmlViewPrefix());
    resolver.setTemplateMode(getTemplateMode());
    resolver.setCharacterEncoding(getEncoding());
    resolver.setCacheable(isCacheable());
    return resolver;
}

protected WebApplicationTemplateResolver createWebApplicationTemplateResolver() {
    final ServletContext servletContext = LaServletContextUtil.getServletContext();
    final JakartaServletWebApplication webApplication = JakartaServletWebApplication.buildApplication(servletContext);
    return newWebApplicationTemplateResolver(webApplication);
}

protected WebApplicationTemplateResolver newWebApplicationTemplateResolver(IWebApplication webApplication) {
    return new WebApplicationTemplateResolver(webApplication);
}

JakartaServletWebApplicationをまたnewしてるけど、ただのラッパーっぽいから別にインスタンスを共有しなくても問題なさそうではある。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant