2010-07-19 4 views
1

Glassfish v3.0.1에서 EJB 3.1 (app는 WAR로 패키지 됨)에서 실행되고 모든 EJB는 @LocalBeans입니다. 현재 JSF2에서 사용하기 위해 FacesConverter를 작성하고 있습니다.이 인터페이스에서는 ID에서 Entity를 다시 가져 오기 위해 EntityManager가 필요합니다.WAR 패키지 패키지의 @ FacesConverter/Validator 내에 Entitymanager/EJB 가져 오기

이며, FacesConverter 내부에서 Entitymanager를 가져 오는 가장 깨끗한 방법은 궁금합니다. 지금 JEE6에 있습니다. 아니면 Expression Language를 통해 EJB에 액세스 할 수 있습니까? Welds/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) {...} 
} 

미안하지만 이것은 중복이 아니기를 바라지 만, 대부분의 경우 나는 약간 다른 점을 보았고 많은 도움이되지 못했습니다. 주위에 노력하고 일부 후

답변

0

좋아, 내가 성공적으로 수동 검색과 EJB 가지고 :

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

이 좋아 보이는,하지만 다른 흥미있는 방법이 있다면 어쨌든, 그들을 게시 주시기 바랍니다.

1

나는 또한 수동 조회를 사용하고 있지만 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); 
    } 
} 
0

방금 ​​변환기에 @EJB를 삽입했습니다.

+0

AFAIK 이는 Seam Faces에서만 작동해야하지만 컨버터 없이는 주입을 지원하지 않습니다. 적어도 내 질문에 언급 된 구성에서. – ifischer

관련 문제