2010-08-01 20 views
5

Tôi gặp khó khăn khi triển khai ứng dụng nâng bằng cách sử dụng hạt java của doanh nghiệp. Có một ví dụ đơn giản:nâng với đậu java của doanh nghiệp

@Stateless 
class TestEJB { 
def a = "hello" 
} 

object TestApi extends XMLApiHelper{ 
@EJB 
private var bean:TestEJB = _ 
def createTag(a:NodeSeq) = 
def dispatch: LiftRules.DispatchPF = { 
    case Req("test" :: Nil, "", GetRequest) => 
    () => PlainTextResponse(bean.a) 
} 
} 

Có NullPointerException trên phù hợp với bean.a, vì vậy điều đó có nghĩa, rằng bean chưa được khởi tạo tốt. Tại sao?

Trả lời

2

Không nâng cao nhận thức, nhưng @EJB là chuẩn chỉ có sẵn cho servlet, bộ lọc, trình nghe ngữ cảnh, các hạt được quản lý jsf, ejbs, webbeans và các thành phần Java EE khác. Lưu ý các lớp JSP, do việc tạo/biên dịch động của chúng, không đủ điều kiện để sử dụng @EJB và phải thay thế các EJB tra cứu mặc dù chúng được tính như là một servlet khi chạy.

Để thay thế cho việc tiêm, bạn có thể sử dụng tra cứu. Nếu bạn đang ở trong một máy chủ Java EE 6, bất kỳ mã java nào cũng có thể tra cứu EJB thông qua tên JNDI chuẩn "java: global" của nó.