[voikko] Malaga-Javan uusi versio julkaistu

Harri Pitkänen hatapitk at iki.fi
Mon Feb 16 18:08:33 EET 2009


On Monday 16 February 2009, Hannu Väisänen wrote:
> Malaga-luokka ei toimi, jos Java-ohjelmassa on useampi kuin yksi säie
> ja jos kaksi säiettä käyttää Malaga-luokkaa yhtaikaa. Ulkomaan
> kielellä sanottuna Malaga-luokka ei ole thread-safe.
>
> Tein Malaga-Java -pakettiin uuden luokan, StaticMalaga, jonka pitäisi
> olla synkronoitu niin, että Malaga analysoi sanan ja palauttaa
> tulokset muuttujassa tyyppiä Collection muitten säikeitten pääsemättä
> sotkemaan asiaa. Esimerkki luokan käytöstä on tiedostossa
> examples/StaticExample.java.

Enpä minäkään tuota ehtinyt vielä testaamaan, mutta koodia katsoessani 
huomasin metodissa StaticMalaga.init(String projectFile) pari ongelmaa. Siinä 
asetetaan ihan alkupuolella
  initialized = true;
vaikka tuossa vaiheessa ei vielä tiedetä, onnistuuko alustaminen. Jos jotain 
menee pieleen (esim. projektitiedostoa ei ole olemassa), ei uutta yritystä 
voi enää tehdä, koska tuo alustusmetodi luulee alustuksen onnistuneen ja 
palaa tekemättä mitään.

Sitten kohdassa
      malaga = new Malaga (projectFile);
      if (malaga == null) {
        LOG.severe ("StaticMalaga: Variable malaga is null. This should never
                    happen. Exiting.");
        System.exit (1);
      }
tuo if-lauseen ehto ei tosiaankaan koskaan voi olla Java-kielessä tuossa 
tilanteessa tosi, joten tarkistus on tarpeeton. Lopuksi logituksessa
  LOG.severe ("StaticMalaga: Can not initialize Malaga.\n" + t.getMessage()
  + "\nExiting.");
sanotaan "Exiting", muttei tuossa kuitenkaan kutsuta System.exit-funktiota.

Ehkä lisäksi kannattaisi tarkistaa, että jos alustusmetodia kutsutaan toisen 
kerran kun malaga on jo alustettu, oliko pyydetty projektitiedosto sama kuin 
se, millä alustus alun perin tehtiin. Jos tiedosto ei ole sama, kannattaa 
heittää poikkeus, jotta kutsuva puoli saa tietää, ettei se saanutkaan 
haluamaansa tiedostoa käyttöön, vaan siellä on auki joku muu projekti.

Säieturvallisuuden puolesta tuo koodi näyttäisi ihan toimivalta. Toivottavasti 
jossain vaiheessa ehtisin tekemään tälle asialle Voikon puolellakin jotain. 
Libvoikon käytön hankaluus monisäikeisissä ohjelmissa on tällä hetkellä ehkä 
suurin Voikon käyttöä rajoittava ongelma.

Harri



More information about the voikko mailing list