Benny's Blog
Navigation: Home » Programmierung » Java
11. Januar 2011

Gegeben ist folgende ASCII-Codierung:

%7b%22email%22%3a%22bn%40bennyn.de%22%2c%22name%22%3a%22Benny%20Neugebauer%22%7d

Wie wir wissen, stellt der ASCII-Code genau 1 Byte (8 Bit) dar. Dazu wird eine Sequenz in der Form %xy angegeben, wobei “xy” eine zweistellige Hexadezimal-Zahl ist, welche die 8-Bit repräsentiert. Ein Blick in die ASCII-Tabelle zeigt uns folgende Kodierung:

%20 = blank (Leerzeichen)
%22 = "
%3a = :
%40 = @
%2c = ,
%7b = {
%7d = }

Demnach müsste für unser Beispiel der entsprechende Unicode (UTF-8) so aussehen:

{"email":"bn@bennyn.de","name":"Benny Neugebauer"}

In Java lässt sich ASCII-Code in Unicode ganz leicht umwandeln:

1
2
3
String ascii = "%7b%22email%22%3a%22bn%40bennyn.de%22%2c%22name%22%3a%22Benny%20Neugebauer%22%7d";
String unicode = URLDecoder.decode(ascii, "UTF-8");
System.out.println(unicode);
11. Januar 2011

Wenn Apache Ant diese Meldung bringt:

warning: ‘includeantruntime’ was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

Dann muss man im Build-Script (build.xml) die includeantruntime setzen.
Es folgt ein exemplarisches Beispiel.

Fehlerhafte Zeile:

<javac srcdir="${src.dir}" destdir="${classes.dir}"/>

Korrigierte Zeile:

<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false"/>
11. Januar 2011

Hier eine Kurzbeschreibung, um in der Entwicklungsumgebung NetBeans 6.9.1 eine JDBC-Datasource für eine Java Enterprise-Applikation hinzuzufügen. Inklusive Database Mapping, Persistent Entities und Session Beans, die über Annotationen in einem Servlet verwendet werden können:

  1. “mysql-connector-java-5.1.13-bin.jar” in den lib-Ordner von GlassFish 3.0.1 kopieren
  2. GlassFish neustarten
  3. MySQL Connection-Pool in der GlassFish-Administrationsoberfläche anlegen
  4. JDBC Ressource (jdbc/name) in der GlassFish- Administrationsoberfläche anlegen
  5. Entity Classes from Database (mit List-Collection) in NetBeans-Projekt generieren
  6. New Persistence Unit in NetBeans-Projekt generieren
  7. New Session Bean (ohne Interface) in NetBeans-Projekt erzeugen
  8. New Servlet in NetBeans-Projekt erzeugen
  9. SessionBean mit @EJB-Annotation verwenden

Die JDBC Ressource muss diese Eigenschaften gesetzt haben:

portNumber
databaseName
serverName
password
user
URL
Url

Die URL wird folgendermaßen aufgebaut: jdbc:mysql://hostname:port/databaseName.

31. Dezember 2010

Wenn man mit Java eine JAR-Datei ausführt, dann wird nicht die JAR-Datei ausgeführt, sondern der Java-Bytecode dieser JAR-Datei. Der Java-Bytecode liegt aber nicht im Speicherort der JAR-Datei und somit können Referenzen wie bsp. new File("serverlog.txt"); nicht richtig gefunden werden, wenn man davon ausgegangen ist, dass in diesem Fall die Datei serverlog.txt im selben Ordner wie die ausgeführte JAR-Datei zu finden ist.

Man muss sich deshalb den zur Laufzeit gültigen Pfad der JAR-Datei holen. Für dieses Vorhaben habe ich mir eine eigene Methode geschrieben:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  /**
   * Returns the path where the currently running JAR-file is located.
   * Example value: C:\MyProject\build\jar\
   * @return Path of the JAR-file
   */
  public static String getJarExecutionDirectory()
  {
    String jarFile = null;
    String jarDirectory = null;
    int cutFileSeperator = 0;
    int cutSemicolon = -1;
 
    jarFile = System.getProperty("java.class.path");
    // Cut seperators
    cutFileSeperator = jarFile.lastIndexOf(System.getProperty("file.separator"));
    jarDirectory = jarFile.substring(0, cutFileSeperator);
    // Cut semicolons
    cutSemicolon = jarDirectory.lastIndexOf(';');
    jarDirectory = jarDirectory.substring(cutSemicolon+1, jarDirectory.length());
 
    return jarDirectory+System.getProperty("file.separator");
  }

Diese Methode liefert aber nur den richtigen Ort, wenn man die JAR Datei über die Konsole (java -jar meinprojekt.jar) ausführt. Deswegen möchte ich anhand eines Beispiels noch einen zweiten, zuverlässigeren Weg aufzeigen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    String propertiesFilePath = "client.properties";
    File propertiesFile = new File(propertiesFilePath);
 
    if (!propertiesFile.exists())
    {
      try
      {
        CodeSource codeSource = MainView.class.getProtectionDomain().getCodeSource();
        File jarFile = new File(codeSource.getLocation().toURI().getPath());
        String jarDir = jarFile.getParentFile().getPath();
        propertiesFile = new File(jarDir + System.getProperty("file.separator") + propertiesFilePath);
      }
      catch (Exception ex)
      {
      }
    }
 
    System.out.println(propertiesFile.getAbsolutePath());
Tags: Java, , , ,
31. Dezember 2010

Über System.getProperty kann Java bestimme Informationen über das System, auf welchem der aktuelle Java Sourcecode ausgeführt wird, liefern. Zum Anzeigen des Benutzerverzeichnisses würde folgender Code ausreichen:

1
2
String userDirectory = System.getProperty("user.home");
System.out.println(userDirectory);

Die Ausgabe wäre in meinem Fall:

C:\Users\bennyn

Folgende System Properties sind verfügbar:

…weiterlesen

26. Dezember 2010

In meinem Beitrag NetBeans IDE mit Android SDK habe ich erklärt, wie man das Android SDK in der NetBeans IDE benutzen kann und ein wie man ein Android Virtual Device (AVD) einrichtet. Nun möchte ich darauf zu sprechen kommen, wie man eine SD-Speicherkarte emulieren kann.

…weiterlesen