Беру станадартный пример из NetBeans 5.5, StatelessBean, на JBoss не работет, не происходит выполнение IoC бина. Пожалуйста, подкиньте простой пример, который точно работал на JBoss, чтобы попробовать, либо подскажите, какие настройки, кроме аннотаций нужно делать и чем могне подойти стандартный пример. На Java AS пример работает. Вот код.
Хелп
package enterprise.servlet_stateless_ejb;
public interface StatelessSession {
public String sayHello(String name);
}
package enterprise.servlet_stateless_ejb;
import javax.ejb.Stateless;
@Stateless
public class StatelessSessionBean
implements StatelessSession {
public String sayHello(String name) {
return "Hello, " + name + "!\n";
}
}
package enterprise.servlet_stateless_war;
import java.io.*;
import javax.ejb.EJB;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import enterprise.servlet_stateless_ejb.*;
// Though it is perfectly fine to declare the dependency on the bean
// at the type level, it is not required for stateless session bean
// Hence the next two lines are commented and we rely on the
// container to inject the bean.
// @EJB(name="StatelessSession", beanInterface=StatelessSession.class)
public class Servlet2Stateless
extends HttpServlet {
// Using injection for Stateless session bean is still thread-safe since
// the ejb container will route every request to different
// bean instances. However, for Stateful session beans the
// dependency on the bean must be declared at the type level
@EJB
private StatelessSession sless;
public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
try {
out.println("<HTML> <HEAD> <TITLE> Servlet Output </TITLE> </HEAD> <BODY BGCOLOR=white>");
out.println("<CENTER> <FONT size=+1> Servlet2Stateless:: Please enter your name </FONT> </CENTER> <p> ");
out.println("<form method=\"POST\">");
out.println("<TABLE>");
out.println("<tr><td>Name: </td>");
out.println("<td><input type=\"text\" name=\"name\"> </td>");
out.println("</tr><tr><td></td>");
out.println("<td><input type=\"submit\" name=\"sub\"> </td>");
out.println("</tr>");
out.println("</TABLE>");
out.println("</form>");
String val = req.getParameter("name");
if ((val != null) && (val.trim().length() > 0)) {
out
.println("<FONT size=+1 color=red> Greeting from StatelessSessionBean: </FONT> "
+ sless.sayHello(val) + "<br>");
}
out.println("</BODY> </HTML> ");
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("webclient servlet test failed");
throw new ServletException(ex);
}
}
}
Здравствуйте, Pavel M., Вы писали:
PM>Беру станадартный пример из NetBeans 5.5, StatelessBean, на JBoss не работет, не происходит выполнение IoC бина. Пожалуйста, подкиньте простой пример, который точно работал на JBoss, чтобы попробовать, либо подскажите, какие настройки, кроме аннотаций нужно делать и чем могне подойти стандартный пример. На Java AS пример работает. Вот код.
В Jboss 4 в web приложениях не поддерживается аннотация @EJB, вам нужно искать компонент используя его глобальное JNDI имя. По умолчанию в JBOSS
для локальных интерфейсов назначается JNDI name EARNAME/EJBNAME/local и соответственно для удаленных EARNAME/EJBNAME/remote.
То есть вам нужно что то типа:
private StatelessSession lookupStatelessSessionBean() {
try {
Context c = new InitialContext();
return (StatelessSession) c.lookup("EARNAME/StatelessSessionBean/local");
}
catch(NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
throw new RuntimeException(ne);
}
}
Здравствуйте, ekshibarov, Вы писали:
E>Здравствуйте, Pavel M., Вы писали:
E>
E> private StatelessSession lookupStatelessSessionBean() {
E> try {
E> Context c = new InitialContext();
E> return (StatelessSession) c.lookup("EARNAME/StatelessSessionBean/local");
E> }
E> catch(NamingException ne) {
E> Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
E> throw new RuntimeException(ne);
E> }
E> }
E>
БОльшое спасибо! Обязательно попробую

. А можете мне подсказать, ради интереса, почему так? И является ли это отклонением от стандарта?
Здравствуйте, Pavel M., Вы писали:
PM>БОльшое спасибо! Обязательно попробую
. А можете мне подсказать, ради интереса, почему так? И является ли это отклонением от стандарта?
Потому что jboss 4.x не есть полностью совместимый с java EE 5 сервер. Хоть в нем и есть поддержка EJB 3.0.
Можно об этом посмотреть на:
http://docs.jboss.org/ejb3/app-server/tutorial/ear/ear.html
в секции Lookup of EJBs.