2013-07-30 20 views
5

Glassfish 4.0 kullanarak bir REST uygulaması geliştiriyorum.GlassFish 4 + JAX-RS Filtre ile @EJB

öz kaynak sınıfları I enjeksiyon sınıfı @Stateless yapma ve (enjekte edilen sınıfı, durum bilgisi EJB) @EJB ile enjekte edilmesi ile çalışmak için olabilir. Bununla birlikte, bu yaklaşım bir JAX-RS filtresinde çalışmıyordur. Enjeksiyon yapamıyorum. Aşağıda

bakınız kodu:

@Provider 
public class UpdateFilter implements ContainerRequestFilter { 

    @EJB 
    private MyBeanInterface doStuffBean; 

    @Override 
    public void filter(ContainerRequestContext requestContext) { 

     ... 
    } 
} 

doStuffBean her zaman sıfırdır.

herhangi bir öneriniz?

cevap

1

@EJB'nin yalnızca diğer EJB'ler ve Servletler gibi Java EE tarafından yönetilen sınıflarda çalıştığına inanıyorum.

bunun yerine @ Enjekte ek açıklama kullanabilirsiniz CDI ancak bu sınıf bir ManagedBean değilse o zaman bir arama yapmak gerekecektir.

+0

@Inject çalışmıyor. Bir istisna kaldırıldı: ** UnsatisfiedDependencyException: Enjeksiyon için uygun bir nesne yoktu ... **. – bafitor

+0

Çünkü sınıfınız yönetilen bir fasulye değil. Bu Sağlayıcıya bir ManagedBean yapabileceğinden emin değilim, bu yüzden muhtemelen EJB araması yapan kendi yapımınızı yaratmanız gerekecek ve sonra herhangi bir yere enjekte edebilirsiniz (bunun nasıl yapılacağını gösteren çok sayıda makale var) ya da Bu sınıfta sadece arama yapabilirsiniz. – ZeusSelerim

0

deneyin @ Enjekte tarafından @ManagedBean ve @EJB tarafından @Stateless değiştirerek CDI kullanmak. Bu benim için JAX-RS'de çalışıyor. Eğer enjeksiyon dışında şeyler için EJB gerekirse çift ek açıklama @Stateless @ManagedBean tutmak için

işe yarayabilir.

+0

Her iki çözümü de denedim, ancak çalışmıyor. Ben bir ** UnsatisfiedDependencyException var: enjeksiyon için uygun bir nesne yoktu. Herhangi bir fikir? – bafitor

+1

Bunu daha önce GF3 ile görmedim, muhtemelen GF4'teki bir problem. https://java.net/jira/browse/GLASSFISH-20597, v4.0.1'de sabit olduğunu söylüyor - kullandığınız sürüm bu mu? Değilse, http://stackoverflow.com/questions/16216759/dependency-injection-with-jersey-2-0 adresindeki geçici çözüm önerilerinden bazılarını deneyebilirsiniz. @Stateless'i kaldırmayı denediniz mi, yoksa ihtiyacınız var mı? – TheArchitect