Pertanyaan Java EE menggunakan metode produser menghasilkan 'WELD-001408 Unsisfisfied dependencies ..' exception


Hy sana,

Saya benar-benar segar ke Java EE dan CDI. Saya mencoba untuk membuat proyek percobaan untuk melakukan langkah pertama saya dengan JAX-RS dan CDI. Saya mengaktifkan CDI dengan menyediakan beans.xml. Selama saya menguji, saya menggunakan elemen bean-discovery-mode = "all". CDI tampaknya berfungsi dengan baik, karena saya berhasil menyuntikkan BeanManager ke dalam sumber daya pengujian saya dan saya dapat menghasilkan semua biji yang ditemukannya.

Saya mencoba menyuntikkan kelas yang disediakan oleh metode produser. Netbeans menunjukkan saya peringatan untuk bidang provideMe: Tidak ada yang memenuhi syarat untuk kacang injeksi yang ditemukan

Saat saya menerapkan aplikasi ke Glassfish, saya mendapatkan pengecualian pengelasan:

WELD-001408 Unsatisfied dependencies for type [ProvideMeInterface] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private com.test.rest.DataImport.provideMe]

Inilah kelas saya untuk tes kecil ini:

Antarmuka:

package com.test.orm;
public interface ProvideMeInterface
{
    int getCount();
}

Pelaksanaan:

package com.test.orm;
public class ProvideMeImpl implements ProvideMeInterface {

    int cnt;
    ProvideMeImpl(int cnt)
    {
        this.cnt = cnt;
    }

    @Override
    public int getCount() {
        return cnt;
    }
}

Produsen:

package com.test.orm;

import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.Produces;

public class ProvideMeProvider {

  @Produces
  @ApplicationScoped  
  public ProvideMeInterface produceFactory() {
      return new ProvideMeImpl(111);
  }
}

Sumber:

package com.test.rest;

import ...
...

@Path("rest/import")
public class DataImport {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Inject
    private ProvideMeInterface provideMe;

    @Inject
    BeanManager beanManager;

    public DataImport() {}

    @GET
    @Produces("text/html")
    public String getHtml() {
        return "<html><body><h1>IMPORT Resource: " + provideMe.getCount() + " </body></h1></html>";
    }
}

Ketika saya memulai aplikasi tanpa tes "ProvidMe" dan saya mencetak mencetak semua biji yang ditemukan, kelas ProvidMeProvider ditemukan, seperti juga 'ProvideMe':

...
INFO:   2014-07-14 14:09:31,040 [DEBUG] com.test.rest.DataImport - Bean: com.test.orm.ProvideMeProvider
INFO:   2014-07-14 14:09:31,041 [DEBUG] com.test.rest.DataImport - Bean: com.test.orm.ProvideMe
...

Pertanyaan:

1) Mengapa saya mendapatkan kesalahan "Unsisfisfied dependencies .." ketika mencoba menyuntikkan satu-satunya implementasi untuk antarmuka?

2) Apakah semua kelas yang diperlukan ditemukan di sini?

3) Jika tidak, apa yang harus saya lakukan agar mereka ditemukan?

4) Apa kelas "ProvidMe" yang ditemukannya? (Saya punya ProvidMeImpl, ProvidMeInterface dan ProvidMeProvider, tetapi tidak ada kelas ProvidMe)

Saya menggunakan: Glassfish 4.0 (build 89) (Java EE 7 Web) / NetBeans 8.0 / maven 3.2.1 / JDK 1.7


5
2017-07-14 13:02


asal


Jawaban:


Anda mengimpor @Produces dari javax.ws.rs (digunakan oleh runtime JAX-RS), bukan dari javax.enterprise.inject.


9
2017-07-14 13:28