Trong một dự án Java EE 6 tôi đang làm việc trên, có một trường đơn độc được chú thích bằng @EJB không được tiêm. Tiêm đang hoạt động tốt ở mọi nơi khác.Java EE 6 Injection vào lớp trừu tượng
Là người mới sử dụng Java EE, tôi không biết liệu nó có liên quan đến lĩnh vực đang trong lớp trừu tượng hay không, tôi cũng không thể tìm thấy bất kỳ đầu ra nào từ Glassfish (3.1.2) về lý do tại sao việc tiêm này không xảy ra.
Không có lỗi hoặc cảnh báo trong nhật ký máy chủ cho đến khi NullPointerException xảy ra vì trường dataSourceControl là rỗng. Tôi đã xác minh rằng DataSourceControl Singleton đang được khởi tạo bằng cách đặt đăng nhập vào hàm tạo của nó.
Theo như tôi có thể nói, trường dataSourceControl không được tiêm, nhưng nhật ký cho tôi không có lý do tại sao điều này xảy ra.
public abstract class AbstractDataMap<T> {
@EJB
private DataSourceControl dataSourceControl; // This is not being injected
DataSourceControl getDataSourceControl() {
return dataSourceControl;
}
// Other methods
}
public abstract class AbstractDataMapDBProd<T> extends AbstractDataMap<T> {
@Override
protected Connection getDBConnection() {
return getDataSourceControl().getConnectionX(); // NullPointerException here
}
// Other methods
}
@Stateless
public class CountryMap extends AbstractDataMapDBProd<Country> {
public boolean update(final Country current, final Country legacy) {
Connection connection = getDBConnection();
// More code 'n stuff
}
}
Có bất kỳ quy tắc nào tôi đã bỏ lỡ về việc tiêm được xác định trong lớp trừu tượng không?
Bất cứ điều gì khác mà khóc 'noob'?
Nếu không có lỗi rõ ràng, bất kỳ ý tưởng nào về cách gỡ lỗi này?
Điều này sẽ hoạt động NẾU bạn có được một ví dụ về 'Bản đồ quốc gia 'từ vùng chứa (ví dụ: tiêm hoặc tra cứu) thay vì thông qua' Bản đồ quốc gia mới '. Làm thế nào bạn có được một ví dụ của 'CountryMap'? –
bkail, bạn đã giải quyết nó! Tôi theo mã của tôi trở lại theo một hướng khác và các lớp CountryMap (và các Bản đồ khác) của tôi đã được khởi tạo thủ công. –
@ bkail bạn có thể vui lòng gửi câu trả lời của bạn một câu trả lời để tôi có thể đánh dấu nó là chính xác không? Cảm ơn. –