seducy.net logo (Blogging Community)
Blogverzeichnis
RSS-Verzeichnis
NewsGroups

TrueTypeFonts
Cliparts
Witze-Archiv

Eintrag Linkliste
Lexikon
Musik Download

Impressum





Diskussionsgruppen
Aldi Aldi
AMD AMD
Arbeit Arbeit
Architektur Architektur
Astrologie Astrologie
Astronomie Astronomie
Auto Auto
Auto-Smart Auto-Smart
Bahn Bahn
Beruf Beruf
Biologie Biologie
Bizarre Bizarre
Buecher Buecher
CCC CCC
Chemie Chemie
Datenschutz Datenschutz
DDR DDR
Delphi Delphi
Denksport Denksport
DerTag DerTag
DerTag-Schweiz DerTag-Schweiz
Deutsche-Sprache Deutsche-Sprache
DotNet DotNet
Drogen Drogen
Drucker Drucker
Elektronik Elektronik
Essen Essen
Exchange Exchange
Fahrrad Fahrrad
Familie Familie
Fernsehen Fernsehen
Festplatten Festplatten
Film Film
Finanzen Finanzen
Firewall Firewall
Fotografie Fotografie
Funk Funk
Fussball Fussball
Garten Garten
Geschichte Geschichte
Gnome Gnome
Golf Golf
GPS GPS
Grafikkarten Grafikkarten
Handel Handel
Handhelds Handhelds
Handy Handy
Handy-Oesterreich Handy-Oesterreich
Hardware Hardware
Haushalt Haushalt
Heimkino Heimkino
Heimwerker Heimwerker
Intel Intel
Internet Internet
Java Java
JavaScript JavaScript
KDE KDE
Knigge Knigge
Laufen Laufen
Lyrik Lyrik
Mac Mac
Mathematik Mathematik
Medizin Medizin
Menschenrechte Menschenrechte
Microsoft-Office Microsoft-Office
Militaer Militaer
Modellbau Modellbau
Motorsport Motorsport
Musik Musik
MySQL MySQL
Mystik Mystik
Naturheilkunde Naturheilkunde
Netzwerk Netzwerk
Notebooks Notebooks
Notfall Notfall
Novell Novell
OS2 OS2
Pascal Pascal
Perl Perl
Philosophie Philosophie
PHP PHP
Physik Physik
Politik Politik
Politik-Oesterreich Politik-Oesterreich
Post Post
Psychologie Psychologie
Python Python
Raumfahrt Raumfahrt
Recht Recht
Recht-Oesterreich Recht-Oesterreich
Recovery Recovery
Reisen Reisen
Religion Religion
Romantik Romantik
Rundfunkfinanzierung Rundfunkfinanzierung
SAP SAP
ScienceFiction ScienceFiction
Segeln Segeln
Senioren Senioren
Sexualitaet Sexualitaet
Spiele Spiele
StarOffice StarOffice
Studium-Schule Studium-Schule
Tauchen Tauchen
Theologie Theologie
Tiere Tiere
Umwelt Umwelt
Unix Unix
Unix-Debian Unix-Debian
Verkehr Verkehr
Verschiedenes Verschiedenes
Verschwoerungen Verschwoerungen
Viren Viren
VisualBasic VisualBasic
Webserver Webserver
Windows Windows
Wirtschaft Wirtschaft
Witze Witze
Kredit auch ohne Schufa Kreditvermittlung
ohne Schufa
     
11.03.
Java
Mirko Ebert

REST und Query

/cars?manufacturer=porsche&color=blue&year=2000 oder wie?

Das wäre meine Empfehlung, weil es die übliche Kodierung wäre (HTML
Formular).

Mirko


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Mirko Ebert"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400637 in der Newsgroup: de.comp.lang.java



10.03.
Java
Mirko Ebert

Parameterübergabe
Hm, erstaunlich ich werde es auch mal testen. Aber die Abweichung ist
ca 1,3 %. Natürlich war nicht viel zu erwarten aber die Frage ist ist
das ein zufälliger Messfehler?


Gruss Mirko
http://programming-2.blogspot.com/


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Mirko Ebert"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400620 in der Newsgroup: de.comp.lang.java



10.03.
Java
Chris Seidel

[OT] REST und Query
Hallo,

seh ich dass richtig, dass bei Queries auch bei REST wieder auf  URL-Parameter zurückgegriffen wird?

z.B. wenn ich alle Autos in Blau von Porsche Bj 2000 suche?

/cars/porsche/blue/2000 wär ja irgendwie etwas heftig hart kodiert.

/cars/manufacturer/porsche/color/blue/year/2000 ist doch och doof, oder?

Also doch wieder

/cars?manufacturer=porsche&color=blue&year=2000 oder wie?

Thx



...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Chris Seidel"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400632 in der Newsgroup: de.comp.lang.java



10.03.
Java
Martin Hemeler

Designfrage Festplattenzugriff
Hallo,

ich plane ein Tool das Temperaturen und andere Werte loggt. Jetzt überlege
ich wie ich die Dateiablage organisiere. Ich denke an 100 Sensorstationen
die jeweils 15 Werte erfassen. Die Werte sollen im Sekunden-Takt geloggt
werden.

Hier mal kurz mein persönliches Brainstorming:

1. Für jeden Wert gibt es eine eigene Text-Datei, d.h. ich muss sekündlich
1500 Dateien öffnen, einen Wert reinschreiben und wieder schließen --> Das
wird eine normale Festplatte nicht schaffen
2. Ich puffere die Werte z.B. 1 Minute lang und muss dann die Datei nur
einmal öffnen und schreibe den ganzen Werteblock in die Datei --> Wenn alle
Puffer gleichzeitig geleert werden hilf das nur bedingt
3. Ich puffere die Werte und reiche ein "Schreibtoken" rum, so dass nur ein
Prozess schreiben darf --> Je nach Rechnerkonfiguration kann es denke ich
immernoch zu engpässen kommen weil die Threads  schneller das Schreibtoken
weitergeben als die Festplatte schreiben kann, also:
4. Puffer, Schreibtoken, Zwangspause vor Weitergabe des Token?
5. Ansatz Datenbank: In einem früheren Projekt (Java mit Postgres-Datenbank)
meine ich in Erinnerung zu haben dass das schreiben länger dauerte, man die
Daten aber schneller wieder aus der Datenbank bekam (Filtern/Suchen) -->
Hilft mir bei meinem jetzigen Problem nicht weiter.


Habt ihr Lösungsvorschläge?

Danke für die Tipps!




...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Martin Hemeler"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400624 in der Newsgroup: de.comp.lang.java



10.03.
Java
Christof Kluß

Zugriff per ODBC auf eine Access Datenbank
Hallo,

ich versuche per ODBC auf eine entfernte Access-Datenbank zuzugreifen, dazu habe ich unter Windows "Einstellungen/Systemsteuerung/Verwaltung/Datenquellen - ODBC" die entsprechende Quelle hinzugefügt und im Java-Quelltext dann etwas in der folgenden Art stehen:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();

conn = java.sql.DriverManager.getConnection(databaseURL, user, password);

Damit wird jetzt die Verbindung auch problemlos erstellt. In dem Programm ist eine lange SQL Anfrage die mit "executeQuery" ausgeführt wird. An dieser Stelle tritt folgender Fehler auf:

"java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]Ein Teil der SQL-Anweisung ist zu tief geschachtelt. Schreiben Sie die Abfrage neu, oder teilen Sie sie in kleinere Abfragen auf."

Das gleiche Programm läuft bei einem externen Mitarbeiter wohl einwandfrei, ohne dieses Problem. Jedoch mit der gleichen Windows XP Version und auch mit Java 6.

Habt ihr einen Vorschlag, wie ich dieses Problem beheben kann oder jedenfalls herausfinden könnte woran es liegt?

Gruß,
Christof



...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Christof Kluß"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400616 in der Newsgroup: de.comp.lang.java



09.03.
Java
Uwe Naumann

JSP-Designfrage
Hallo allerseits,

folgendes Problem beschäftigt mich gedanklich schon einige Tage und
mir fehlt irgendwie immer noch der richtige Ansatz.

Gegeben ist eine Fremd-Applikation, die via JSP-Frontend angesprochen
werden soll. Ansprache via Java-API, das Ding läuft dann InProcess.
Knackpunkt dabei ist, das ich von dem Ding nur eine Instanz erzeugen
kann/darf. Anwendungstypisch neigen aber Webprojekte dazu von mehr als
einem Nutzer zeitgleich genutzt zu werden.

Wie das Ganze sinnvoll aufteilen?

Da die Fremd-Applikation die ggfs. zeitgleich ankommenden Anfragen nur
sequentiell abarbeiten kann muss ich das über ne Warteschlange
abwickeln. An sich kein Problem und lösbar.

Wohin mit der Fremd-Lib? Momentan würde ich das Ganze über ein
Singleton kapseln. Ja, Singletons sind böse, hier würde ich das aber
durchaus als sinnvoll ansehen.

Bleibt die Frage: Wohin mit dem Singleton-Objekt? Irgendwie fühle ich
mich nicht wohl sowas innerhalb einer Web-App so laufen zu lassen. Das
Ganze also in einen eigenen Dienst stecken?

Wie würdet Ihr sowas angehen? Ich befürchte fast das ich mittlerweile
am guten alten Wald-Bäume-Problem leide und einfach den passenden Weg
nicht sehe.

LG Uwe


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Uwe Naumann"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400613 in der Newsgroup: de.comp.lang.java



09.03.
Java
Werner Peter

Soap-Request eines JAX WS-Clients modifizieren
Hallo,

ich habe mich in JAX-WS eingearbeitet und habe einen Client geschrieben,
der einen Webservice aufruft.

Nun muss ich einen anderen Webservice aufrufen, der etwas ungewöhnlich ist,
sprich ich muss entweder die Soap-Anfrage selbst generieren oder
modifizieren.

Letzteres wäre mir lieber, daher die Frage: Kann ich von JAX-WS die Anfrage
generieren, irgendwie abfangen + modifizieren und absenden lassen?

Per google habe die Sache mit dem SOAPHandler entdeckt, aber scheint nur
für die andere Richtung gedacht zu sein, d.h. wenn man selbst einen
Webservice anbieten will.

Gruß,
Werner



...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Werner Peter"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400612 in der Newsgroup: de.comp.lang.java



05.03.
Java
Robert Kochem

Datei im selben Verzeichnis wie JAR einlesen
Michael Thelen schrieb:

Jedenfalls gelingt es mir nicht mit getResourceAsStream() auf meine XML
Datei zuzugreifen. In Eclipse geht es auch nicht. Da liegt die XML Datei
im Root meine Projektordners. Da komme ich nur direkt dran mit new
File("meineDatei.xml") ohne Pfandangabe. Das geht. Aber spätestens mit
dem JAR komme ich dann nicht weiter.

Im Netz ist an verschiedenen Stellen eine Funktion namens
"getClassLocation(..)", mit der man für eine Klasse herausbekommet in
welcher JAR-Datei sie liegt. Von da aus kann man natürlich auch das
aktuelle Programmverzeichnis ermitteln.
Der Kern dieser Funktionen sieht immer in etwa so aus:

Class<?> mainClass = MeineKlasseXYZ.class;
ProtectionDomain pDomain = mainClass.getProtectionDomain();
CodeSource cSource = pDomain.getCodeSource();
URL loc = cSource.getLocation();
File f = new File(loc.toURI());
if (f.isFile()) f = f.getParentFile();

Robert


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Robert Kochem"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400606 in der Newsgroup: de.comp.lang.java



03.03.
Java
Malte Schirmacher

Mal ne Frage...
Bubi Meier wrote:

Macht er das immer von links nach rechts? Kann man sich darauf verlassen?

Ja. Ja.


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Malte Schirmacher"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400579 in der Newsgroup: de.comp.lang.java



03.03.
Java
Matthias Keller

OT: Englische Frage
Thorsten Kinze schrieb:
Hallo Matthias,

gibt es einen (für mich) ersichtlichen Grund, warum du deine Frage in einer deutschen Newgroup auf Englisch formulierst?

Ist vielleicht chemnitz.comp nur englischsprachig?

Danke für die Antwort und nette Grüße aus dem Münsterland

Thorsten

Einfach nur weils Spaß macht ;-)
Nein, wahrscheinlich aus Reflex

Sinnvolle Tipps hab ich trotzdem bekommen, also passt das



...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Matthias Keller"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400587 in der Newsgroup: de.comp.lang.java



02.03.
Java
Thorsten Kinze

OT: Englische Frage (was: Problem with GridLayoutM
Hallo Matthias,

gibt es einen (für mich) ersichtlichen Grund, warum du deine Frage in einer deutschen Newgroup auf Englisch formulierst?

Ist vielleicht chemnitz.comp nur englischsprachig?

Danke für die Antwort und nette Grüße aus dem Münsterland

Thorsten


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Thorsten Kinze"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400577 in der Newsgroup: de.comp.lang.java



02.03.
Java
Werner Hofmann

OSGi + JAX-WS
Hallo,

ich möchte einen JAX-WS Webservice-Client bzw. Server in einer OSGi Umgebung
zum laufen bekommen. Das Framework ist das aktuelle Equinox. JDK 1.6
Als reine Java-Anwendung oder deployed im JBoss läuft der Webservice
astrein.

Leider habe ich massive Probleme und weiß momentan nicht mehr weiter.

1) CXF habe ich ausprobiert, kann ich aber nicht benutzen.
Es gibt damit Probleme mit meinen Datentypen und somit wird der Webservice
gar nicht deployed. (WSDL nicht zugreifbar)

2) Ich habe versucht die JAX-WS Libs in mein Impl-Bundle zu packen. Da bin
ich auf zwei Probleme gestoßen:
2.1) Eine ganze Latte von Klassen aus dem rt.jar oder tools.jar werden nicht
im OSGi-Framework geladen. (Zum test habe ich diese Klassen in mein Bundle
mit aufgenommen und im Classpath angegeben, das erzeugte jedoch neue
Probleme)
2.1) Es gab Probleme beim Auslesen der Annotationen meiner Webservice-
Klassen. Diese wurden nämlich nicht gelesen, ich habe das zum Test selbst
getan und bekam dann für die entsprechende Klasse keine Fehlermeldungen
mehr.
2.2) Ich habe es nicht geschafft unter Equinox ein Extension-Bundle zum
Laufen zu bekommen. D.h. Ich installiere das Extension-Bundle und exportiere
das gewünschte Package, doch ein Import in meinem Impl-Bundle für zu einer
can not resolve Fehlermeldung.

3) Es gibt im Metro-Projekt 3 Bundles für JAX-WS. Das habe ich heute
entdeckt. Leider bekomme ich beim Starten der Bundles u.a. die
Fehlermeldung, daß das Package com.ibm.security.utils nicht im Framework
vorhanden ist. Anscheinend war dieses war offensichtlich mal in einem
jce.jar ist es aber nicht mehr.

Wer hat einen WS mit JAX-WS unter OSGi Equinox zum laufen bekommen und kann
mir helfen?

Viele Grüße,
Werner



...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Werner Hofmann"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400576 in der Newsgroup: de.comp.lang.java



01.03.
Java
Chris Seidel

java.util.prefs.Preferences, Windows Registry
Hallo,

wenn ich mittels "Preferences.userNodeForPackage(getClass()).put..) einen  Wert in die Registry schreibe, so werden da Slashes in den Nodename  eingebaut.

myFooBar -> my/Foo/Bar

Welcher Sinn steckt da dahinter?

Danke


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Chris Seidel"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400571 in der Newsgroup: de.comp.lang.java



01.03.
Java
Beat Keller

Methode vor und nach der Ausführung einer TestS

        public static void main(String[] args)
    {
        WorkspaceBuilder.buildTestWorkspace();
        TestRunner.run(suite());
        WorkspaceBuilder.clearWorkspace();
    }

}

Hallo Gilbert,
wenn ich das recht im Kopf habe, so verwendet Eclipse die main()-
Methode nicht. Es wird direkt der TestRunner aufgerufen.
Es gibt für Dinge die vor den Tests ausgeführt werden sollen die
Methode setUp() welche du überschreiben kannst. Die wird vor jedem
Test aufgerufen.
Für die Dinge, die nach den Tests ausgeführt werden sollen ist die
Methode tearDown() verantwortlich. Diese wird nach jedem Test
aufgerufen, ausser der Test bricht schon beim setUp() ab. Dann wird
weder der Test selbst, noch das tearDown() durchlaufen.

Hoffe das hilft dir.
Gruss
Beat




...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Beat Keller"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400568 in der Newsgroup: de.comp.lang.java



01.03.
Java
auge thaler

immobilien baufinanzierung , eigenheimzulage 10e ,
immobilien baufinanzierung , eigenheimzulage 10e , eigenheimzulage
steuern , immobilienfinanzierung 130 , bauspardarlehen steuerlich ,
fiba baufinanzierung , bauspardarlehen vorzeitig zurückzahlen ,

+
+
+++ GUENSTIGE KREDITE ONLINE +++ KREDITE IM INTERNET OHNE SCHUFA
IMMOBILIEN +++
+
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
http://WWW.IMMOBILIEN-KREDIT-ONLINE.NL
+
+
+
+

hypothek zinsen zinsrechner hypothek
höhe der eigenheimzulage finanzierung für haus
rückzahlung bauspardarlehen immobilienfinanzierung über
lebensversicherung
gmac baufinanzierung bank haus finanzierung
darlehen für eigentumswohnung private immobilienkredite
bauspardarlehen ablösen eigenheimzulage &
zinssätze immobilienkredite zinsrechner hypothek
immobilienfinanzierungen immobilie finanzieren rechner
günstigste hausfinanzierung für immobilienfinanzierungen
ein hypothekenkredit finanzierung immobilie
immobilienfinanzierung in baufinanzierung eigentumswohnung
hypothekenkredit rechner hypothek 10
immobilienfinanzierung günstig kredit zinsen haus


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "auge thaler"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400567 in der Newsgroup: de.comp.lang.java



26.02.
Java
Matthias Keller

Problem with GridLayoutManager (IntelliJ IDEA)
Hello,

I am writing a small program with a GUI using the GridLayoutManager of IntelliJ. I am using the IDEA Java IDE and the built-in GUI Designer.

At runtime I want to add buttons to a panel, hence I use the following code:

JButton b = new JButton();
// set some button properties (text, action listener, ...)
panel.add( b );

When I run the program and I reach the add() call, I get the following exception:

java.lang.NullPointerException
at com.intellij.uiDesigner.core.GridLayoutManager.addLayoutComponent(GridLayoutManager.java:134)
at java.awt.Container.addImpl(Container.java:1074)
at java.awt.Container.add(Container.java:365)
at ...WelcomeForm.addModule(WelcomeForm.java:39)

Since this code runs properly if I use another layout manager for the panel, IMHO it must be related to the GridLayoutManager

I guess I need to provide a constraint object, i.e. use

panel.add( b, constraintObject );

Probably when leaving this constraintObject away it uses null implicitly, but that causes the NullPointerException.

But how to construct this constraintObject?

Thanks in advance,
Matthias



...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Matthias Keller"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400557 in der Newsgroup: de.comp.lang.java



26.02.
Java
Gilbert Mirenque

Testarchitektur
Hallo Leute,
ich bin gerade dabei mir meinen Workflow des Testens ein wenig zu
optimieren bzw. zu vereinfachen. Am meisten, denke ich, könnte ich davon
profitieren, wenn ich den Testcode von den Testdaten strikt trennen
würde. Einmal Testcode geschrieben, können dann einfach neue Testdaten
hinzugefügt werden. Ich denk z.B. daran, für jede Testklasse einen
Ordner mit demselben Namen anzulegen, worin die Daten abgelegt werden.
Für jede Testmethode können dann Dateien mit demselben Namen darin
hinzugefügt werden, welche als Inputdaten dienen. Weiterhin werden die
erwarteten Daten wieder in einer Datei mit demselben Namen der
Inputdatei abgelegt und noch ein "_expected" an die Endung rangehangen.
Nun könnten vor jedem Testlauf per Reflection die Inputdaten gesetzt und
die zu erwartenden Daten registriert werden. Was haltet ihr von diesem
Vorgehen? Ich habe noch nichts dergleichen implementiert, dies waren
meine ersten Gedanken dazu. Wie macht ihr das mit der Trennung von
Testdaten und Testcode? Habt ihr noch andere Vorgehensweisen? Mich würde
es freuen, wenn ihr einfach mal berichtet und bewertet.

Viele Grüße,
Gilbert


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Gilbert Mirenque"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400552 in der Newsgroup: de.comp.lang.java



25.02.
Java
Heiner Kücker

closeable blocking queue
Hallo,

mit dem Problem einer

closeable blocking queue

haben sich scheinbar schon andere Leute beschäftigt:

http://www.google.de/search?hl=de&source=hp&q=closeable+blocking+queue&meta=&aq=f&oq
Die Idee von

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html

hatte ich auch so ähnlich umgesetzt, aber mit einem volatile closed-
Flag.

Diese naive Lösung funktioniert nicht korrekt, da in der Zeit, wo ein
blockierter Thread in

take()

wartet, das Flag gesetzt werden kann, was der wartende(blockierte)
Thread niemals
erfährt.

Zitat:
"Also, it seems that methods like hasNext() and isClosed() are useless
because by
the time you get to call tak() the queue might have changed."


In der Doku

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html

wird ein poison-Objekt empfohlen:

Zitat:
"A BlockingQueue does not intrinsically support any kind of "close" or
"shutdown" operation to indicate that no more items will be added. The
needs and usage of such features tend to be implementation-dependent.
For example, a common tactic is for producers to insert special end-of-
stream or poison objects, that are interpreted accordingly when taken
by consumers."

Dies wird auch im Buch
"Java Concurrency in Practice (Taschenbuch)
von Brian Goetz (Autor), Joshua Bloch (Autor), Joseph Bowbeer (Autor),
Doug Lea (Autor), David Holmes (Autor), Tim Peierls (Autor) "
http://www.amazon.de/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1267108929&sr=1-1

Seite 156/157 empfohlen.

Leider lässt sich weder in der Sun-Doku noch im Buch jemand darüber
aus,
wie man das mit der Benutzung von Generics vereinbaren kann, ohne
jedem
normal zu verarbeitenden Objekt per Polymorphie oder Info am Exemplar
die "ich bin jetzt nicht die Gift-Pille"-Information mitgeben soll.

Ich habe es mal mit einer gewrappten Raw-BlockingQueue probiert,
so dass ich im inneren der Klasse Generics aushebele.

Beim Entwickeln gab es gleich einen fetten Deadlock.

Könntet Ihr mal schauen, ob es so korrekt ist
(korrekte Behandlung auf Producer- und Consumer-Seite,
Vermeidung Deadlocks).

Ist noch etwas roh.
-------------------------------------------

package ???;

import java.util.Collection;
import java.util.concurrent.BlockingQueue;

/**
 * Gegenüber
 * {@link BlockingQueue}
 * eingeschränktes Interface,
 * welches mich bei der
 * Benutzung in Dekoratoren
 * nicht zwingt, alle
 * möglichen von mir nicht
 * benötigten Methoden zu
 * delegieren.
 *
 * @param <E> the type of elements held in this queue
 * @see BlockingQueue
 * @see SimpleBlockingQueueAdapter
 * @author Heiner K&uuml;cker
 */
public interface SimpleBlockingQueue<E>
{
    /**
     * Inserts the specified element into this queue, if possible.
When
     * using queues that may impose insertion restrictions (for
     * example capacity bounds), method <tt>offer</tt> is generally
     * preferable to method {@link Collection#add}, which can fail to
     * insert an element only by throwing an exception.
     *
     * @param o the element to add.
     * @return <tt>true</tt> if it was possible to add the element to
     *         this queue, else <tt>false</tt>
     * @throws NullPointerException if the specified element is
<tt>null</tt>
     */
    boolean offer(E o);

    /**
     * Adds the specified element to this queue, waiting if necessary
for
     * space to become available.
     * @param elementToPut the element to add
     * @throws InterruptedException if interrupted while waiting.
     * @throws NullPointerException if the specified element is
<tt>null</tt>.
     */
    void put(E elementToPut) throws InterruptedException;

    /**
     * Retrieves and removes the head of this queue, or <tt>null</tt>
     * if this queue is empty.
     *
     * @return the head of this queue, or <tt>null</tt> if this
     *         queue is empty.
     */
    E poll();

    /**
     * Retrieves and removes the head of this queue, waiting
     * if no elements are present on this queue.
     * @return the head of this queue
     * @throws InterruptedException if interrupted while waiting.
     */
    E take() throws InterruptedException;

    /**
     * Returns the number of elements in this queue.
     *
     * @return the number of elements in this queue
     */
    int size();

    /**
     * Returns <tt>true</tt> if this queue contains no elements.
     *
     * @return <tt>true</tt> if this queue contains no elements
     */
    boolean isEmpty();
}

---------------------------------------------

package ???;

import java.util.concurrent.BlockingQueue;

/**
 * Adapter von einer
 * {@link BlockingQueue}
 * auf das Interface
 * {@link SimpleBlockingQueue}.
 *
 * @see SimpleBlockingQueue
 * @see BlockingQueue
 * @param <E> Element-Typ dieser Queue
 * @author Heiner K&uuml;cker
 */
public class SimpleBlockingQueueAdapter<E>
    implements SimpleBlockingQueue<E>
{
    /**
     * Adapted {@link BlockingQueue}.
     */
    private final BlockingQueue<E> adaptedBlockingQueue;

    /**
     * Konstruktor.
     *
     * @param adaptedBlockingQueue Adapted {@link BlockingQueue}
     */
    public SimpleBlockingQueueAdapter(
            final BlockingQueue<E> adaptedBlockingQueue )
    {
        if ( adaptedBlockingQueue == null )
            // avoid null
        {
            throw new IllegalArgumentException(
                    "adaptedBlockingQueue is null" );
        }

        this.adaptedBlockingQueue             adaptedBlockingQueue;
    }

    /**
     * @see SimpleBlockingQueue#offer(Object)
     * @see java.util.concurrent.BlockingQueue#offer(Object)
     */
    public boolean offer(
            final E element )
    {
        return this.adaptedBlockingQueue.offer(
                element );
    }

    /**
     * @see SimpleBlockingQueue#put(java.lang.Object)
     * @see java.util.concurrent.BlockingQueue#put(Object)
     */
    public void put(
            final E element )
        throws InterruptedException
    {
        this.adaptedBlockingQueue.put(
                element );
    }

    /**
     * @see SimpleBlockingQueue#poll()
     * @see java.util.concurrent.BlockingQueue#poll()
     */
    public E poll()
    {
        return this.adaptedBlockingQueue.poll();
    }

    /**
     * @see SimpleBlockingQueue#take()
     * @see java.util.concurrent.BlockingQueue#take()
     */
    public E take()
        throws InterruptedException
    {
        return this.adaptedBlockingQueue.take();
    }

    /**
     * @see SimpleBlockingQueue#size()
     * @see java.util.concurrent.BlockingQueue#size()
     */
    public int size()
    {
        return this.adaptedBlockingQueue.size();
    }

    /**
     * @see SimpleBlockingQueue#isEmpty()
     * @see java.util.concurrent.BlockingQueue#isEmpty()
     */
    public boolean isEmpty()
    {
        return this.adaptedBlockingQueue.isEmpty();
    }
}


---------------------------------------------

package ???;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * Dieser Dekorator für eine
 * {@link SimpleBlockingQueue} fügt
 * die Funktionalität hinzu,
 * dass eine Datenquelle
 * (Producer) das Signal geben
 * kann , dass  keine weiteren
 * Elemente mehr zu erwarten sind
 * {@link #putClose()}.<br/>
 * Diese Information kann von einer
 * Datensenke (Consumer) abgefragt
 * werden, um die Verarbeitung der
 * Daten zu beenden und eventuell
 * offene Resourcen wie
 * Datenbank-Connections zu
 * schliessen.
 * <br><br/>
 * Nach dem Schliessen auf Producer-Seite
 * sollen aber eventuell noch in der Queue
 * vorhandene Elemente verarbeitet
 * werden, weshalb die Abfrage, ob die
 * Queue geschlossen ist, auf der
 * Consumer-Seite durch die getrennte
 * Methode
 * {@link #isTakeClosed()}
 * erfolgt.
 * <br><br/>
 * Achtung, Achtung:<br/>
 * Wenn diese Queue leer und auf Producer-Seite
 * geschlossen ist (keine weiteren Elemente zu
 * erwarten), gibt die Methode
 * {@link #take()}
 * <code>null</code> als magisches
 * Ende-Signal zurück, was nicht dem Vertrag
 * der Methode
 * {@link BlockingQueue#take()}
 * entspricht.
 * <br><br/>
 * Die Lösung, ein spezielles
 * Ende-Objekt, ähnlich zum
 * Null-Objekt-Pattern, als Ende-Kennzeichen
 * zu verwenden, ist etwas schwierig mit der
 * Benutzung von Generics für den
 * Element-Typ der Queue zu
 * vereinbaren.<br/>
 * Deshalb wird intern mit einer
 * Raw-{@link BlockingQueue}
 * (Typ-Parameter wird ignoriert)
 * gearbeitet.
 * <br><br/>
 * Deshalb wird in dieser Klasse die
 * Annotation @SuppressWarnings("unchecked")
 * verwendet.
 *
 * @see SimpleBlockingQueue
 * @see SimpleBlockingQueueAdapter
 * @see BlockingQueue
 * @param <E> Element-Typ dieser Queue
 * @author Heiner K&uuml;cker
 */
@SuppressWarnings("unchecked")
public final class CloseableBlockingQueue<E>
//dieses Interface muss nicht unbedingt imlementiert werden, weil
CloseableBlockingQueue etwas anderes ist und weil die offer-Methode
nicht angeboten werden soll: implements SimpleBlockingQueue<E>
{
    /**
     * zu dekorierende Queue.
     */
    private final SimpleBlockingQueue decoratedBlockingQueue;

    /**
     * Merker, ob keine weiteren
     * Elemente mehr zu erwarten sind.
     * <br/><br/>
     * Da dieser Merker gesetzt sein kann,
     * obwohl es noch Elemente in der Queue
     * geben kann, wird dieser Merker nur
     * auf der Producer-Seite
     * {@link #put(Object)}
     * {@link #putClose()}
     * {@link #isPutClosed()}
     * verwendet.
     */
    private volatile boolean isPutClosed = false;

    /**
     * Spezielles Objekt als Markierung,
     * dass jetzt keine weiteren Elemente
     * aus der Queue zu erwarten sind.
     * <br/><br/>
     * In der Literatur wird dies ein
     * Sentinel-Objekt oder Poison-Pill-Objekt
     * (Giftpille) genannt.
     */
    private static final Object END_OF_QUEUE_OBJ = "END_OF_QUEUE_OBJ";

    /**
     * Konstruktor.
     *
     * @param blockingQueueToDecorate zu dekorierende Queue
     */
    public CloseableBlockingQueue(
            final SimpleBlockingQueue blockingQueueToDecorate )
    {
        this.decoratedBlockingQueue = blockingQueueToDecorate;
    }

    /**
     * Schliessen auf der Producer-Seite
     * (put-Thread).
     * <br/><br/>
     * Signal, dass keine weiteren
     * Elemente zu erwarten sind.
     * @throws InterruptedException diese Exception wird weiter
geworfen
     */
    public void putClose()
        throws InterruptedException
    {
//System.out.println( Thread.currentThread().getName() + "
putClose" );

        if ( this.isPutClosed )
        {
            throw new IllegalStateException(
                    "queue already closed" );
        }

        synchronized ( this.decoratedBlockingQueue )
            // Absichern, dass Operationen auf this.isPutClosed
            // und this.decoratedBlockingQueue atomar ablaufen
        {
            this.isPutClosed = true;

            /*
             * Ende-Markierung in die Queue setzen
             */
            try
            {
                // mit offer arbeiten, put gibt einen Deadlock
                while ( false == this.decoratedBlockingQueue.offer(
                        END_OF_QUEUE_OBJ ) )
                {
                    // warten, bis das hinzufügen
                    // des Elements geklappt hat
                    this.decoratedBlockingQueue.wait();
                }
            }
            finally
            {
                // alle wartenden take-Threads wecken
                this.decoratedBlockingQueue.notifyAll();
            }

            // alle wartenden take-Threads wecken
            this.decoratedBlockingQueue.notifyAll();
        }
    }

    /**
     * Zurückgeben, ob diese Queue für weitere
     * hinzuzufügende Elemente {@link #put(Object)}
     * geschlossen ist.
     *
     * @return ob diese Queue für weitere hizuzufügende
     *         Elemente geschlossen ist.
     */
    public boolean isPutClosed()
    {
        synchronized ( this.decoratedBlockingQueue )
            // Absichern, dass Operationen auf this.isPutClosed
            // und this.decoratedBlockingQueue atomar ablaufen
        {
            return this.isPutClosed;
        }
    }

    /**
     * Zurückgeben, ob diese Queue für weitere
     * zu entnehmende Elemente {@link #put(Object)}
     * geschlossen ist.
     *
     * @return ob diese Queue für weitere zu entnehmende
     *         Elemente geschlossen ist.
     */
    public boolean isTakeClosed()
    {
//System.out.println( Thread.currentThread().getName() + "
isTakeClosed" );
        synchronized ( this.decoratedBlockingQueue )
            // Absichern, dass Operationen auf this.isPutClosed
            // und this.decoratedBlockingQueue atomar ablaufen
        {
            if ( this.decoratedBlockingQueue.isEmpty() &&
                    this.isPutClosed )
            {
//System.out.println( Thread.currentThread().getName() + "
isTakeClosed true" );
                return true;
            }

//System.out.println( Thread.currentThread().getName() + "
isTakeClosed false" );
            return false;
        }
    }

    /**
     * Element einfügen.
     *
     * @param element einzufügendes Element
     * @throws InterruptedException diese Exception wird weiter
geworfen
     * @see SimpleBlockingQueue#put(Object)
     * @see java.util.concurrent.BlockingQueue#put(java.lang.Object)
     */
    public void put(
            final E element )
        throws InterruptedException
    {
//System.out.println( Thread.currentThread().getName() + " put " +
element );
        synchronized ( this.decoratedBlockingQueue )
        {
            if ( this.isPutClosed )
            {
                throw new IllegalStateException(
                        "queue already closed" );
            }

            try
            {
                // mit offer arbeiten, put gibt einen Deadlock
                while ( false == this.decoratedBlockingQueue.offer(
                        element ) )
                {
                    // warten, bis das Hinzufügen
                    // des Elements geklappt hat
                    this.decoratedBlockingQueue.wait();
                }
            }
            finally
            {
                // alle wartenden take-Threads wecken
                this.decoratedBlockingQueue.notifyAll();
            }
        }
    }

    /**
     * @see SimpleBlockingQueue#offer(Object)
     */
//    public boolean offer(
//            final E element )
//    {
////System.out.println( Thread.currentThread().getName() + " offer " +
element );
////        synchronized ( this.decoratedBlockingQueue )
//        {
//            if ( this.isPutClosed )
//            {
//                throw new IllegalStateException(
//                        "queue already closed" );
//            }
//
//            try
//            {
//                return this.decoratedBlockingQueue.offer(
//                        element );
//            }
//            finally
//            {
//                // alle wartenden take-Threads wecken
//                this.decoratedBlockingQueue.notifyAll();
//            }
//        }
//    }

    /**
     * Element entnehmen mit blockierendem Warten,
     * wenn kein Element vorhanden ist.
     * <br/><br/>
     * Wenn diese Queue leer und auf Producer-Seite
     * geschlossen ist (keine weiteren Elemente zu
     * erwarten) wird <code>null</code> als magisches
     * Ende-Signal zurückgegeben.
     *
     * @return nächstes Element oder <code>null</code>,
     *         wenn kein weiteres Element zu erwarten ist
     * @throws InterruptedException diese Exception wird weiter
geworfen
     * @see SimpleBlockingQueue#take()
     * @see java.util.concurrent.BlockingQueue#take()
     */
    public E take()
        throws InterruptedException
    {
//System.out.println( Thread.currentThread().getName() + "
take" );
        synchronized ( this.decoratedBlockingQueue )
        {
            while (
                    // solange die Queue leer ist
                    this.decoratedBlockingQueue.isEmpty() &&
                    // und die Queue auf der Producer-Seite
                    // (put-Thread) noch nicht geschlossen wurde
                    false == this.isPutClosed )
            {
//System.out.println( Thread.currentThread().getName() + " take
wait" );
                // auf nächstes Element warten, welches auch
                // das Ende-Objekt END_OF_QUEUE_OBJ sein kann
                this.decoratedBlockingQueue.wait();
            }

            if ( this.isTakeClosed() )
            {
                // null als Indikator für geschlossen zurückgeben
                return null;
            }

            Object elemObj;
            try
            {
//                elemObj //                    this.decoratedBlockingQueue.take();
                // mit poll arbeiten, take gibt einen Deadlock
                while ( ( elemObj                     this.decoratedBlockingQueue.poll() ) == null )
                {
                    // warten, bis das Abholen
                    // des Elements geklappt hat
                    this.decoratedBlockingQueue.wait();
                }
            }
            finally
            {
                // alle wartenden put/offer-Threads wecken
                this.decoratedBlockingQueue.notifyAll();
            }

//System.out.println( Thread.currentThread().getName() + " take " +
elemObj );
            if ( elemObj == END_OF_QUEUE_OBJ )
            {
                // null als Indikator für geschlossen zurückgeben
                return null;
            }

            return (E) elemObj;
        }
    }

    /**
     * Prüfen, ob die Queue leer ist.
     *
     * @return is empty
     * @see SimpleBlockingQueue#isEmpty()
     * @see java.util.Collection#isEmpty()
     */
    public synchronized boolean isEmpty()
    {
        return this.decoratedBlockingQueue.isEmpty();
    }

    /**
     * Zurückgeben der Anzahl Elemente in der Queue.
     *
     * @return size
     * @see SimpleBlockingQueue#size()
     * @see java.util.Collection#size()
     */
    public int size()
    {
        return this.decoratedBlockingQueue.size();
    }

    /**
     * Test.
     *
     * @param args wird ignoriert
     */
    public static void main(String[] args)
    {
        final CloseableBlockingQueue<String> closeableBlockingQueue             new CloseableBlockingQueue<String>(
                    new SimpleBlockingQueueAdapter<String>(
                            new LinkedBlockingQueue<String>(
                                    // nur ein Element erlaubt
                                    1 ) ) );

        final Thread producerThread             new Thread( "producer" )
        {
            @Override
            public void run()
            {
                System.out.println( "producer start" );
                try
                {
                    for ( int i = 0 ; i < 4 ; i++ )
                    {
                        System.out.println( "producer  put " + i );
                        closeableBlockingQueue.put(
                                "" + i );
                    }
                    closeableBlockingQueue.putClose();
                }
                catch ( InterruptedException e )
                {
                    System.err.println( e.getMessage() );
                    e.printStackTrace();
                }
                System.out.println( "producer stop" );
            }
        };

        producerThread.start();

        final Thread consumerThread             new Thread( "consumer" )
        {
            @Override
            public void run()
            {
                System.out.println( "consumer start" );
                try
                {
                    String elemFromQueue;
                    while (
                            // solange die Queue nicht geschlossen
                            false =closeableBlockingQueue.isTakeClosed()
                            // und nicht das magische null
                            // als Ende-Signal auftaucht
                            && ( elemFromQueue                                 closeableBlockingQueue.take() ) !null )
                    {
                        System.out.println( "consumer take "
+elemFromQueue );
                    }
                    System.out.println( "queue closed" );
                }
                catch ( InterruptedException e )
                {
                    System.err.println( e.getMessage() );
                    e.printStackTrace();
                }
                System.out.println( "consumer stop" );
            }
        };

        consumerThread.start();
    }
}

---------------------------------------------


Danke
Heiner


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Heiner Kücker"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400539 in der Newsgroup: de.comp.lang.java



24.02.
Java
Oliver Dunkl

JSF - Link in verschiedenen Forumularen
Hallo

ich hab da eine Frage zu JSF. Ich verwende hier JSF 2.0 mit Facelets.
Ich möchte aus einem Formular ein anders Formular absenden. Ich
bekomme das irgendwie nicht hin, oder funktioniert das prinzipiell
nicht?

Hier mal ein Beispielcode:

<h:form id="form">
<h:panelGrid columns="2">
<h:inputText id="first" value="#{testBean.first}"/>
<h:inputText id="last" value="#{testBean.last}"/>
<h:commandButton id="submit" value="show"
action="#{testController.save}">
<f:ajax execute="first last" render=":name"/>
</h:commandButton>
</h:panelGrid>
</h:form>

<h:outputText id="name" value="#{testBean.name}" />

<h:form id="form1">
<h:commandButton id="submit" value="commit"
action="#{testController.save}">
<f:ajax execute=":form:first :form:last" render=":name"/>
</h:commandButton>
</h:form>

Das _TestBean_ ist ein einfaches POJO. Im _TestController_ ist eine
*save* Methode die folgendes ausführt:

@ManagedProperty(value="#{testBean}")
private TestBean testBean;

public String save() {
testBean.setName(testBean.getFirst() + " " + testBean.getLast());
return "index";
}

Ich möchte jetzt aus dem *form1* die Werte *first* und *last*
ausführen und in *name* darstellen. Das funktioniert bei mir aber
nicht. Es wird einfach nichts ausgeführt, es wird nur *null null*
ausgegeben.

Wo könnte hier das Problem sein?

Kann man das überhaupt so lösen oder muß ich hier mittels JavaScript
das Forum direkt submitten?

Danke + lg
  Oliver


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Oliver Dunkl"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400530 in der Newsgroup: de.comp.lang.java



24.02.
Java
Gilbert Mirenque

Methode vor und nach der Ausführung einer TestS
Hallo NG,
ich habe mehrere Testklassen, die von TestCase erben und füge die in
einer TestSuite-Klasse der suite hinzu. Da ich an einem Eclipse-Feature
arbeite, lasse ich die TestSuite als JUnit-Plugin-Test laufen und
benötige ebenfalls Testdaten in dem Test-Workspace. Viele meiner
TestCase-Klassen sollen Tests auf den darin enthaltenen Daten
durchführen. Nun meine Frage: wie kann ich vor der Ausführung der
kompletten TestSuite meinen Workspace initialisieren und danach wieder
freigeben? Folgendes funktioniert nicht:

public class AllTests extends TestSuite {
public AllTests(String string) {
super(string);
}
public static Test suite(){
        TestSuite suite = new AllTests("All Tests");
        suite.addTestSuite(TEstCase1.class);
        suite.addTestSuite(TEstCase2.class);
        return suite;
}

public static void main(String[] args)
    {
WorkspaceBuilder.buildTestWorkspace();
        TestRunner.run(suite());
        WorkspaceBuilder.clearWorkspace();
    }
}

Die Methoden buildTestWorkspace() und clearWorkspace() werden gar nicht
aufgerufen, wenn ich die TestSuite starte. Ich weiß, dass sowas nicht
zur best practice gehört aber ich möchte es eigentlich vermeiden, im
WorkspaceBuilder ein flag workspaceBuilt zu setzen und in jeder
TestCase-Klasse, die richtig auf dem Workspace arbeiten soll, extra eine
Methode zu erstellen, die nur WorkspaceBuilder.buildTestWorkspace();
aufruft und mit @BeforeClass annotiert ist und analog eine mit @AfterClass.
Gibt es dafür eine adequate Lösung?

Viele Grüße,
Gilbert


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Gilbert Mirenque"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400527 in der Newsgroup: de.comp.lang.java



23.02.
Java
Chris Seidel

Tiefe der Integrationstests
Hallo,

wie genau testet man eigentlich noch bei Integrationstests?
Testet man hier nur das Zusammenspiel der einzelnen Komponenten, so nach  dem Motto - es ist keine unerwartete Exception aufgetreten oder prüft man  nochmals die konkreten Ergebnisse?

Bsp:

Client.addData -> Service.addData -> DAO.addData -> Datenbank

Der I-Test würde jetzt also Client.addData aufrufen und schauen, dass das  ohne unerwartete Exception abläuft.

Oder muss der I-Test jetzt auch nochmal in der DB nachsehen, dass die  Daten da ordnungsmäß angekommen sind?

Danke


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Chris Seidel"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400509 in der Newsgroup: de.comp.lang.java



23.02.
Java
Chris Seidel

IIS 6 und Tomcat 6
Hallo,

hat jemand Erfahrungen, ob das noch problemlos mit ajp13 klappt?  Insbesondere die Windows-Authentifizierung?

Danke.


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Chris Seidel"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400519 in der Newsgroup: de.comp.lang.java



22.02.
Java
Maxim Webster

Entities, DAOs und Services, wie verteilen
Hallo,

ich habe mal eine Design-Frage. Nähmen wir mal an, ich würde an einer Raumbuchung arbeiten, in der u.a. die Entitäten "Raum" und "Reservierung" verwaltet werden.

"Raum" ist dabei die buchbare Ressource, die in einer "Reservierung" mit einem Zeitraum zusammengeführt wird.

Dazu gibt es ein RaumDAO, um die verfügbaren Räume zu finden und ein ReservierungDAO, um Reservierungen zu finden und zu speichern.

Wie gesagt: Nur ein Beispiel, aber es bringt mich zu einer immer wiederkehrenden Frage: Wo plaziere ich eine Methode, mit der ich z.B. alle Räume ohne Reservierung in einem gewissen Zeitraum finden kann?

Kommt sowas in einen DAO und wenn ja, in welchen? Oder kommt sowas in einen Service, welcher beide DAOs zusammenführt?

Gruß,

Maxim.


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Maxim Webster"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400505 in der Newsgroup: de.comp.lang.java



21.02.
Java
Jessica Colman

PMD und InefficientEmptyStringCheck
Hi,

bevor ich etwas zum Integrationstest gebe, checke ich meinen Code mit Checkstyle, FindBugs und PMD. PMD bemängelt nun diese Methode

private boolean isEmpty(String s) {
return (s == null || (s.trim().length() == 0));
}

und sagt:
"String.trim().length() is an inefficient way to check if a String is really empty, as it creates a new String object just to check its size. Consider creating a static function that loops through a string, checking Character.isWhitespace() on each character and returning false if a non-whitespace character is found."

Einerseits glaube ich PMD das mit der neuen String-Instanz. Andererseits find ich den Vorschlag reichlich übertrieben. Und drittens hab ichs ausprobiert und PMDs Vorschlag war sogar langsamer.

Hat jemand Erfahrung, ob PMD häufiger so sinnlose Regeln anwendet?

Jessica


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Jessica Colman"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400495 in der Newsgroup: de.comp.lang.java



20.02.
Java
Carsten Krueger

Derby Embedded und Threads?
Hallo,

ich beziehe mich auf folgendes Beispiel:
$DERBY_HOME/demo/programs/simple/SimpleApp.java

Darf man die Connection conn einfach an mehrere Threads weitergeben und
jeder benutzt conn.createStatement() oder conn.prepareStatement()?

Generelle Frage noch zu Derby, muss man die Statements wirklich so
kompliziert abräumen oder kann man auch einfach die DB komplett schließen?

Gruß Carsten
--
ID = 0x2BFBF5D8 FP = 53CA 1609 B00A D2DB A066  314C 6493 69AB 2BFB F5D8
http://www.realname-diskussion.info - Realnames sind keine Pflicht
http://www.spamgourmet.com/ + http://mailcatch.com/ - Antispam
cakruege (at) gmail (dot) com


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Carsten Krueger"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400492 in der Newsgroup: de.comp.lang.java



19.02.
Java
Oliver Ranke

Apache HttpClient
Hallo,

ich nutze den HttpClient von Apache um GET Anfragen an einen WebServer zu
schicken. Leider habe ich Probleme die Reihenfolge der Request-Header Daten
festzulegen.
Ich muss genau bestimmen können in welcher Reihenfolge jeder Eintrag im
header steht.

Im Moment werden die drei, für mich wichtigen Einträge immer wie folgt
geschrieben:
Accept-Encoding
User-Agent
Host


Sie sollen aber in der Form gesendet werden:
Host
User-Agent
Accept-Encoding


Hier mal ein Snippet:

HttpClient client = ...
HttpMethod method = ...
....
method.addRequestHeader(new Header("Host",  myHost, false));
method.addRequestHeader(new Header("User-Agent",  myAgent, false));
method.addRequestHeader(new Header("Accept-Encoding",  myAccEnc, false));
....
method.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
client.executeMethod(method);



Die Reihenfolge der addRequestHeader-Aufrufe scheint hier keine Rolle zu
spielen.
Kann mir jemand sagen ob und wie das mit HttpClient geht ?


Dank und Gruß,
Oliver





...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Oliver Ranke"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400483 in der Newsgroup: de.comp.lang.java



19.02.
Java
Heiner Kücker

optimierender lernender ThreadPool
Hallo Leute,

ich soll einen Batch schreiben, der durch die Nutzung mehrerer
Threads in der Performance optmiert werden soll.

Zu meinem Erstaunen klappt dies bei anderen bereits
vorhandenen Batches.

Ich hätte gedacht, mehrere Threads werden langsamer,
weil die Datenbank mehrere Connections handeln
und koordinieren muss.

Es gibt eine Ober-Anzahl von Threads, bei der die
Performance nicht mehr besser wird.

Die optimale Anzahl wird durch manuelles
Ausprobieren ermittelt.

Demzufolge hatte ich die Idee, dass dies
durch einen Lernvorgang erfolgen könnte.

Wie findet Ihr die Idee, kann man da noch etwas
verbessern ?

Hier der Code:

----------------------------------------------------------------------------

/**
 * Zu implementierendes Interface
 * für Sourcen für Test-Intervalle,
 * nach denen der
 * {@link LearningThreadPool}
 * eine Veränderung an der
 * Anzahl Worker-Threads
 * vornehmen soll und diese
 * Veränderung bewerten soll.
 * <br/><br/>
 * Die Auslagerung hinter ein
 * Interface soll verschiedene
 * Strategien beim Festlegen der
 * Test-Intervalle ermöglichen.
 * <li>
 *  <ul>Warmlaufzeit: Zeit zum Füllen der Caches und zum Optimieren
des Codes in der JVM</ul>
 *  <ul>Test-Intervalle: konstant oder länger werdend, linear oder
degressiv länger werdend</ul>
 * </li>
 *
 * @author Heiner K&uuml;cker
 */
public interface LearningThreadPoolTestIntervalSource
{
    /**
     * Info an die
     * {@link LearningThreadPoolTestIntervalSource}-Implementierung,
     * dass die Arbeit jetzt beginnt.
     */
    void start();

    /**
     * Zurückgeben der Warte(Schlaf)-Zeit
     * bis zum ersten Test.
     *
     * @return Warte(Schlaf)-Zeit
     * bis zum ersten Test
     */
    long warmUpTime();

    /**
     * Zurückgeben der Warte(Schlaf)-Zeit
     * bis zum nächsten Test.
     *
     * @return Warte(Schlaf)-Zeit
     * bis zum nächsten Test
     */
    long nextIntervalTime();

    /**
     * Vermerken der gemittelten
     * Dauer einer elementaren Aufgabe.
     * <br/><br/>
     * Diese Information wird vom
     * {@link LearningThreadPool}
     * von der
     * {@link
LearningThreadPoolPerformanceMeasure#getMediumTaskTime()}
     * weitergegeben, damit diese Intervall-Zeit-Quelle
     * (this) die Interval-Zeit bis zur
     * nächsten Änderung der Poolgrösse
     * {@link ResizeableThreadPool#setSize(int)}
     * entsprechend anpassen kann.
     *
     * @param mediumTaskTime gemittelte Dauer einer elementaren
Aufgabe
     */
    void setMediumTaskTime( final long mediumTaskTime );
}

----------------------------------------------------------------------------

/**
 * Interface für die Leistungs-Messung des
 * {@link LearningThreadPool}.
 * <br/><br/>
 * Ein höherer Wert gilt als besser,
 * ein niedrieger Wert als schlechter.
 * <br/><br/>
 * Die Implementierungsklasse dieses
 * Interfaces muss sich mit dem
 * {@link ResizeableThreadPool}
 * verbinden, um zu erfahren,
 * wieviele Einzelaufgaben abgearbeitet
 * wurden.
 *
 * @author Heiner K&uuml;cker
 */
public interface LearningThreadPoolPerformanceMeasure
{
    /**
     * Info an die
     * {@link LearningThreadPoolPerformanceMeasure}-Implementierung,
     * dass jetzt ein neues Intervall beginnt.
     */
    void reset();

    /**
     * Zurückgeben der Leistungs-Messung
     * des letzten Intervalls.
     *
     * Ein höherer Wert gilt als besser,
     * ein niedrieger Wert als schlechter.
     *
     * @return Leistungs-Messung des letzten Intervalls
     */
    long getPerformance();

    /**
     * Zurückgeben der gemittelten
     * Dauer einer elementaren Aufgabe.
     * <br/><br/>
     * Diese Information wird vom
     * {@link LearningThreadPool}
     * an die
     * {@link
LearningThreadPoolTestIntervalSource#setMediumTaskTime(long)}
     * weitergegeben, damit diese
     * die Interval-Zeit bis zur
     * nächsten Änderung der
     * Poolgrösse
     * {@link ResizeableThreadPool#setSize(int)}
     * entsprechend anpassen kann.
     *
     * @return gemittelte Dauer einer elementaren Aufgabe
     */
    long getMediumTaskTime();
}

----------------------------------------------------------------------------

/**
 * Interface zu einem
 * grössenveränderlichen
 * ThreadPool.
 *
 * @author Heiner K&uuml;cker
 */
public interface ResizeableThreadPool
{
    /**
     * Set size.
     *
     * @param size the new size
     */
    void setSize( int size );

    /**
     * Zurückgeben der aktuellen size
     * @return current size
     */
    int getSize();
}

----------------------------------------------------------------------------

/**
 * Listener-Klasse für veränderte
 * ThreadPool-Grösse des
 * {@link LearningThreadPool}.
 *
 * Durch Implementieren dieses
 * Interface können weitere
 * Schritte beim Ändern der
 * ThreadPool-Grösse vorgenommen
 * werden.
 *
 * @author Heiner K&uuml;cker
 */
public interface LearningThreadPoolResizeListener
{
    /**
     * Information über neue ThreadPool-Grösse.
     *
     * @param newSize neue ThreadPool-Grösse
     */
    void notifyNewSize( int newSize );
}

----------------------------------------------------------------------------

/**
 * Lernende ThreadPool-Implementierung.
 * <br/><br/>
 * Es besteht die Aufgabe, die Performance
 * eines Programmes durch mehrere Threads
 * zu optimieren.
 * <br/><br/>
 * Dabei verbessert sich die Performance
 * bei zu vielen Threads nicht mehr.
 * <br/><br/>
 * In bestimmten Intervallen
 * erhöht oder verringert dieser
 * Pool die Anzahl der Worker-Threads.
 * <br/><br/>
 * Je nach Erfolg wird die Erhöhung
 * oder Verringerung beibehalten.
 * <br/><br/>
 * Es könnte passieren, dass dieser
 * ThreadPool in einem lokalen
 * Optimum stecken bleibt.
 * Dafür wäre es besser, einen
 * grösseren Lösungsraum abzusuchen.
 * Das ist hier (noch) nicht
 * umgesetzt.
 * <br/><br/>
 * Der Lernvorgang benutzt einen
 * eigenen Thread, welcher zu den
 * zu verwaltenden Threads
 * hinzukommt.
 * <br/><br/>
 * TODO variable Schrittweite für schnelleres Einpendeln des Optimums
 *      Eventuell sukzessive Approximation (binäre Suche)
 * <br/><br/>
 * TODO Persistieren des Optimierungs-Ergebnisses und Wiederverwenden
 *      als Start-Wert für nächsten Lauf
 * <br/><br/>
 * TODO mehrere letzte Messungen vermerken, um
 * den historischen Kurvenverlauf mit einzubeziehen
 * (Sätigungseffekte, PID-Regler)
 * <br/><br/>
 *
 *
 * @author Heiner K&uuml;cker
 */
public class LearningThreadPool
    extends Thread
{
    /**
     * Quelle der Intervall-Zeit bis
     * zum nächsten Verändern und neu
     * Bewerten der Pool-Grösse.
     *
     * @see LearningThreadPoolTestIntervalSource
     */
    final LearningThreadPoolTestIntervalSource intervalSource;

    /**
     * Mess-Objekt zum
     * Bewerten der Pool-Grösse.
     *
     * @see LearningThreadPoolPerformanceMeasure
     */
    final LearningThreadPoolPerformanceMeasure measure;

    /**
     * Unter dem lernenden Pool liegender
     * nicht lernender ThreadPool.
     *
     * @see ResizeableThreadPool
     */
    final ResizeableThreadPool threadPool;

    /**
     * Listener-Objekt zum Ausführen
     * weiterer Schritte beim Ändern
     * der ThreadPool-Grösse.
     */
    final LearningThreadPoolResizeListener resizeListener;

    /**
     * minimale Grösse des Thread-Pools
     */
    final int minSize;

    /**
     * maximale Grösse des Thread-Pools
     */
    final int maxSize;

    /**
     * anfängliche Grösse des Thread-Pools
     */
    final int startSize;

    /**
     * Konstruktor.
     *
     * @param intervalSource
     * @param measure
     * @param threadPool
     * @param minSize
     * @param maxSize
     * @param startSize
     */
    public LearningThreadPool(
            final LearningThreadPoolTestIntervalSource
intervalSource ,
            final LearningThreadPoolPerformanceMeasure measure ,
            final ResizeableThreadPool threadPool ,
            final LearningThreadPoolResizeListener resizeListener ,
            final int minSize ,
            final int maxSize ,
            final int startSize )
    {
        this.intervalSource = intervalSource;
        this.measure = measure;
        this.threadPool = threadPool;

        // darf null sein
        this.resizeListener = resizeListener;

        // TODO absichern minSize <= startSize <= maxSize
        // TODO absichern minSize, startSize und maxSize > 0
        this.minSize = minSize;
        this.maxSize = maxSize;
        this.startSize = startSize;
    }

    public void run()
    {
        long intervalTime             this.intervalSource.warmUpTime();

        this.threadPool.setSize(
                this.startSize );

        if ( this.resizeListener != null )
        {
            this.resizeListener.notifyNewSize(
                    this.threadPool.getSize() );
        }

        try
        {
            sleep( intervalTime );
        }
        catch ( InterruptedException e )
        {
            // TODO mal beim Kabutz nachlesen
        }

        // immer mit einer Erhöhung um 1 beginnen
        int changeValue = 1;

        intervalTime = this.intervalSource.nextIntervalTime();

        intervalSource.start();

        try
        {
            sleep( intervalTime );
        }
        catch ( InterruptedException e )
        {
            // TODO mal beim Kabutz nachlesen
        }

        long lastMeasureValue             this.measure.getPerformance();

        this.intervalSource.setMediumTaskTime(
                this.measure.getMediumTaskTime() );

        while ( true )
        {
            try
            {
                sleep( intervalTime );
            }
            catch ( InterruptedException e )
            {
                // TODO mal beim Kabutz nachlesen
            }

            long currentMeasureValue                 this.measure.getPerformance();

            this.intervalSource.setMediumTaskTime(
                    this.measure.getMediumTaskTime() );

            if ( currentMeasureValue < lastMeasureValue )
                // es ist schlechter geworden
            {
                // Richtung der Versuche umdrehen
                changeValue = -changeValue;
            }

            lastMeasureValue = currentMeasureValue;

            this.threadPool.setSize(
                    Math.max(
                        Math.min(
                            this.threadPool.getSize() + changeValue ,
                         this.maxSize ) ,
                    this.minSize ) );

            if ( this.resizeListener != null )
            {
                this.resizeListener.notifyNewSize(
                        this.threadPool.getSize() );
            }
        }

    }

    /**
     * @param args
     */
    public static void main( String[] args )
    {
        final LearningThreadPoolTestIntervalSource intervalSource             new LearningThreadPoolTestIntervalSource()
        {
            long lastMediumTaskTime;
            public long warmUpTime()
            {
                return 1000;
            }

            public void start()
            {
                // nichts zu tun
            }

            public long nextIntervalTime()
            {
                // neuer Test nach 1024 erledigten Einzelaufgaben
                return this.lastMediumTaskTime * 1024;
            }

            public void setMediumTaskTime(
                    final long mediumTaskTime )
            {
                this.lastMediumTaskTime                     mediumTaskTime;
            }
        };

        final ResizeableThreadPool threadPool             new ResizeableThreadPool()
        {
            int size;

            public int getSize()
            {
                return this.size;
            }

            public void setSize( int size )
            {
                this.size = size;
            }
        };

        final LearningThreadPoolPerformanceMeasure measure             new LearningThreadPoolPerformanceMeasure()
        {
            public void reset()
            {
                // TODO Auto-generated method stub
            }

            public long getPerformance()
            {
                // bis 10 Threads im Pool steigende Leistung
                // ab dann 9, nicht mehr steigend
                // der lernende Pool sollte um die 10 pendeln
                if ( threadPool.getSize() <= 10 )
                {
                    return threadPool.getSize();
                }
                return 9;
            }

            public long getMediumTaskTime()
            {
                return 10;
            }
        };

        final LearningThreadPoolResizeListener resizeListener             new LearningThreadPoolResizeListener()
        {
            public void notifyNewSize( int newSize )
            {
                System.out.println( "new size: " + newSize );
            }

        };

        final LearningThreadPool learningThreadPool             new LearningThreadPool(
                    intervalSource ,
                    measure ,
                    threadPool ,
                    resizeListener ,
                      1 , // minSize
                    100 , // maxSize
                      2   // startSize
                      );

        learningThreadPool.start();
    }

}

----------------------------------------------------------------------------

Mit etwas Mathematik kann man eventuell noch mehr
rausholen.

Grüsse
Heiner
www.heinerkuecker.de


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Heiner Kücker"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400481 in der Newsgroup: de.comp.lang.java



19.02.
Java
Chris Seidel

Applet startet Thread
Hallo,

ich habe ein Applet, welches einen Thread starten, daemon = false.
Wenn ich das Applet im Browser entlade, wird die JRE scheinbar wirklich  heruntergefahren, da das Konsolen-Icon im Systemtray verschwindet.

1) Müsste das aufgrund des Threads nicht weiterlaufen?
2) Das Verhalten ist das von mir gewünschte, sollte ich trotzdem daemon =  true setzen?

Danke


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Chris Seidel"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400480 in der Newsgroup: de.comp.lang.java



19.02.
Java
M. Niedermair

Anzahl der cpu-cores ermitteln
Hallo Zusammen,

mit
Runtime.getRuntime().availableProcessors()
kann ich die Anzahl der CPUs ermitteln.
Liefert bei mir 2.

Gibt es auch eine Möglichkeit, die gesamten cores zu ermitteln,
wie z.B. mit cpuinfo?

cat /proc/cpuinfo | grep "cpu core"
cpu cores : 2
cpu cores : 2

2 CPUs, also 4 cores.

Gruß
Michael


...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "M. Niedermair"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400477 in der Newsgroup: de.comp.lang.java



18.02.
Java
Simon Grätzer

Dateizugriff unter JBoss
Hallo zusammen,

mein Problem ist folgendes: Ich habe hier ein Projekt das ursprünglich für den
Weblogic Application Server entwickelt wurde.
Jetzt soll es aber auch auf JBoss5

Für das Projekt wurden immer Konfigurationsdateien gebraucht, die einfach in den
Domain Ordner kopiert wurden. In der Anwendung wurde dann z.B. für eine Datei
"abc.propertys"  im Code folgendes zum Öffnen gemacht:
new File("abc.propertys")

Das ist ein ziemliches Gerümpel und wird an vielen Stellen so gemacht. Es wäre
natürlich gut wenn diese Portierung mit so wenig wie möglich Codeänderungen
auskäme, deswegen frage ich mich wie man dieses Verhalten auch unter JBoss 5 so
nachbauen könnte. Hat jemand eine Idee?

Danke im Voraus

Grüße,
Simon




...

Dieser Beitrag wurde im UseNet veröffentlicht. Verantwortlich für diesen Beitrag ist: "Simon Grätzer"
Um Informationen über den Autor zu erhalten, kontaktieren Sie bitte den entsprechenden Service-Provider.
Dieser Beitrag wurde mit folgender Message-ID veröffentlicht: 400475 in der Newsgroup: de.comp.lang.java




[<<] [<][1] [2] [3] [4] [5] [>] [>>]


Aktuellste Suchbegriffe
Meistgesuchte Begriffe
Garmin Karten entfernen
stephanie george
reifendrucksensor laguna
regentonnen sicher verbinden
heiko henschel
mehr...
aldi
kredit
sim kartennummer herausfinden
prolurken
entbringen



Unterstützen Sie seducy.de und binden Sie einen der folgenden Quellcodes in Ihre Seite ein:

www.seducy.de
120 x 60


www.seducy.de
80 x 15


SiteMap