Vagrant and VMware Fusion promiscuous mode

Using Vagrant is a handy way to manage virtual machines. If you use VMware Fusion as virtualizing platform, for some cases it’s important to configure Fusion enabling network promiscuous mode without asking for admin authentication, because Vagrant’s nature as a command line tool Vagrant can’t answer Fusion’s dialog box. (or in other words: Vagrant manage VMs without any VMware GUI, just per Fusion commands – Vagrant has no chance to answer any Fusion dialog)

Disable VMware Fusion promiscuous mode authentication either per command line (create a file “promiscAuthorized”)

sudo touch ”/Library/Preferences/VMware Fusion/promiscAuthorized”

Or edit VMware Fusion properties network dialog, keep check box “Require authentication to enter promiscuous mode” (dialog in german: Authentifizierung für Übergang in den vermischten Modus erforderlich”) empty.

VMware Fusion 6 Pro properties network dialog box (german language)

I’ve tested both methods with VMware Fusion 6 Pro on Mac OS X Mavericks.

Posted in IT

JBoss’ Ticketmonster Tutorial – zuviel für Maven Repositories?

Das Vorhaben zum Wochenende, das Ticketmonster-Tutorial in Eclipse Juno mit JBoss Tools aufzusetzen, machte mich aufgrund ständiger Maven-Repository-Timeouts echt wahnsinnig. Ich bin nicht der Java/Maven-Crack, deshalb musste ich mich der Lösung wirklich annähern.

Vorab: Die beste Lösung besteht vermutlich darin, ein eigenes Maven-Repository aufzusetzen, z. B. mit Sonatype Nexus. Diese Lösung wollte ich jetzt ganz kurzfristig nicht umsetzen.

Die Fehlermeldung beim Versuch das Projekt in Eclipse zu erzeugen, war mehr oder weniger immer die gleiche.

screenshot_Eclipse_Errormessage_maven_repo

Die Urache für das Problem liegt offensichtlich im Verhalten gehosteter Maven-Repositories wie z. B. http://repo1.maven.org, nur eine begrenzte Menge HTTP-Requests zuzulassen, bevor sie “abregeln”. Dadurch läuft der Eclipse-JBoss-Tools-Maven-Projekterzeugungsprozess in einen Timeout, da benötigte Artefakte nicht mehr geladen werden können. Jetzt ist das lokale Repository selbst aber auch in einem etwas merkwürdigen Zustand, es ist echt schwer, es zu einem erneuten Downloadversuch zu überreden (force). Irgendwie ist es immer der Meinung, dass die bemängelte Ressource doch gecacht ist und kein Handlungsbedarf bestünde. Also das ist echt hakelig und definitiv verbesserungswürdig, mag sein, dass es Kniffe für Maven-Experten gibt, aber dass ist nicht anwenderfreundlich. Also wie habe ich mir geholfen:

1. Datei settings.xml im Maven-Verzeichnis ~/.m2 anlegen bzw. um Mirror-Eintrag erweitern. Genauer gesagt, habe ich gleich 3 Dateien mit 3 verschiedenen Mirror-Einträgen angelegt, da dieser Abregel-Mechanismus offenbar generell in den Repositories implementiert zu sein scheint (um große Downloads ganzer Repositories zu verhindern – immerhin ca. 180GB!). Hier die vollstänige settings.xml mit einem Mirror für das Maven central Repository:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<proxies/>
<profiles/>
<activeProfiles/>
<mirrors>
<mirror>
<id>Central</id>
<url>http://repo1.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, St. Louis-->
</mirror>
</mirrors>

</settings>

Hier noch zwei alternative Mirror für das Maven Central Repository:

<mirror>
<id>antelink.com</id>
<url>http://maven.antelink.com/content/repositories/central/</url>
<mirrorOf>central</mirrorOf>
<!-- France -->
</mirror>
<mirror>
<id>ibiblio.org</id>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, North Carolina -->
</mirror>

 

2. Verzeichnis ~/.m2/repository löschen.

3. Ein JBoss-Tools Java EE Web Project in Eclipse neu erstellen – siehe auch das JBoss Ticket-Monster Tutorial – dort ist das Schritt-für-Schritt beschrieben.

Wie erwartet tritt eine Fehmeldung auf, dass maven-resources-plugin 2.5 Ressource bzw. abhängige Ressourcen nicht geladen werden können, Ursache Timeout. (Überprüfung mit Browser bestätigte das auch: Das Repository lässt zeitlich begrenzt keine HTTP-Requests zu – Timeout).

4. In Datei ~/.m2/settings.xml einen alternativen Mirror für das Maven Central Repository eintragen.

5. ggf. Verzeichnis ~/.m2/repository/.cache löschen.

6. Die “Problemdateien” – siehe Fehlermeldung Bild oben – aus dem lokalen Repository löschen.(nicht gleich das ganze repository-Verzeichnis, da es definitiv sonst wieder hängenbleibt – mehrfach versucht!)

Also Das Verzeichnis gemäß Fehlermeldung ~/.m2/repository/org/apache/maven/plugins löschen.

7. Im Eclipse Projektkontextmenü Maven -> Update Project … auswählen, Haken bei Force Updates of Snapshots/Releases setzen und anschließend OK drücken.

screenshot_eclipse_maven_update

Die restlichen Dateien sollten nun vom alternativen Mirror-Repository nachgeladen werden.

Bei Bedarf Schritte 4 bis 7 mit alternativen Mirror-Einträgen in der Datei settings.xml wiederholen.

Alles in allem ist das ja ganz schöner Schrott, weniger was das eigentliche Abregel-Verhalten der Repositories angeht, sondern vielmehr die unmöglichen Anwenderfunktionen zum Beheben des Problems, ohne tiefere Maven-Kenntnisse und Improvisation geht hier mal gar nichts.

Na ja – vielleicht hilft das ja dem einen oder anderen :-)

 

Mac OS 10.8 Mountain Lion gcc

Huch – XCode 4.6 installiert und immer noch kein Compiler für die Kommandozeile? Na so was? – Nun muss man im XCode (4.6) über Menü Preferences -> Download die Command Line Tools, mithin den gcc nachinstallieren.

Bildschirmfoto 2013-02-17 um 19.42.56

Nach erfolgreicher Installation hat man einen Compiler. Aber Vorsicht: ist kein “richtiger” gcc sondern LLVM-GCC. Wer den Gnu Compiler gcc bevorzug/benötigt, sollte sich auf Homebrew umsehen.

Posted in IT | Tagged

Play! MySQL Driver Konfiguration

Wer erste Schritte mit dem Web FrameworkPlay! und Java unternehmen will, dem sei das Tutorial der Play Homepage empfohlen, sehr einfache und gut nachvollziehbare Schritt-für-Schritt Anleitung anhand einer kleinen Webanwendung todolist.

Am Ende des Tutorials wird die Anwendung in die Heroku Cloud deployt. Wer das nun nicht gleich möchte und die Anwendung erst mal lokal gegen eine nicht flüchtige Datenbank verbinden möchte, der lese hier die Beschreibung zur Konfiguration einer MySQL-Datenbank für die Anwendung. Es müssen lediglich der MySQL-JDBC-Treiber in das Play-Projekt geladen und die Datenbankverbindungsparameter konfiguriert werden.

Play! muss mitgeteilt werden, dass das Projekt den Mysql-JDBC-Driver benötigt, deshalb Eintrag in Datei projects/Build.scala vornehmen:
val appDependencies = Seq(
// Add your project dependencies here,
javaCore,
javaJdbc,
javaEbean,
"mysql"%"mysql-connector-java"%"5.1.18"
)

Die eigentliche MySQL-Treiber Konfiguration wird in der Datei conf/application.conf vorgenommen. Wenn als ORM-Tool ebean verwendet werden soll, dann bei der Gelegenheit gleich den Kommentar vor dem ebean-Eintrag entfernen:

# Ebean configuration
# ~~~~~
# You can declare as many Ebean servers as you want.
# By convention, the default server is named `default`
#
ebean.default="models.*"

...

# DH MySQL DB
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/test1?characterEncoding=UTF-8"
db.default.user="play"
db.default.password="play"

Danach muss das Projekt den MySQL-Treiber erst mal laden, das wird über die play console erledigt: play Befehle reload und update ausführen, der MySQL-Treiber wird per maven-repository in das Projekt geladen.

[myFirstApp] $ reload
[info] Loading project definition from /home/hessen/workspace/myFirstApp/project
[info] Set current project to myFirstApp (in build file:/home/hessen/workspace/myFirstApp/)
[myFirstApp] $ update
[info] Updating {file:/home/hessen/workspace/myFirstApp/}myFirstApp...
[info] downloading http://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.18/mysql-connector-java-5.1.18.jar ...
[info] [SUCCESSFUL ] mysql#mysql-connector-java;5.1.18!mysql-connector-java.jar (3152ms)
[info] Done updating.
[success] Total time: 11 s, completed Feb 16, 2013 8:15:01 PM

Das MySQL Datenbankschema sowie Datenbankuser sollten freilich angelegt sein. Als Merker hier das als MySQL root auszuführende SQL:

create database test1;
grant all privileges on test1.* to play@'localhost' identified by play;
flush privileges;

Play bzw. der ORM Persistance Layer avaje ebean legt im Datenbankschema die Datenbankobjekte (Tabellen) dann selbstständig bei Ausführung der Anwendung an. (ggf. wird man beim ersten Aufruf der Webapplikation aufgefordert das Ausführen div. SQL-Statements durch die Anwendung zu bestätigen -> so tun).