@ facesconverter / War-Packaged 앱의 유효성 검사기에서 EntityManager / EJB 가져 오기

StackOverflow https://stackoverflow.com/questions/3284639

문제

EJB 3.1 (앱은 WAR로 포장 함)에서 GlassFish V3.0.1에서 실행되는 JavaEe6 응용 프로그램이 있으며 모든 EJB는 @localbeans입니다. 현재 JSF2에서 사용하기 위해 FacesConverter를 작성하고 있습니다. 이는 EntityManager가 ID에서 엔터티를 다시 가져올 수 있습니다.

이제는 best 인 facesconverter 안에 EntityManager를 얻는 가장 깨끗한 방법이며, 이제 우리는 Jee6에 있다는 것을 궁금합니다.또는 표현식 언어를 통해 EJB에 액세스 할 수도 있습니까?WELD / CDI는 FacesConverter 내부에서 작동하지 않거나 그렇습니다.

@FacesConverter(value="subscriptionListConverter")
class SubscriptionListConverter extends Converter {
  public Object getAsObject(FacesContext ctx, UIComponent comp, String value) {
    var id:Long = Long.parseLong(value);
    // How to get the entitymanager?
    return em.find(User.getClass, id);
  }

  public String getAsString(ctx:FacesContext, comp:UIComponent, value:Object) {...}
}
.

죄송합니다. 이것이 복제가 없기를 바랍니다. 그러나 대부분의 경우 약간 다른 곳에서 보았습니다.

도움이 되었습니까?

해결책 2

OK 주위를 시도한 후에는 수동 조회가있는 EJB를 성공적으로 얻었습니다.

Context ctx = new InitialContext();
UserEJB userEJB = (UserEJB) ctx.lookup("java:global/teachernews/" + UserEJB.class.getName())
.

는 괜찮아 보이지만 어쨌든 다른 흥미로운 접근 방식이 있으면 자유롭게 게시하십시오.

다른 팁

또한 수동 조회를 사용하고 있지만 Converter 인터페이스를 구현하는 추상 클래스를 만들고 다른 변환기로 확장하고 EJB를 가져올 방법을 갖게했습니다.다른 앱에서 재사용하려면 AppName 및 웹 모듈 이름을 얻으려면 다음을 수행했습니다.

abstract public class Converter implements javax.faces.convert.Converter
{
    public Object getManager(String jndiName) throws NamingException
    {
        ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
        Context env = new InitialContext();
        String aname = (String)env.lookup("java:app/AppName");
        if (aname == null || aname.length() == 0 || servletContext.getContextPath().equals(aname)) //FIXME If deploying war inside an ear, appname equals module name, won't work.
            return env.lookup("java:global/" + aname + "/" + jndiName);
        else
            return env.lookup("java:global/" + aname + servletContext.getContextPath() + "/" + jndiName);
    }
}
.

방금 @ejb를 사용하여 내 변환기에 주입했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top