Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906

    [Java]Jar: settagio variabili dall'esterno attraverso classi astratte e loro implem

    Salve,
    mi scuso per il titolo, ma non riesco ad esprimere il concetto in poche parole.
    Ho bisogno di un consiglio su un modulo che sto sviluppando.
    Il modulo realizza un'interfaccia di ricerca altamente flessibile da poter utilizzare in applicazioni web ed e' organizzato dentro un file jar. Naturalmente, per far si che funzioni, nell'applicazione dev'essere scritta una classe "ad hoc" esterna al jar che estenda una classe interna del jar e implementi i suoi metodi astratti (acquisizione della connessione al database, salvataggio di parametri opzionali per l'applicazione, ecc).
    Oltre a questa classe, fuori dal jar devono essere scritti alcuni file xml che configurano il package.
    Ora volevo dei consigli su come passare il path dei file al pacchetto, tenendo in considerazione che:
    1) Le variabili che devono memorizzare questi path sono nella classe astratta che viene estesa.
    2) La classe astratta estende HttpServlet e la classe che la estende a sua volta e' quella che viene registrata nel file web.xml come servlet vera e propria.
    3) I metodi che usano queste variabili sono già implementati nella classe astratta.
    4) La posizione dei file xml rispetto al file jar o alla classe esterna non puo' essere determinata a priori.

    Le idee che mi sono venute in mente sono:
    - includere un metodo astratto inizializzaVariabili(), nel quale chi scrive la servlet per l'applicazione si prende la briga di settare le variabili. Il metodo verebbe richiamato dalla init della "servlet astratta".
    - leggere nel metodo init i vari path da un file di property. Il codice starebbe nella "servlet astratta", ma viene eseguito dalla servlet vera e propria che ha nella sua stessa cartella un file di properties apposito.
    codice:
    //Codice della classe astratta che in realtà viene eseguito dalla classe esterna al jar
    private String PathFileXML1 = null;
    private String PathFileXML2 = null;
    public void init(){
       try {
          Properties props = new Properties();
          props.load(new FileInputStream(new File("path.properties")));
          PathFileXML1 = props.getProperty("path1").trim();
          PathFileXML2 = props.getProperty("path2").trim();
       } catch(Exception e) {
          //Gestisco l'eccezione.
       }
    }
    Per il momento preferisco il secondo.
    Volevo sapere se ci sono modi piu' furbi per settare questo tipo di variabili, pubblicazioni che trattano argomenti affini o comunque se qualcuno avesse qualche idea in merito.
    Ciao e grazie delle eventuali risposte.

  2. #2
    Ciao,
    non so se ho capito bene quello che devi fare, ma mi sembra che tu debba passare ad una servlet dei parametri di inizializzazione (che nella fattispecie sono nomi di file), e che i metodi che utilizzano questi parametri siano già presenti in una classe astratta che ogni servlet deve estendere.
    In questo caso, non è sufficiente utilizzare il tag "init-param" di "servlet" all'interno del web.xml?

    Ciao,

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Si, hai capito e potrei fare cosi', però non risolve i miei dubbi. Quello che mi serve e' un modo per costingere chi utilizzera' il modulo in futuro(quindi non io) a settare tali parametri.
    Il mio dubbio e': Mettendoli come InitParameter della servlet e' possibile che chi utilizzera' il modulo in futuro si dimentichi di settarli? (Il problema era analogo anche nelle due opzioni che avevo proposto).
    Il problema e' abbastanza banale e forse mi sto scervellando per nulla, visto che dei vincoli ci devono pur essere.
    In ogni caso grazie, credo che usero' quest'ultimo suggerimento, visto che sto lavorando con delle servlet.
    Mi sa che non c'e' altro modo che scrivere un'accurata documentazione da allegare al file jar per dissipare i miei dubbi.

  4. #4
    Se vuoi proprio essere sicuro che chi estenderà la tua classe definisca i path dei file, puoi fare come dicevi tu, cioè definire nella tua classe uno o più metodi astratti (ad esempio getPath1(), getPath2(), ecc.), che poi chi estende la classe è costretto ad implementare (e a quel punto può fare come gli pare, cioè utilizzare gli init-param della servlet o cablare i nomi nel codice...).

    Ciao,

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.