[Servlet] caricare e condividere risorse

di il
3 risposte

[Servlet] caricare e condividere risorse

Per generare dinamicamente le mie pagine, estrapolo informazioni da un file xml tramite un oggetto ParserXML da me creato.

Quando chiamo una servlet, nell'init() devo caricarmi il mio ParserXML, ma ho problemi nel caricare la risorsa market.xml che sarebbe appunto l'xml da parsare. Il file xml l'ho piazzato in un package resource sempre sotto /WEB-INF/classes/resource.

Un'altro grattacapo che mi tormenta è il seguente: una volta caricato il ParserXML, vorrei condividerlo con altre servlet, senza ogni volta dover riparsare l'xml nell'init(). Settando l'attributo nel Context, il mio ParserXML già istanziato è visibile a tutte le altre servlet?

Buona giornata

3 Risposte

  • Re: [Servlet] caricare e condividere risorse

    L'ho risolto così. E' portabile come soluzione? Se porto il mio progetto in un altro ambiente funziona lo stesso??
    
    private ParserXML parser;
    	private File f;
    	
    	public void init(){
    		
    		String s = this.getServletContext().getRealPath("/WEB-INF/classes/resource/market.xml");
    		f= new File(s);
    		parser = new ParserXML(s);
    	}
    	
    
  • Re: [Servlet] caricare e condividere risorse

    Paolovox ha scritto:


    una volta caricato il ParserXML, vorrei condividerlo con altre servlet, senza ogni volta dover riparsare l'xml nell'init(). Settando l'attributo nel Context, il mio ParserXML già istanziato è visibile a tutte le altre servlet?
    Se metti un oggetto nel "application scope" (che poi sono gli attributi nel ServletContext), allora è accessibile da qualunque altra risorsa, Servlet, Filter o JSP (che sotto-sotto sono delle Servlet).

    Ma il punto è anche un altro, molto più importante: concorrenza e thread-safety. Cosa fa ParserXML? L'utilizzo è thread-safe? Se no, cosa intendi fare?
  • Re: [Servlet] caricare e condividere risorse

    Il ParserXML effettua il parsing del market.xml dove estrapolo informazioni e tramite una serie di get ottengo degli ArrayList di oggetti come: Account, Category, Item... per la generazione dinamica delle pagine.

    L'unico che puó modificare l'xml é un utente di tipo administrator, il quale usa una classe CreatorXML da me creata e utilizza lo stesso market.xml

    Vorrei che il parsing venga effettuato una sola volta all'avvio del conteiner e sia condivisibile da tutte le servlet. Devo poi gestirne peró la concorrenza con l'amministratore.

    Capito questo devo passare assolutamente alle sessioni per gestire gli utenti e distinguerne il tipo. Ancora non mi é chiarissimo ma ce la faró.

    Buona giornata.

    Ps: per istanziare ilParserXML ho usato il Singleton.
Devi accedere o registrarti per scrivere nel forum
3 risposte