Toon posts:

[EJB/JSP] opslaan data met autonummering

Pagina: 1
Acties:

Verwijderd

Topicstarter
Volgende probleem:
"Ik heb een tabel UserEJB met daarin de velden: UserId, UserName, Password, MobileNumber. UserId is hierbij ingesteld als autonummering en PrimaryKey. In de code is de userId een Integer. In mijn EntityBean heb ik de volgende create method:

code:
1
2
3
4
5
6
7
8
9
10
public java.lang.Integer ejbCreate(Integer userId, String userName, 
String password, String mobileNumber) 
    throws javax.ejb.CreateException
    {
        setUserId(userId);
        setUserName(userName);
        setPassword(password);
        setMobileNumber(mobileNumber); 
        return null;
    }


Deze wordt aangeroepen door de method in mijn Session Bean, namelijk:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public void createUser(Integer userId, String userName, String password, String mobileNumber)
//  Dit is de functie die 4 argumenten (userid, username, password, mobilenumber)
// doorgeeft aan de EntityBean om een nieuwe gebruiker in de database op te slaan.
{ 
    try 
    {
        UserLocal user = local.create(userId, userName, password, mobileNumber);
    }
    catch (Exception ex) 
    {
        throw new EJBException(ex);
    }
}


Vervolgens heb ik hiervoor een jsp pagina geschreven met ook hier een functie om de zooi op te slaan... deze spreekt dan weer de SessionBean aan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<%
    String step = request.getParameter("step");
    if (step != null && step.equals("A"))
    {
        Integer userId = new Integer(" ");
        String userName = request.getParameter("UserName");
        String password = request.getParameter("Password");
        String mobileNumber = request.getParameter("MobileNumber");
   
        if (userName != null && userName.length() > 0) 
        {
            storingsmelder.createUser(userId, userName, password, mobileNumber);
            out.println("<B>Let op</B> gebruiker: "+userName+" is opgeslagen<hr>");
        }
    }
%>

<script Language="JavaScript">
<!-- Hide

function doeAdd(theForm) {
        document.Add.step.value="A";
    document.Add.submit();
}
//--></script>

<center><form name="Add" method="get">
<TABLE BORDER=1 BGCOLOR=#FFFFFF>
    <INPUT TYPE="hidden" name="step" value=" "><BR>
<TR>
    <TD COLSPAN=2><STRONG>Aanmaken nieuwe gebruiker: </STRONG></TD>
</TR>
<TR>
    <TD>Gebruikersnaam</TD>
    <TD><input type="text" name="UserName" size="20" STYLE="width: 120px"></TD>
</TR>
<TR>
    <TD>Wachtwoord</TD>
    <TD><input type="password" name="Password" size="20" STYLE="width: 120px"></TD>
</TR>
<TR>
    <TD>Mobiel</TD>
    <TD><input type="text" name="MobileNumber" size="10" STYLE="width: 120px"></TD>
</TR></TABLE>

<BR><BR><BR>
<input TYPE=submit NAME=Add VALUE="Opslaan" onclick=doeAdd(this.Form)>
</form></center>


Dit werkt alleen niet omdat hij volgens mij niet snapt wat hij met UserId aanmoet en deze neemt ook niet mee... ik krijg namelijk de volgende stacktrace:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
15:32:23,718 WARN  [jbossweb] WARNING: Exception for /jspweb/storingsmelder_AddU
ser.jsp?step=A&UserName=Pietje&Password=Puk&MobileNumber=0641319958&Add=Opslaan
java.lang.NumberFormatException:
        at java.lang.Integer.parseInt(Integer.java:426)
        at java.lang.Integer.<init>(Integer.java:567)
        at org.apache.jsp.storingsmelder_0005fAddUser$jsp._jspService(storingsme
lder_0005fAddUser$jsp.java:100)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspSer
vlet.java:201)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
81)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:360
)
        at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicati
onHandler.java:294)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:5
58)
        at org.mortbay.http.HttpContext.handle(HttpContext.java:1714)
        at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplication
Context.java:507)
        at org.mortbay.http.HttpContext.handle(HttpContext.java:1664)
        at org.mortbay.http.HttpServer.service(HttpServer.java:863)
        at org.jboss.jetty.Jetty.service(Jetty.java:460)
        at org.mortbay.http.HttpConnection.service(HttpConnection.java:775)
        at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:939)
        at org.mortbay.http.HttpConnection.handle(HttpConnection.java:792)
        at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:
201)
        at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289)
        at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:455)


Hierin is dus ook geen UserID meegenomen. Maar als ik voor de UserID een harde waarde ingeef krijg ik natuurlijk een database error omdat hij daar op autonummering staat. Weet iemand hoe dit op te lossen is?

Verwijderd

Topicstarter
Ik heb overigens ook al wat zitten kloten met een for loop met i.next() maar dat gaat ook fout... :'(

Verwijderd

Auto increment voor primary keys is niet vastgelegd in de ejb specificatie. Dan kun je nog wel je database field autoincrement maken, maar dat heeft geen invloed op. Als je unieke primary keys wil genereren zijn er verschillende mogelijkheden.

Een veel gebruikte is het 'Sequence Block' pattern. Zoek daar maar eens op in google, dan krijg je er vast wel wat meer informatie over.

De foutmelding die je krijgt komt omdat hij een Integer veldt verwacht, maar je gooit er een lege string in. Deze kan hij niet parsen dus krijg je je foutmelding.

  • machiel
  • Registratie: Januari 2000
  • Laatst online: 16-07 18:09
http://www.kylev.com/projects/jboss/cmpauto.html

Hoe gaat het trouwens verder met je EJB-systeempje?