War-Packaged Appの@ facesconverter / validatorの内側にEntityManager / EJBを取得する

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

質問

私はGlassFish v3.0.1でjavaee6-applicationを持っています.JB 3.1(アプリは戦争としてパッケージ化されています)、そして私のEJBはすべて@localbeansです。 現在、JSF2で使用するためのFacesconverterを書いています。

今、私たちがFacesconverterの中にEntityManagerを入手するための最高のと最もきれいな方法です。あるいは表現言語を通してEJBにアクセスすることができますか?そして溶接/ 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())
.

は大丈夫に見えますが、とにかく他の興味深いアプローチがある場合は、それらを投稿してください。

他のヒント

手動検索を使用していますが、抽象クラス実装コンバータインタフェースを作成し、さまざまなコンバータに拡張し、EJBを取得する方法がありました。別のアプリで再利用するには、AppNameとWebモジュール名を取得するには次のことを行いました。

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