2014-07-14 19 views
5

Hy there,Java EE sử dụng phương pháp sản xuất mang lại 'Phụ thuộc không thỏa mãn WELD-001408' 'ngoại lệ

Tôi hoàn toàn mới đối với Java EE và CDI. Tôi cố gắng thiết lập một dự án thử nghiệm để thực hiện các bước đầu tiên của mình với JAX-RS và CDI. Tôi đã bật CDI bằng cách cung cấp tệp beans.xml. Miễn là tôi đang thử nghiệm, tôi sử dụng phần tử bean-discovery-mode = "all". CDI có vẻ hoạt động tốt, vì tôi có thể tiêm BeanManager thành công vào tài nguyên thử nghiệm của mình và tôi có thể xuất tất cả các hạt mà nó phát hiện ra.

Tôi cố gắng tiêm một lớp được cung cấp bởi phương pháp sản xuất. Netbeans chỉ cho tôi một lời cảnh báo đối với các lĩnh vực provideMe: Không kích hoạt đủ điều kiện cho đậu tiêm được tìm thấy

Khi tôi triển khai các ứng dụng để Glassfish, tôi nhận được ngoại lệ hàn:

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

Dưới đây là lớp học của tôi cho thử nghiệm nhỏ này:

Interface:

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

Implem entation:

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

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

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

Nhà sản xuất:

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); 
    } 
} 

Resource:

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>"; 
    } 
} 

Khi tôi khởi động ứng dụng mà không có sự kiểm tra "ProvideMe" và tôi in in ra tất cả các hạt cà phê phát hiện, ProvideMeProvider lớp học được phát hiện, cũng như 'Cung cấp':

... 
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 
... 

Câu hỏi:

1) Tại sao tôi nhận được "phụ thuộc không được đáp ứng .." lỗi khi cố gắng tiêm chỉ thực hiện cho giao diện?

2) Tất cả các lớp học cần thiết được phát hiện ở đây phải không?

3) Nếu không, tôi cần làm gì để chúng được khám phá?

4) Lớp "ProvideMe" mà nó phát hiện ra là gì? (Tôi đã có ProvideMeImpl, ProvideMeInterface và ProvideMeProvider, nhưng không có ProvideMe lớp)

Tôi đang sử dụng: Glassfish 4.0 (xây dựng 89) (Java EE 7 Web)/NetBeans 8.0/maven 3.2.1/JDK 1,7

Trả lời

Các vấn đề liên quan