Avatar billede thomas_yde Nybegynder
09. april 2002 - 09:08 Der er 6 kommentarer og
1 løsning

Flush/Garbage Collecter æder mine objekter

jeg har et problem med et projekt.
Situationen er den at jeg har en Model som indeholder container objekter. Disse containers har så en vector/hashmap som indeholder diverse objekter af de forskellige typer.

Jeg kan så via en servlet oprette et objekt og indsætte den både i en mySql database og i den rette container.

Mit problem er så at objekterne forsvinder efter noget tid og nogle gange efter jeg har uploadet en fil til min server. Men uploaden er ikke væsentlig for objekternes overlevelse da de servlets ikke direkte berør Model objekterne men kun aktiver den via en controller.

Jeg har tjekket vores controller og der er ikke noget sted vi overskriver Model eller container.

Jeg håber nogle kan hjælpe mig.

jeg køre resin 2.1.0 server og mySql.


hvis der er andet i vil vide så i meget gerne kontakte mig på
tydexx@students.aabc.dk

//thomas

pS . Erik Jacobsen hvis du har tid vil det være lækkert hvis du kunne hjælpe enten via mail eller i OLC på skolen.
Avatar billede disky Nybegynder
09. april 2002 - 09:26 #1
GC'en fjerner kun objecter hvis der ikke længere er nogle referencer til den.

Du bliver nød til at beskrive dit system mere detaljeret.
Avatar billede mallemab Nybegynder
09. april 2002 - 09:29 #2
Den er nok sulten ;-)
Avatar billede thomas_yde Nybegynder
09. april 2002 - 10:07 #3
uhm mere detaljeret:
Model:
public class Model {
   
    private static Model model = new Model();
   
    private OpslagsTavleContainer otc= new OpslagsTavleContainer();
public Model() {
        super();
    }
   
    public static Model getModel(){
        return model;
    }
   
    public static OpslagsTavleContainer getOpslagsTavleContainer(){
        return model.otc;
    }
}
Til at opretholde referencerne bliver model opretholdt i denne klasse:
import NyWebPortal.Server.ModelServer.*;
import javax.swing.*;
/**
*
* @author  tander35
* @version
*/
public class StartServer extends JFrame{

    /** Creates new StartServer */
    public StartServer() {
    }
    public static void main(String[] args){
        JFrame jf = new JFrame();
        JButton jb = new JButton("Stop Server");
        jf.getContentPane().add(jb);
        jf.pack();
        jf.show();
        Model m = new Model();
       
    }
}
den skulle gerne have holde model i live. (correct me if im wrong)
Avatar billede thomas_yde Nybegynder
09. april 2002 - 10:11 #4
her bliver et objekt tilføjet :
package NyWebPortal.Server.ControllerServer;
import NyWebPortal.Server.ModelServer.*;

public class OpretOpslagstavleController
{
    public static int opretOpslagstavle(String title)
    {
        int dummy = -1;
            OpslagsTavleContainer otc =  Model.getOpslagsTavleContainer();
            System.out.println("otc: " + otc);
            dummy=otc.opretOpslagstavle(title);
            System.out.println("efter opret");
            return dummy;
       
    }
}

og her er container til opslagstavle:
package NyWebPortal.Server.ModelServer;
import java.util.*;
import java.text.*;
import dk.friluftsliv.util.*;
import java.sql.*;
import javax.sql.*;
//import NyWebPortal.Server.ModelServer.*;
public class OpslagsTavleContainer {
   
    public OpslagsTavleContainer(){
        super();
        lnkOpslagstavle = new HashMap();
    }
   
    public void add(Object key,Opslagstavle opslagstavle) {
    try
    {
      System.out.println("size: " + lnkOpslagstavle.size());
      lnkOpslagstavle.put(key,opslagstavle);
        System.out.println("size: " + lnkOpslagstavle.size());
    }
    catch (Exception e)
    {
          System.out.println("(add) Exception: " + e.getMessage());
    }   
    }

    /*
        Metoden svarer ikke til sekvensdiagrammet, idet
        den ikke selv sletter beskederne hvis opslagstavlen
        ikke eksisterer som objekt.
        Det er ikke nødvendigt, idet alle opslagstavler <i>eksisterer</i>
        som objekt.
    */
    public int remove(String tavleNavn)
    {
        int status = -1;
             
        Opslagstavle tavle = find (tavleNavn);
        if (tavle != null)       
        {
            // Fjern opslagstavlebeskederne i opslagstavlen
            status = tavle.destroy();
           
            // Fjern opslagstavle objektet fra containeren
            // Dette er sidste reference til opslagstavle objektet,
            // => objektet bliver slettet af GC.
            if (status==0) { lnkOpslagstavle.remove(tavle); }     
        }
        return status;
    }

    public Opslagstavle find(String titel) {
       
        Collection c = lnkOpslagstavle.values();
        Iterator enum = c.iterator();
       
        Opslagstavle tavle;
       
        while (enum.hasNext())
        {
            tavle = (Opslagstavle)enum.next();
            if ((((String)tavle.getTitel()).compareTo(titel))==0) { return tavle; }
        }
        return null;
    }

    public HashMap getTavler() {
        return lnkOpslagstavle;
    }

    public int opretOpslagstavle(String navn){
       
        // tilføj tavle til DB
        try
        {
          boolean result;
          java.sql.Connection conn = ConnectionManager.getConnection();
          java.sql.Statement stat = conn.createStatement();
          result=stat.execute ("INSERT INTO Opslagstavle (titel) VALUES ('"+ navn + "')");
          conn.close();
          if (result) return 1;         
        }
        catch (Exception e) {
           
            System.out.println("Exception: " + e.getMessage());
            return -1;
        }
       
        // tilføj objekt til containeren
        Opslagstavle tavle = new Opslagstavle(navn);
        add(navn,tavle);
       
        return 1;
    }
   
    public int getSize()
    {
        return lnkOpslagstavle.size();
    }
   
    /**
    * @link aggregation
    * @labelDirection forward
    * @clientCardinality 1
    * @supplierCardinality 0..*
    * @associates <{Opslagstavle}>
    */
    private HashMap lnkOpslagstavle;
}
Avatar billede thomas_yde Nybegynder
09. april 2002 - 10:12 #5
Jeg kan godt oprette dem og se dem via en servlet men problemet er at objekterne forsvinder :/
Avatar billede thomas_yde Nybegynder
09. april 2002 - 10:24 #6
sig til hvis jeg skal sætte point op det er meget vigtig fordi jeg rent ud sagt ikke forstår hvorfor de objekter forsvinder...
Avatar billede thomas_yde Nybegynder
09. april 2002 - 10:48 #7
Nå jeg fandt selv ud af det.
Men tak til dem der prøvede at hjælpe mig.
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