09. april 2002 - 18:06Der er
7 kommentarer og 1 løsning
Servlets og kørende java program
Jeg har et problem med et projekt. Jeg har en klasse der hedder Model. Den ser sådan ud :
package NyWebPortal.Server.ModelServer; import NyWebPortal.Server.ModelServer.*; /* * Model.java * * Created on 22. marts 2002, 13:03 * @author tydexx * @version */ public class Model {
private static Model model = new Model();
private OpslagsTavleContainer otc= new OpslagsTavleContainer();
private DokumentDataContainer ddc = new DokumentDataContainer();
private MedlemContainer mc = new MedlemContainer();
private ForumContainer fc = new ForumContainer();
/** Creates new Model */ public Model() { super(); }
public static Model getModel(){ return model; }
public static OpslagsTavleContainer getOpslagsTavleContainer(){ return model.otc; }
public static DokumentDataContainer getDokumentDataContainer(){ return model.ddc; } public static MedlemContainer getMedlemContainer(){ return model.mc; }
public static ForumContainer getForumContainer() { return model.fc; }
}
Mit problem er så nu at jeg har en servlet som skal bruge denne model til at hente de forskellige containers. Men det er som om den henter en tom Model til sig selv og slet ikke bruge den model der allerede er oprettet.
Er der nogen der har en forklaring på dette fænomen?
Servlet ser sådan ud: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter();
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Skal det forstås således at du ønsker at din model skal være en singelton klasse (dvs. en hvor der kun oprettes netop en instans)? I så fald bør du nok lave din constructor private (du kalder den jo heller ikke udefra). Så kan du lave din getModel om så den opretter instances hvis der ikke findes en i forvejen. De andre get-metoder bør så laves om til at bruge getModel istedet for at referere model direkte. Udsnit af ændret kode følger:
private static Model model; /** Creates new Model */ private Model() { super(); }
public static Model getModel(){ if (model == null) { model = new Model(); } return model; }
public static OpslagsTavleContainer getOpslagsTavleContainer(){ return getModel().otc; }
---------------------- du kan evt. også lave de andre om efter samme model således at du får: public static OpslagsTavleContainer getOpslagsTavleContainer(){ return getModel().getOtc(); }
hvor getOtc() opretter instansen hvis den ikke findes.
------------------------- Hvis dette svar ikke stemmer overens med din problemstilling, så er jeg bange for at du må komme med lidt flere oplysninger. F.eks. noget om hvordan du kalder din servlet.
Håber dog du kan bruge ovenstående til noget alligevel.
Så vidt jeg kan se på et hurtigt kig, så er mit forrige svar stadig relevant. Det er rigtigt at den model du opretter i Startserver bliver ved med at leve, men det garanterer jo ikke at det er den samme du får fat i fra din servlet. Jeg ved ikke hvor du kører din servlet fra og i hvilke omgivelser, men det er jo ikke engang sikekrt at de kører i samme VM instans. Hvis de kører i samme instans, bør mit første forslag kunne hjælpe. Hvis de ikke gør, så e det nogle helt andre metoder der skal tages i brug.
jeg kører resin 2.10 på min server Og mine servlets ligger under WEB-INF\classes\ hvor mit projekt også befinder sig under de forskellige packages. Og du har ret jeg tror heller ikke min servlet får fat i den aktuelle model.
Hvis du starter din Swing applikation fra commandline (el. lign.) så kommer den aldrig til at køre i samme vm instans som din servlet container. I Så fald skal du ud at rode med noget client-server forbindelse (RMI, CORBA , etc.) eller finde en helt anden arkitektur til din applikation (f.eks. ved at de to applikationerne (web og swing) bare arbejder på samme data, eller ved at din swing-applikation henter sine data via http til en anden servlet.) Jeg ved jo ikke helt rigtigt hvad du prøver at bikse sammen, så jeg kan nok ikke hjælpe mere på denne her, mewn det skulle da også være en slags svar ;^)
hehe ja det har du ret i, Men jeg har indtil videre løst problemet. Jeg sætter min servlet til at aktivere javaprogrammet som bygger min model ud fra mySQL på den måde for jeg dem i samme VM instans, men det hjælper ikke hvis resin serveren bryder sammen så skal den bygge modellen igen. Men det er pt. ikke noget stort problem :)
Men tusind tak for hjælpen du har envidere hjulpet mig til at forstå den der singleton pattern, som jeg ikke kendte til før :)
jeg takker for pointtildelingen. Held og lykke med det videre arbejde. Hilsen jan
Synes godt om
Ny brugerNybegynder
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.