2012-03-27 16 views
8

EJB 3.1 kullanırken Adam Bien's blogunda bir makale okurken java'da yeni bir özellik keşfettim. Durum şu ki, Stateless ve Singleton çekirdekleri kök kaynaklar olarak açığa çıkarılabilir. Ama nasıl? Ben öyle yapmaya çalıştım: EJB 3.1 REST Web Hizmeti olarak nasıl gösteriliyor?

@Stateless 
@LocalBean 
@Path("Hybrid") 
public class RESTEJBSample { 

    @GET 
    @Path("/demo") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String something() { 
     return "I am a Hybrid!!!"; 
    } 

} 

i URL'yi http://localhost:8080/HybridSample/resources/Hybrid/demo diyoruz

i 404 hatası alıyorum.

Appart bu

ve sadece JAXRS projeme çalışıyor olduğundan emin olmak için, ben iyi çalışıyor eğer sadece test etmek için basit pojo bir kaynak oluşturmuştur. İşte

@Path("/genericresource") 
public class GenericResource { 
    @GET 
    @Path("/samplemethod") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String saySomething() { 
     return "Something!"; 
    } 
} 

i Düzgün çalışır URL'yi http://localhost:8080/HybridSample/resources/genericresource/samplemethod çağırdığınızda!

Yani benim sorular şunlardır: Benim EJB eksik ne

  • böyle sınıf GenericResource yapıyor gibi bir web hizmeti kaynak olarak çalışabilir böylece?

  • Bazı ek yapılandırma gerekli mi? Bir web hizmeti olarak EJB kullanırken

  • sınırlamalar nelerdir?

cevap

11

bu NetBeans tutorial about Jersey RESTFul web services göre,

javax.ws.rs.core.Application bir alt sınıfını oluşturmak için karar verebilirsiniz, tüm istirahat kaynakları otomatik olarak bu sınıfın (Java tarafından tescil edilecektir EE 6)

veya

varsayılan JERS oluşturmak web.xml içinde ey REST sunucu adaptörü. bir EJB olduğu gibi

<servlet> 
    <servlet-name>ServletAdaptor</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ServletAdaptor</servlet-name> 
    <url-pattern>/resources/*</url-pattern> 
</servlet-mapping> 

son derece faydalı, benim deneyim, sizin DİNLENME Web hizmetini maruz:

Hep senin web.xml bu eklenmesini içeren ikinci bir seçim, kullandık. İstediğiniz yere enjekte edebilir, EntityManager'ınıza enjekte edebilir ve hatta bazı basit durumlarda DAO olarak kullanabilirsiniz. Onlar savaş dosyasında dağıtılan olsun ya da olmasın, EJB kabı çalıştırmak kurumsal fasulye:

özellikleri ve sınırlamaları hakkında soru/yorum ilgili. Java EE 6 Eğitimi'nin this section numaralı açıklamasında açıklandığı gibi bir JMS ConnectionFactory'a kaynak olarak enjekte edebilirsiniz. Bir ConnectionFactory'nin enjeksiyonu sayesinde, JMS mesajlarını gönderebilirsiniz. JMS iletilerini eşzamansız olarak almak isterseniz, yukarıda belirtilen eğiticinin this section numaralı açıklamasında açıklandığı gibi bir Message-Driven Bean tanımlamanız gerekir. Hiçbir zaman MessageListener arayüzünü uygulamak için bir Jersey web servisi için kullanılan aynı EJB'yi genişletmeyi denemedim, ama bunun mümkün olabileceğini düşünüyorum (eğer olmasaydı, Jersey kökündeki Stateless fasulyenize bir MDB enjekte edebilirsiniz) .

Son olarak, Kapsayıcıyla Yönetilen işlemleri here açıklandığı gibi kullanabilirsiniz. Üstelik this NetBeans tutorial den:

uygulamanın Java İşlem API (JTA) (işleme type = "JTA") kullanacağı görebilirsiniz sahip olmak için. Bu, 'un kalıcılık bağlamındaki varlıkların yaşam döngüsünü yönetme sorumluluğunun konteynere atanmasını belirtir.

<persistence-unit name="em" transaction-type="JTA"> 
+0

i ilki :) web.xml seçeneğini bilmiyordum İyi de benim favoutity, zaten böyle şu anda benim web.xml lookl olduğunu. Ayrıca Netbeans IDE 'New-> Webservice'ı kullandım ve bir sihirbazın ardından Vatansız fasulye olarak web hizmeti oluşturduğunu belirten bir seçeneği işaretliyorum. Bu eklenen EJB .war dosyasına ekledi ve şimdi iyi çalışıyor. Örneğim şimdi iyi çalışıyor, ancak olayın arkasında ne olduğunu bilmek isterdim, Net Beans tarafından hangi dosyalar düzenleniyor? Ve ayrıca bu fasülyenin sınırlamaları nelerdir? Evet, bence bu gerçekten harika bir özellik. – sfrj

+0

NetBeans hiçbir şey eklemiyor: Yapmanız gereken tek şey, Stateless sınıfını (örneğinizde RESTEJBSample) ve web.xml dosyasındaki sunucu adaptörünü oluşturmaktır. Servlet perde arkasındaki tüm büyüyü yapıyor. Sınırlamalarla ilgili olarak, sanırım sorunuzu biraz açıklığa kavuşturmaya çalışmalısınız. – perissf

+0

Sınırlamaları derken, demek istediğim. Bu fasülyeler EJB-Modüllerinde konuşlandırıldıklarında aynı şekilde davranacak mı? Demek istediğim, manüel işlem yönetimine bir ihtiyaç var mı? JMS ile etkileşime girebilir mi? ... Şimdi EJB konteynerinde değiller, bir .war dosyasındalar. – sfrj

İlgili konular