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 JSF integration #261

Open
dstutz opened this issue Jul 3, 2023 · 8 comments
Open

Jakarta JSF integration #261

dstutz opened this issue Jul 3, 2023 · 8 comments

Comments

@dstutz
Copy link

dstutz commented Jul 3, 2023

Is there any chance of publishing a version of the JSF integration built against the jakarta version the JSF API?

@lincolnthree
Copy link
Member

lincolnthree commented Jul 11, 2023

Hey @dstutz thanks for the issue. Short answer, yes, but I don't have a ton of time at the moment. I would welcome a PR for this, which would make it much easier to put out a new version quickly. In the mean time it's fairly simple to create a converter:

You can use this as a guide, then register it using @FacesConverter or via faces-config.xml:
https://github.com/ocpsoft/prettytime/blob/master/jsf/src/main/java/org/ocpsoft/prettytime/jsf/PrettyTimeConverter.java
https://github.com/ocpsoft/prettytime/blob/master/jsf/src/main/resources/META-INF/faces-config.xml

Let me know if this helps?

@dstutz
Copy link
Author

dstutz commented Jul 13, 2023

Yup, that is almost effortless to do on my own.

As far as a PR, again, doesn't seem like much work so I cloned the repo and I get test failures on core module (internationalization tests) attempting to build master (and 5.0.7.Final). I tried on 2 different machines:

Windows 10 - openjdk version "17.0.7" 2023-04-18
OpenJDK Runtime Environment Temurin-17.0.7+7 (build 17.0.7+7)
OpenJDK 64-Bit Server VM Temurin-17.0.7+7 (build 17.0.7+7, mixed mode, sharing)
Tests run: 1116, Failures: 121, Errors: 0, Skipped: 6

Gentoo Linux - openjdk version "17.0.6" 2023-01-17
OpenJDK Runtime Environment Temurin-17.0.6+10 (build 17.0.6+10)
OpenJDK 64-Bit Server VM Temurin-17.0.6+10 (build 17.0.6+10, mixed mode, sharing)
Tests run: 1116, Failures: 154, Errors: 0, Skipped: 6

I'm assuming I'm missing something here...

@lincolnthree
Copy link
Member

Sorry for the delay. Summer stuff... That's weird. Send the PR and I'll check it out. I think JDK 8 compilation works. But something changed in 11+ that makes some of the micro-time stamps higher precision and we haven't accounted for that (the outputs of the lib are still accurate). But tests freak out.

@csyperski
Copy link

Has a Jakarta version been released? Everything I'm seeing still references Javax.faces.context.*

@lincolnthree
Copy link
Member

Haven't gotten the PR on this yet, but would love to get this done! If someone wants to get it started and switch over all the imports. I'll try to take it over the finish line.

@dstutz
Copy link
Author

dstutz commented Jul 18, 2024

@lincolnthree I'm taking another look at this and while I'm still having some strange build errors, I'm just working past it at the moment.

So far it looks like need to add

<dependency>
  <groupId>jakarta.faces</groupId>
  <artifactId>jakarta.faces-api</artifactId>
  <version>3.0.0</version>
  <scope>provided</scope>
</dependency>

to the prettytime-parent pom managed dep

then change the imports from

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

to

import jakarta.faces.component.UIComponent;
import jakarta.faces.context.FacesContext;
import jakarta.faces.convert.Converter;
import jakarta.faces.convert.ConverterException;

for the PrettyTimeConverter.

As far as packaging...I'm not sure how to go about this. Do you want another module and name this one something different like prettytime-integration-jsf-jakarta? Can use the same package/class name so the block should work exactly the same. Do you want a different package/class name? Personally I'd love to be able to just add a classifier to the dep and have it pull in the other jar but I'm not sure how to structure that (haven't really looked into it yet).

Thoughts?

@dstutz
Copy link
Author

dstutz commented Jul 18, 2024

Might have found a much easier way of going about this ripping off some ideas from other projects in this arena. Can make a jakarta classifier version of the jar where it transforms the javax.faces -> jakarta.faces. Just need to test it out.

@dstutz
Copy link
Author

dstutz commented Jul 18, 2024

Ok...appears to work? I had to add the block to faces-config and use the <f:converter converterId="org.ocpsoft.PrettyTimeConverter"/> style...but it works in a Jakarta EE 10 app.

So essentially all you need to do is add the following to the prettytime-integration-jsf module:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.6.0</version>
                <executions>
                    <execution>
                        <id>jakarta</id>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <minimizeJar>false</minimizeJar>
                            <shadedArtifactAttached>true</shadedArtifactAttached>
                            <shadedClassifierName>jakarta</shadedClassifierName>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <artifactSet>
                                <includes>
                                    <include>${project.groupId}:${project.artifactId}</include>
                                </includes>
                            </artifactSet>
                            <relocations>
                                <relocation>
                                    <pattern>javax.faces</pattern>
                                    <shadedPattern>jakarta.faces</shadedPattern>
                                </relocation>
                            </relocations>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Now we just need to support more than Date in this guy....

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

3 participants