2013-12-03 38 views
6

RESTful hizmetleri olan bir proje üzerinde çalışıyorum. Web katmanı, iş katmanı ve benzeri modüllerim var. Temel api katmanını (jarse kullanarak) ekledim ve get isteği için temel yanıtı alıyorum. Şimdi onu iş katmanına bağlamalıyım. Ben googling oldu ama her çözümlerimi projeme nasıl uygulayacağından emin değilim.İş katmanından jarse ile temel bağımlılık enjeksiyonu

Bu gezi için benim kaynak sınıftır:

@Path("trip") 
public class TripResource { 

    @Context 
    private UriInfo context; 
    @Inject 
    private AdminService adminService; 

    public TripResource() { 
    } 

    @GET 
    @Produces("text/plain") 
    public List<TripDTO> getText() { 
     return adminService.listAllTrips(); 
    } 

} 

ve bu kaynaklar sınıfları eklemek için kullanın:

@javax.ws.rs.ApplicationPath("api") 
public class ApplicationConfig extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); 
     addRestResourceClasses(resources); 
     return resources; 
    } 
    private void addRestResourceClasses(Set<Class<?>> resources) { 
     resources.add(cz.infi.javatravelagency.ServiceResource.class); 
     resources.add(cz.infi.javatravelagency.TripResource.class); 
    } 
} 

Benim pom.xml:

<name>JavaTravelAgency - Api module</name> 
    <dependencies> 
     <dependency> 
      <groupId>cz.infi</groupId> 
      <artifactId>javatravelagency-business</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-moxy</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>7.0</version> 
      <type>jar</type> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <!-- Java language version --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>6</source> 
        <target>6</target> 
       </configuration> 
      </plugin> 
      <!-- Servlet 3.0 without web.xml --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

Denedim answer in this link'u izleyin. Ve ekledim:

public class MyApplicationBinder extends AbstractBinder { 
    @Override 
    protected void configure() { 
     bind(AdminServiceImpl.class).to(AdminService.class); 
    } 
} 

ve şimdi takılıyorum.

Bu ciltleyiciyi yapılandırma sınıfıma nasıl ekleyebilirim? Başka hiçbir teknoloji kullanmadan en kolay uygulama nedir?

cevap

9

bu da bana çok zaman harcadı.

aşağıdaki deneyin: burada açıklandığı şekilde

  1. projenize bir hK2 Binder ekleyin: Burada https://jersey.java.net/documentation/latest/migration.html

iş mantığına bağlama eklemek zorunda. Bunu zaten yaptınız (tam olarak eklendiniz).

e. g.

public class MyBinder extends AbstractBinder { 

    @Override 
    protected void configure() { 
     // request scope binding 
     bind(MyInjectablePerRequest.class) 
       .to(MyInjectablePerRequest.class) 
       .in(RequestScope.class); 
     // singleton binding 
     bind(MyInjectableSingleton.class).in(Singleton.class); 
     // singleton instance binding 
     bind(new MyInjectableSingleton()).to(MyInjectableSingleton.class); 
    } 
} 

O zaman buraya gibi bağlayıcı projenize bir "ResourceConfig" sınıfını eklemek ve kayıt: http://sleeplessinslc.blogspot.de/2012/10/jax-rs-20-jersey-20-preview-example.html

Durumda da basitçe yerine ApplicationConfig ait ResourceConfig adresinin ApplicationConfig uzatmak olabilir (bu ne yaptım) . "GetClasses()" da kayıtlı tüm sınıflar aşağıda açıklanacaktır.

e. g.

/** 
* Application config 
*/ 
public class ApplicationConfig extends ResourceConfig { 

    public ApplicationConfig() { 
     register(SomeResources.class, SomeProviders.class); 

     // Register different Binders 
     addBinders(new MyBinder()); 
    } 
} 

En azından, web.xml'inizin yapılandırmayı kullandığından emin olun. Bu, kurulumunuza bağlıdır (glassfish, sunucu v1/v2, vb.)

Daha önce ApplicationConfig sınıfını kullandığınız için, zaten doğru ayarları kullandığınız için iyi bir olasılık.Yine burada

bir örnek: Bu yardımcı olacaktır

<servlet> 
    <servlet-name>om.example.package.to.your.config.ApplicationConfig</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.example.package.to.your.config.ApplicationConfig</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Umut; şu anda)

Selamlar Ben


Bulunan benzer mesaj: Dependency injection with Jersey 2.0

-5

Kayıt olmanız gerekiyor Jersey'le kaynak sınıfımız. Başvurunuz MyApplication adlı, o zaman yapabileceğiniz Yani

web.xml dosyada Ayrıca
public class MyApplication extends ResourceConfig { 

    /*Register JAX-RS application components.*/ 
    public MyApplication() { 
     register(TripResource.class); 
    } 
} 

, servlet kaba MyApplication ekleyin:

<servlet> 
    <servlet-name>SpringApplication</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>mypackage.MyApplication</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Bahar DI ile Jersey kullanarak basit bir örnek olabilir here bulundu.

İlgili konular