Witam,
Napisałem taki kod:
package com.mycompany;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "HelloServlet", urlPatterns = {"/"})
public class HelloServlet extends HttpServlet {
@EJB
protected HelloWorldSessionBeanLocal helloEJB;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet HelloServlet</title>");
out.println("</head>");
out.println("<body>");
out.println(helloEJB.getHelloMessage());
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "EJB test";
}
}
Kod interfejsu:
package com.mycompany;
import javax.ejb.Local;
@Local
public interface HelloWorldSessionBeanLocal {
public String getHelloMessage();
}
Kod implementacji:
package com.mycompany;
import javax.ejb.Stateless;
@Stateless
public class HelloWorldSessionBean implements HelloWorldSessionBeanLocal {
@Override
public String getHelloMessage() {
return "Hello World";
}
}
Uzywam serwera Glassfish v4 OSE. Daze do wstrzykiwania @ejb w beanach springowych (kontrolery i service), ale zanim zaczne to robic chce poznac nazwy zasobow, ktore chce wstrzyknac.
Pytania:
- Jak wyswietlic rzeczywiste JNDI/name wstrzykiwanego/wstrzyknietego komponentu EJB? Chce, aby na stronie pod "Hello World" znalazlo sie JNDI name.
- Jak ustawic dowolna nazwe kompomentu EJB np. na "ejb/testowy"? (wyswietlenie pozwoli mi upewnic sie, ze customowa nazwa dziala)
- Czym w praktyce sie rozni @stateless(mappedname = "") od @stateless(name = "")?
W dokumentacji pisza:
javax.ejb.Stateless
public abstract String mappedName
A product specific name(e.g. global JNDI name) that this session bean should be mapped to. Application servers are not required to support any particular form or type of mapped name, nor the ability to use mapped names. The mapped name is product-dependent and often installation-dependent. No use of a mapped name is portable.
Slowo should be mapped to jest mocno niepokojace. Czy to dziala na Glassfishu 4? Ja chce naprawde prosta rzecz: byc w stanie wyswietlac i ustawiac JNDI name.
Probowalem tak:
[root@centos64 bin]# ./asadmin list-jndi-entries --context=ejb
mgmt: com.sun.enterprise.naming.impl.TransientContext
Command list-jndi-entries executed successfully.
Nie ma moich JNDI od EJB. Gdzie one sa? Czy podaje zly kontekst? Mimo, ze na serwerze mam kilka aplikacji EJB nie widze zadnego JNDI name. Czy podaje zly kontekst?
Bede niezmiernie wdzieczny za wszelka pomoc.
Pozdrawiam,