04. januar 2007 - 01:05Der er
19 kommentarer og 1 løsning
Afhængighed?
Hejsa,
Først vil jeg lige beskrive mit setup:
Der er Klasse1 som laver nye instanser af Klasse2, hver gang en klient tilkobler sig, der extender Threads, således der kan håndteres mere end 1 klient af gangen. Dette er standard trådning.
I Klasse2 vil jeg nu gerne bruge klassen Klasse3, men denne klasse skal indlæse et HashMap fra en fil på harddisken, som den skal bruge når den behandler data. Denne fil ændrer sig ikke med mindre man kalder en speciel metode.
Mit "problem" er, at hver gang en klient tilkobler sig, oprettes der en ny instans af Klasse2, som igen opretter en ny instans af Klasse3 der laver I/O idet den indlæser HashMappet.
Nu er mit spørgsmål, kan man lave således alle Klasse2 instanserne deler den "samme" instans af Klasse3 idet jeg gerne vil undgå at indlæse den flere gange, for at mindske på I/O'en til harddisken, og dermed optimere hastigheden. Kan det klares ved at lave attributten i Klasse3 der indeholder HashMap'et til static, eller hvordan?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hm, ikke helt forstået. For Klasse1 laver en socket der lytter efter klienter. Når en klient tilkobler sig, kaldes new Klasse2()... ind i den klasse laves der end ny Klasse3 klass = new Klass3().. hvorefter metoderne der bliver tilgængelige i klass, bliver brugt.
Hvis man nu skulle udvide denne model til at være et log modul der kan lave log, hvor man angiver filnavn man vil gamme i, og en String med det tekst man vil gemme, er det så mest hensigtsmæssigt at bruge singleton her også, eller er det bedre at oprette en ny instans hele tiden?
Jo, jeg har læst den artikel. Jeg fik bare et mindre problem med Logger. Jeg vil gerne have den laver XML log som den gør default. Men når jeg siger den skal appende til log filen, laver den nye <xml... headere, men den skal jo bare forsætte med at recorde?
public class AppendToLog { public static void main(String[] args) throws Exception { Logger logger = Logger.getLogger("Test"); logger.addHandler(new HackFileHandler("C:\\hacklog.log", Level.FINE)); logger.info("This is a test"); } }
class HackFileHandler extends FileHandler { public HackFileHandler() throws IOException, SecurityException { this("NUL:", Level.INFO); } public HackFileHandler(String fnm, Level lvl) throws IOException, SecurityException { super(fnm, true); setLevel(lvl); // start hack long len = (new File(fnm)).length(); if(len > 7) { super.close(); RandomAccessFile raf = new RandomAccessFile(fnm, "rw"); raf.setLength(len - 7); raf.close(); setFormatter(new HackFormatter()); setOutputStream(new FileOutputStream(fnm, true)); } // slut hack } }
class HackFormatter extends XMLFormatter { public String getHead(Handler h) { return ""; } }
<?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2007-01-09T22:34:55</date> <millis>1168400095000</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> </log> <?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2007-01-09T22:34:56</date> <millis>1168400096609</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> </log> <?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2007-01-09T22:34:57</date> <millis>1168400097984</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> </log> <?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2007-01-09T22:34:58</date> <millis>1168400098828</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> </log>
hacklog.log ===========
<?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2007-01-09T22:34:55</date> <millis>1168400095000</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> <record> <date>2007-01-09T22:34:56</date> <millis>1168400096609</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> <record> <date>2007-01-09T22:34:57</date> <millis>1168400097984</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> <record> <date>2007-01-09T22:34:58</date> <millis>1168400098828</millis> <sequence>0</sequence> <logger>Test</logger> <level>INFO</level> <class>january.AppendToLog</class> <method>main</method> <thread>10</thread> <message>This is a test</message> </record> </log>
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.