2010-12-14 41 views
5

Bir sunucuya EJB durum bilgisi olmayan bir fasulye enjekte etmeye çalışıyorum, ancak sunucu bir NullPointerExcetion atar. EJB ve sunucu uygulamasını dağıtmak için JBOSS kullanıyorum.Sunucuda EJB enjeksiyonu başarısız oluyor

Java dünyasına nispeten yeniyim, bu yüzden takip ettiğim adımları gönderiyorum.

Arayüz

package MavenEJB.Bidding` 
import javax.ejb.Local; 

@Local 
public interface PlaceBid { 
public String AddBid(); 
} 

package MavenEJB.Bidding; 
import javax.ejb.Stateless; 
@Stateless(name="PlaceBid") 
public class PlaceBidBean implements PlaceBid { 
public PlaceBidBean(){} 

/** 
    * Include logic to add the bid 
    */ 

public String AddBid(){ 
    return "Placed bid using EJB"; 
} 
} 

Bean Ben maven kullanarak fasulye bir kavanoz dosyası oluşturulur ve ben JBoss dizinini "dağıtmak" için kavanoz dosyası kopyalandı. JMX konsolunda konuşlandırılmış fasulye görebiliyorum.

JMX konsoluna

+- PlaceBid (class: org.jnp.interfaces.NamingContext) 
    | +- local (proxy: $Proxy63 implements interface MavenEJB.Bidding.PlaceBid,interface org.jboss.ejb3.JBossProxy) 

Benim servlet kod benim servlet'ten URL'sini işaret, ben NullPointerException olsun

public class PlaceBidServlet extends HttpServlet { 

    @EJB 
    private PlaceBid placeBid; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 

    PrintWriter out = response.getWriter(); 
    out.println("<HTML>"); 
    out.println("<HEAD><TITLE>Hello</TITLE></HEAD>"); 
    out.println("<BODY>"); 
    out.println("Output from EJB" +placeBid.AddBid()); 

    //out.println("Output from EJB"); 
    out.println("</BODY></HTML>"); 
} 

.... 
} 

Global Jndi Ad alanı. Fasulyeyi yorumladığımda ve başka bir şey yazdırdığımda, iyi yazdırılır. Bu yüzden sorun, sunucudaki EJB Dependency Injection ile ilgili olduğundan eminim. Gerçekten işe yaramadı, birileri bana yardım etsin diye pek çok çözüm önerdim.

cevap

7

Bir çok saat sonra sorunu buldum, bir başkasının yararlanabilmesi için onu gönderiyorum. Sorun şu ki, JBOSS 4.2.3 kullanıyordum ve bu yazı olarak http://community.jboss.org/message/410211 jboss 4.2.x uygulamasının servletlerde EJB enjeksiyonunu desteklemediğini öne sürüyor.

Jboss 5.1 kullandım, ayrıca hem sunucu uygulaması hem de EJB tek bir kulak paketinde değilse, EJB Enjeksiyonu için mappedName kullanılmalıdır. SAVAŞTA ve EJB'de servletler ayrı bir Jar'da vardı. Daha fazla bilgi için bu postayı kontrol edin http://community.jboss.org/message/8196#8196

+1

Kendi cevabınızı kabul edebilirsiniz, böylece diğer kullanıcılar bu sorunun yanıtlandığını bileceklerdir. –

İlgili konular