どのよう者は入PersistenceContext時の走行試験を通してジャージー/ターズセンター?

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

質問

私はこのクラス(ミックスのJAX-RS/ジャージー、JPA/Hibernate):

public class Factory {
  @PersistenceContext(unitName = "abc")
  EntityManager em;
  @Path("/{id}")
  @GET
  public String read(@PathParam("id") int i) {
    return em.find(Employee.class, i).getName();
  }
}

このユニット試験:

public class FactoryTest extends JerseyTest {
  public FactoryTest() throws Exception {
    super("com.XXX");
  }
  @Test
  public void testReadingWorks() {
    String name = resource().path("/1").get(String.class);
    assert(name.length() > 0);
  }
}

べたちのものを除くす: emNULL 内部 read().ようになグリズリー(私が使っているこのサーバーとジャージー試験の枠組みは注入 PersistenceContext.なぜですか。

役に立ちましたか?

解決

べたちのものを除くす:emがNULLの場合は内部のread().ようになグリズリー(私が使っているこのサーバーとジャージー試験の枠組み)を注入すPersistenceContext.なぜですか。

  1. くなったグリズリー。
  2. なんなのか注入は対応して"の"ジャージー資源でもかまいませんが、結局(ポールドらしいものであるべき このスレッド が見られませんでしたが明確に証明する請求項.

では私の知る限りにおいて、最も簡単ないの掘EntityManager、EJB 3.1 状態セッション豆(SLSBを使用することによって直接て休資源による注釈でJAX-RS注釈).

別のオプションということは、JAX-RS資源、 管理ビーン 利用CDIた。このアプローチの TOTD#124:使用CDI+JPAとJAX-RS JAX-WS.

であると思いますので、組み込みGlassFish容器の容器としてごジャージ。

資源

他のヒント

私はのcom.sun.jersey /ジャージ-grizzly2 のバージョンの1.1 のための解決策を見つけました。私はのInjectableProvider のカスタムを実装しました。次のコードは、のOracle記事のから取得されます:

import javax.ejb.EJB;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ws.rs.ext.Provider;

import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;

@Provider
public class EJBProvider implements InjectableProvider<EJB, Type> {

    public Scope getScope() {
        return Scope.Singleton;
    }

    public Injectable getInjectable(ComponentContext cc, EJB ejb, Type t) {
        if (!(t instanceof Class)) return null;

        try {
            Class c = (Class)t;        
            Context ic = new InitialContext();

            final Object o = ic.lookup(c.getName());

            return new Injectable<Object>() {
                public Object getValue(HttpContext c) {
                    return o;
                }                    
            };            
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

私は少し私の環境に合うようにそれを適応しなければなりませんでした。また、プロバイダがそれ以外の場合は(それが記事のことを言っていない)ピックアップされることはありません。

、あなたのサービスクラスと同じパッケージになければならないことに注意してください
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top