Jakarta JSF integration
Opened this issue · 8 comments
Is there any chance of publishing a version of the JSF integration built against the jakarta version the JSF API?
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?
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...
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.
Has a Jakarta version been released? Everything I'm seeing still references Javax.faces.context.*
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.
@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?
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.
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....