which EJB-server are you using? if you want an open-source one,
you could take, say, JBoss (jboss.net- i believe) and get the thing
running. then you will need to deploy your bean in the server. doing
this is not so complicated, but depends which server you are
using.
then when you have deployed the bean, you can connect to it,
using "javax.naming" classes and get your bean from the server
content for usage. the main point of EJB's after all is, that they run
in a server content, and that they are managed in this content by
the server (so you always need a server running too, in order to be
able to use them)
much fun with EJB's
mugat
On 27 May 2002, at 17:29, Edward wrote:
> I have question about EJB,I want to call ejb from a servlet,but I
> can't call it successfully.My EJB locates in follow directory:
>
> F:\login\ejb\loginEJB\CheckPasswordHome.class
> F:\login\ejb\loginEJB\CheckPassword.class
> F:\login\ejb\loginEJB\CheckPasswordEJB.class
> F:\login\ejb\loginEJB\CheckPasswordHome.java
> F:\login\ejb\loginEJB\CheckPassword.java
> F:\login\ejb\loginEJB\CheckPasswordEJB.java
> F:\login\ejb\CheckPassword.jar
> F:\login\ejb\META-INF\ejb-jar.xml
> F:\login\ejb\META-INF\ejb-jar.xml
>
> I create CheckPassword.jar like follows:
> F:\login\ejb\>javac -classpath .;F:\j2sdkee1.3.1\lib\j2ee.jar
> loginEJB\*.java
>
> //CheckPasswordEJB.java
> package loginEJB;
> import javax.ejb.SessionContext;
> public class CheckPasswordEJB implements javax.ejb.SessionBean
> {
> public void ejbCreate()
> { }
> public void ejbRemove()
> { }
> public void ejbActivate()
> { }
> public void ejbPassivate()
> { }
> public void setSessionContext(SessionContext ctx)
> { }
> public String logininformation(String username,String password)
> { System.out.println("ID="+username+",Password="+password);
> return "OK";}
> }
>
> My servlet locates in follow directory:
>
> D:\Apache Tomcat 4.0\webapps\login\servlets\index.html
> D:\Apache Tomcat
> 4.0\webapps\login\WEB-INF\classes\GetUserIdentity.class
>
> In my index.html,I call my servlet "GetUserIdentity.class",the file
> "index.html" is follows:
> <html>
> <head>
> <title>Check Identity</title>
> </head>
> <body>
> <center>
> <br><br>
> <form
> action="http://192.168.39.152:8080/login/servlet/GetUserIdentity
> " method="POST"> <table align="center" width="%100"
> cellspacing="2" cellpadding="2">
> <tr>
> <td align="right">Input ID </td>
> <td><input type="Text" name="ID" align="left" size=15></td>
> </tr>
> <br><br><br>
> <tr>
> <td align="right">Input Password </td>
> <td><input type="password" name="password" align="left"
> size=15 color="red"></td>
> </tr>
> </table>
> <br><br>
> <input type="Submit" name="okbutton" value=" OK "
> > <input type="button" name="cancelbutton" value=" Cancel
> " onclick="window.close()"> </form>
> </center>
> </body>
> <html>
>
> My GetUserIdentity is follows:
>
> import loginEJB.*;
> import java.util.Properties;
> import javax.naming.Context;
> import javax.naming.InitialContext;
>
> public class GetUserIdentity extends HttpServlet
> {
>
> public void doPost(HttpServletRequest request,HttpServletResponse
> response)
> throws ServletException,IOException
> {
> String username=request.getParameter("ID");
> String password=request.getParameter("password");
> String pp=test();
> out.println("<html>");
> out.println("<title>Login Succeed!</title>");
> out.println("<body>");
> out.println("<p> ssssYour ID is "+username+"</p>");
> out.println("<p> Your Password is "+password+"</p>");
> out.println("<p> Message is "+pp+"</p>");
> out.println("</body>");
> out.println("</html>");
> }
>
> }
>
> public String test()
> {
> try
> {
>
> String message = "";
> Properties prop=new Properties();
> prop.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialCo
> ntextFactory");
> prop.put(Context.PROVIDER_URL,"t3://192.168.39.152:7001"); Context
> ctx=new InitialContext(prop); Object
> objref=ctx.lookup("CheckPassword"); CheckPasswordHome
> home=(CheckPasswordHome)javax.rmi.PortableRemoteObject.narrow(
> objref,CheckPasswordHome.class);
> CheckPassword ss=home.create();
> message=ss.logininformation("Mary","456");
> System.out.println("Return message:"+message);
> ss.remove();
>
> return message;
>
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
> finally
> {
> return "abc";
> }
> }
>
> }
>
> When I run index.html,and click OK button,it raise follows error:
>
> type Exception report
> message Internal Server Error
> description The server encountered an internal error (Internal Server
> Error) that prevented it from fulfilling this request. exception
> javax.servlet.ServletException: Cannot allocate servlet instance for
> path /login/servlet/GetUserIdentity
> at
> org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServl
> et.java:415) at
> org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.jav
> a:216) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
> icationFilterChain.java:247) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
> ilterChain.java:193) at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
> alve.java:243) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
> alve.java:201) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
> 2344) at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
> ava:164) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
> rValve.java:170) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:564) at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
> ava:170) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:564) at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
> 462) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:564) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
> ve.java:163) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProcesso
> r.java:1011) at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.ja
> va:1106) at java.lang.Thread.run(Unknown Source)
> root cause
> java.lang.NoClassDefFoundError: javax/ejb/EJBObject
> at java.lang.Class.newInstance0(Native Method)
> at java.lang.Class.newInstance(Unknown Source)
> at
> org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:82
> 0) at
> org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.jav
> a:615) at
> org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServl
> et.java:396) at
> org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.jav
> a:216) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
> icationFilterChain.java:247) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
> ilterChain.java:193) at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
> alve.java:243) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
> alve.java:201) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
> 2344) at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
> ava:164) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
> rValve.java:170) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:564) at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
> ava:170) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:564) at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
> 462) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:564) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
> ve.java:163) at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
> .java:566) at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:472) at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProcesso
> r.java:1011) at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.ja
> va:1106) at java.lang.Thread.run(Unknown Source)
>
> I'm very puzzled with it,because I make a test my ejb program,it can
> run at command prompt,my test ejb program like that:
>
> //testEJB.java
> import loginEJB.*;
> import java.util.Properties;
> import javax.naming.Context;
> import javax.naming.InitialContext;
> public class testEJB
> {
> public static void main(String args[])
> {
> test();
> }
> public static void test()
> {
> try
> {
> String message;
> Properties prop=new Properties();
> prop.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialCo
> ntextFactory");
> prop.put(Context.PROVIDER_URL,"t3://192.168.39.152:7001"); Context
> ctx=new InitialContext(prop); Object
> objref=ctx.lookup("CheckPassword"); CheckPasswordHome
> home=(CheckPasswordHome)javax.rmi.PortableRemoteObject.narrow(
> objref,CheckPasswordHome.class);
> CheckPassword ss=home.create();
> message=ss.logininformation("Mary","123");
> System.out.println("Return message:"+message);
> ss.remove();
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
> }
>
> }
>
> The file testEJB.java locates F:\login\ejb\testEJB.java
> When I compile it likes follows:
> F:\login\ejb\>javac -classpath
> .;F:\j2sdkee1.3.1\lib\j2ee.jar;E:\bea\wlserver6.1\lib\weblogic.jar;
> CheckPassword.jar testEJB.java
>
> Then I run it like follows:
> F:\login\ejb\>java -classpath
> .;F:\j2sdkee1.3.1\lib\j2ee.jar;E:\bea\wlserver6.1\lib\weblogic.jar;
> CheckPassword.jar testEJB
>
> I found testEJB runs well. I'm very puzzled why I put parts code of
> it into a servlet,it can't work??? I don't know the reason,Please help
> me! Any idea will be appreciated! Thanks in advances!!!
>
> Edward
>