Avatar billede mikmakmuk Nybegynder
12. oktober 2007 - 11:35 Der er 13 kommentarer og
1 løsning

Hjælp til en thread

Hejsa,

Jeg har noget kode som ser så ledes ud. Jeg skal i sidste ende bruge det til at stressteste en wsdl service. Det jeg gerne vil opnå er at i bliver skrevet ud hvert andet sekund. Der kommer så et kald til webservicen ind hvor i bliver skrevet ud :-) Lige nu går der 6 sek og så får jeg 012345.

<html>
<%@ page contentType="text/html; charset=utf-8" %>

<body>
<%
int i;
int gentagelser=5;
int interval=200;

for(i=0;i<=gentagelser;i++){

        try{
        Thread t = new Thread();
              t.sleep(interval);
        out.print(i);
        }
        catch(Exception e){}

}
%>

</body>
</html>
Avatar billede mikmakmuk Nybegynder
12. oktober 2007 - 11:37 #1
Tanken er at jeg vil kunne se hvor mange gange jeg reelt kan slippe af sted med at kalde wsdl servicen.
Avatar billede arne_v Ekspert
12. oktober 2007 - 17:53 #2
Det er ikke paent at starte traade i en web app.

Og du kan ikke regne med at der kommer noget ud til browser foerend siden er faerdig.

Redesign.
Avatar billede mikmakmuk Nybegynder
13. oktober 2007 - 07:15 #3
Hvorfor er det ikke pænt? Har du er idé til hvordan jeg ellers kan løse opgaven?
Avatar billede arne_v Ekspert
13. oktober 2007 - 17:26 #4
Fordi din container creater tråde til at håndtere dine HTTP requests og den ikke er
klar over at du starter tråde ved siden af.
Avatar billede arne_v Ekspert
13. oktober 2007 - 17:31 #5
Første spørgsmål er:
  var det ikke bedre at lave din web service stress test i en fat client som ingen
  problemer vil have med at lave kald i et loop og opdatere skærmen ?

Hvis du vil lave det som web app så er dit første problem at vise noget progress for brugerne.

Det ville jeg løse ved at lade din side starte en tråd som i et loop laver kald
og opdaterer statistik i et singleton objekt. Din side bruger så et AJAX tag
til at refreshe noget information via en servlet der henter statistik fra
singleton.

En mere avanceret løsning, hvis du har en fuld J2EE server (f.eks. JBoss) og ikke
kun en web container (f.eks. Tomcat) var at lade din side i.s.f. at starte en tråd
smide et job i en message queue og så lade en MDB processe. Stadigvæk med statistik
singleton og AJAX refresh via servlet.
Avatar billede mikmakmuk Nybegynder
13. oktober 2007 - 21:00 #6
hmmmm. Det synes jeg lyder spændende, men jeg må være ærlig og sige at jeg ikke fatter en hat af det.
Avatar billede arne_v Ekspert
23. oktober 2007 - 04:18 #7
Vi er også ved at være ovre i noget af det som er lidt kompleks. Det kan ihvertfald
ikke forklares detaljeret i 10 linier.

Men jeg har prøvet at bixe et eksempel sammen.

Jeg synes at du skal prøve at køre det og se om du kan blive inspireret.
Avatar billede arne_v Ekspert
23. oktober 2007 - 04:19 #8
Før skulle jeg finde et taglib.

Der er masser af AJAC taglibs til JSF, men ikke så mange til rå JSP.

Jeg valgte:

http://www.servletsuite.com/servlets/ajaxdivtag.htm

(bemærk at det er kun gratis til ikke commerciel brug)
Avatar billede arne_v Ekspert
23. oktober 2007 - 04:20 #9
C:\Jakarta\tomcat-5.5.9\webapps\refresh>dir/s
Volume in drive C has no label.
Volume Serial Number is E850-F261

Directory of C:\Jakarta\tomcat-5.5.9\webapps\refresh

22-10-2007  21:48    <DIR>          .
22-10-2007  21:48    <DIR>          ..
21-10-2007  22:51            8.868 cjajax.js
22-10-2007  21:48                66 dyn.jsp
22-10-2007  21:47              229 main.jsp
21-10-2007  22:50            2.766 taglib.tld
22-10-2007  21:37    <DIR>          WEB-INF
              4 File(s)        11.929 bytes

Directory of C:\Jakarta\tomcat-5.5.9\webapps\refresh\WEB-INF

22-10-2007  21:37    <DIR>          .
22-10-2007  21:37    <DIR>          ..
22-10-2007  21:37    <DIR>          classes
22-10-2007  21:34    <DIR>          lib
21-10-2007  22:55              282 web.xml
              1 File(s)            282 bytes

Directory of C:\Jakarta\tomcat-5.5.9\webapps\refresh\WEB-INF\classes

22-10-2007  21:37    <DIR>          .
22-10-2007  21:37    <DIR>          ..
22-10-2007  21:49    <DIR>          test
              0 File(s)              0 bytes

Directory of C:\Jakarta\tomcat-5.5.9\webapps\refresh\WEB-INF\classes\test

22-10-2007  21:49    <DIR>          .
22-10-2007  21:49    <DIR>          ..
04-12-2006  20:56                69 build.bat
22-10-2007  21:49              617 Status.class
22-10-2007  21:41              467 Status.java
22-10-2007  21:49              700 T.class
22-10-2007  21:49              385 T.java
              5 File(s)          2.238 bytes

Directory of C:\Jakarta\tomcat-5.5.9\webapps\refresh\WEB-INF\lib

22-10-2007  21:34    <DIR>          .
22-10-2007  21:34    <DIR>          ..
21-10-2007  22:50            5.087 ajaxdivtag.jar
              1 File(s)          5.087 bytes

    Total Files Listed:
              11 File(s)        19.536 bytes
              14 Dir(s)  63.996.907.520 bytes free
Avatar billede arne_v Ekspert
23. oktober 2007 - 04:21 #10
<script language="JavaScript" src="cjajax.js"></script>
<%@ page import="test.*" %>
<%@ taglib uri="taglib.tld" prefix="a" %>
<%
(new T()).start();
%>
Status:
<a:AjaxDiv id="dyndiv" url="dyn.jsp" timeout="1">
</a:AjaxDiv>
Avatar billede arne_v Ekspert
23. oktober 2007 - 04:21 #11
<%@ page import="test.*" %>
<%=Status.getInstance().getText()%>
Avatar billede arne_v Ekspert
23. oktober 2007 - 04:21 #12
package test;

public class T extends Thread {
    public void run() {
        Status s = Status.getInstance();
        for(int i = 0; i < 120; i++) {
            s.setText("i=" + i);
            try {
                Thread.sleep(1000);
            } catch(InterruptedException e) {
                // ignore
            }
        }
        s.setText("Done");
    }
}
Avatar billede arne_v Ekspert
23. oktober 2007 - 04:21 #13
package test;

public class Status {
    private String text;
    private static Status instance = null;
    private Status() {
        text = "";
    }
    public static synchronized Status getInstance() {
        if(instance == null) {
            instance = new Status();
        }
        return instance;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
}
Avatar billede arne_v Ekspert
27. januar 2008 - 05:53 #14
All set ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester