Hallo Experten,
leider habe ich hier und beim Googlen keine Lösung gefunden.
Mein Problem ist folgendes:
Ich verwende EJB3 (mit Hibernate-Persistence - nur zur Info erwähnt) mit JBoss 4.2 und deploye über Eclipse 3.3. Das funktioniert auch alles super, bis auf:
Ich bekomme keinen Lookup hin. Aus diesem Grund habe ich zum Testen ein ganz einfaches Beispiel erstellt:
Bean-Code:
Lookup-Klasse:
Die beiden Methoden-Rückgaben gebe ich testweise in einer ganz simplen JSP aus:
Dabei erscheint dann aber:
Auf der Kommandozeile wird beim Deployen kein Fehler ausgegeben. Die JSP funktioniert auch. Nur der Lookup bringt null. Da ich nicht glaube, daß die JBosser ein Problem in ihrem App-Server haben, gehe ich davon aus, daß ich ein entscheidendes Detail übersehen habe und ihr mir das bestimmt sagen könnt, wo mein Fehler liegt.
Zusatzinfo:
Bei EJB3 sind die Deployment-Descriptoren optional, daher habe ich keine angelegt. Soweit ich weiß, wird durch die Angabe des "mappedName" der Name im App-Server hinterlegt, oder irre ich da? Mit der Annotation "@EJB" statt InitialContext komme ich hier leider auch nicht weiter.
Unter dem Link http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss:service=JNDIView, "Output JNDI info as text", Button "Invoke", erscheint dieser JNDI-name auch nicht.
Was mache ich noch falsch?
leider habe ich hier und beim Googlen keine Lösung gefunden.
Mein Problem ist folgendes:
Ich verwende EJB3 (mit Hibernate-Persistence - nur zur Info erwähnt) mit JBoss 4.2 und deploye über Eclipse 3.3. Das funktioniert auch alles super, bis auf:
Ich bekomme keinen Lookup hin. Aus diesem Grund habe ich zum Testen ein ganz einfaches Beispiel erstellt:
Bean-Code:
Code:
import javax.ejb.Remote;
@Remotepublicinterface SimpleBean {
public String sayHello(String name);
}
Code:
import javax.ejb.*;
@Stateless(name="Example", mappedName="java:comp/env/SimpleBean")
publicclass SimpleBeanImpl implements SimpleBean {
public String sayHello(String name) {
return"Hello " + name + "!";
}
}
Lookup-Klasse:
Code:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import javax.ejb.EJB;
import javax.naming.InitialContext;
import com.webnobis.storehousesystem.facade.SimpleBean;
publicclass SimpleClient {
private SimpleBean bean;
private String text = "Banane";
public SimpleClient() {
try {
InitialContext ctx = new InitialContext();
this.bean = (SimpleBean)ctx.lookup("java:comp/env/SimpleBean");
} catch (Exception e) {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(bout));
text = new String(bout.toByteArray());
}
}
public String getText() {
returntext;
}
public String getBeanText() {
return (bean != null)? bean.sayHello("Steffen"): "bean = null";
}
}
Die beiden Methoden-Rückgaben gebe ich testweise in einer ganz simplen JSP aus:
HTML:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.webnobis.storehousesystem.delegate.SimpleClient;"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:declaration>
SimpleClient sc = new SimpleClient();
</jsp:declaration>
<p>#<%=sc.getText() %>#</p>
<p>##<%=sc.getBeanText() %>##</p>
</body>
</html>
Dabei erscheint dann aber:
HTML:
#javax.naming.NameNotFoundException: SimpleBean not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:529) at org.jnp.server.NamingServer.getBinding(NamingServer.java:537) at org.jnp.server.NamingServer.getObject(NamingServer.java:543) at org.jnp.server.NamingServer.lookup(NamingServer.java:296) at org.jnp.server.NamingServer.lookup(NamingServer.java:270) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:716) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587) at javax.naming.InitialContext.lookup(Unknown Source) at com.webnobis.storehousesystem.delegate.SimpleClient.(SimpleClient.java:21) at org.apache.jsp.index_jsp.(index_jsp.java:12) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:143) at org.apache.jasper.servlet.JspServletWrapper.getDependants(JspServletWrapper.java:260) at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:416) at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:342) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:562) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:308) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Unknown Source) #
##bean = null##
Auf der Kommandozeile wird beim Deployen kein Fehler ausgegeben. Die JSP funktioniert auch. Nur der Lookup bringt null. Da ich nicht glaube, daß die JBosser ein Problem in ihrem App-Server haben, gehe ich davon aus, daß ich ein entscheidendes Detail übersehen habe und ihr mir das bestimmt sagen könnt, wo mein Fehler liegt.
Zusatzinfo:
Bei EJB3 sind die Deployment-Descriptoren optional, daher habe ich keine angelegt. Soweit ich weiß, wird durch die Angabe des "mappedName" der Name im App-Server hinterlegt, oder irre ich da? Mit der Annotation "@EJB" statt InitialContext komme ich hier leider auch nicht weiter.
Unter dem Link http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss:service=JNDIView, "Output JNDI info as text", Button "Invoke", erscheint dieser JNDI-name auch nicht.
Was mache ich noch falsch?
Zuletzt bearbeitet: