PhpStorm langsam durch falsche JVM

Leider wurde meine geliebte IDE PhpStorm auf meinem Mac immer langsamer. Syntaxvorschläge brauchten viel zu lange zum laden und ein flüssiges Arbeiten war nicht mehr möglich. Ein Blick unter PhpStorm-> Über PhpStorm verriet schnell, dass eine alte 1.6er JVM das Programm ausführt. Als großer „Liebhaber“ sämtlicher Java Probleme war mir gleich klar, dass es an der veralteten JVM liegen kann. Gut, dass JetBrains eine Anleitung zum Ändern der JVM bereitstellt:
https://intellij-support.jetbrains.com/entries/23455956-Selecting-the-JDK-version-the-IDE-will-run-under

Long story short:

vim /Applications/PhpStorm.app/Contents/Info.plist

Nach JVMVersion suchen. Steht dort 1.6* sollte man – natürlich nur wenn Java 7 installiert ist – auf 1.7* ändern.

<key>JVMVersion</key>
<string>1.7*</string>

Doctrine 2 – Objekte aus der Session

Heute wollte ich in einem Zend 2 Projekt mein geliebtes „User“-Objekt wieder aus der Session holen, damit ich es in einem anderen von Doctrine verwalteten Entity ordentlich referenzieren kann und natürlich vorher die Nutzerrechte prüfen kann.

Da mein Login den Zend\Authentication\AuthenticationService verwendet, kommt man an die Identität und damit in meinem Fall an das User Objekt leicht ran.

$user = $this->getAuthService()->getIdentity()

Nun wollte ich das ganze meinem neuen Ziel-Objekt mitgeben und dann per $orm->persist abspeichern. Nennen wir es einfach kurz $buch.

$buch->setUser($user); 
$orm->persist($buch);
$orm->flush();

 

Leider resultierte das in einer dicken Fehlermeldung seitens Doctrine:

Doctrine\ORM\ORMInvalidArgumentException: A new entity was found through the relationship 

Was war passiert? Doctrine konnte mit dem Objekt nichts mehr anfangen, nach dem es aus der Session geladen wurde, denn der EntityManager weiß bei einem erneuten Seitenaufruf nichts mehr von diesem Objekt.

Zum Glück half die Doctrinehilfe schnell: http://doctrine-orm.readthedocs.org/en/latest/cookbook/entities-in-session.html

Die Lösung in Kurzform: Man muss das Objekt mit der merge() Funktion des EntityManagers neuladen, damit man es benutzen kann. Entgültiger Code ist dann also:

$user = $this->getAuthService()->getIdentity();
//Die obere Zeile kann man natürlich direkt in die Funktion einsetzen! 
$user = $orm->merge($user);
$buch->setUser($user); 
$orm->persist($buch);
$orm->flush();

Am Ende hat man wieder etwas gelernt!

Totgeglaubte leben länger! – Warum man als ITler bloggen sollte

Inzwischen sind seit der aktiven Zeit auf diesem Blog Jahre vergangen. Früher schaffte ich bis zu einem Post in der Woche…. nun liegen die letzten Posts immer Monate und fast Jahre auseinander. Dabei hätte es eigentlich viel zu bloggen gegeben. Wie die wenigen Stammleser sicher wissen, habe ich begonnen mein Hobby Informatik zum Beruf zu machen und eine Ausbildung zum Fachinformatiker für Systemintegration begonnen, die voraussichtlich im Sommer 2015 zu Ende gehen wird. Doch auch neben dem Berufsleben habe ich mich sehr viel (einige meinen zu viel) mit Themen der modernen, vernetzten Welt beschäftigt. So wurden aus meinen anfänglichen PHP-Kenntnissen deutlich mehr und ich arbeite nun täglich mit Zend Framework 2 und stelle sowohl auf Arbeit als auch privat demnächst größere Projekte fertig. (yay) Parallel dazu lerne ich derzeit Apples neusten Wurf Swift, um demnächst erste Apps zu veröffentlichen.

Doch auch abseits der Programmierung habe ich viel neues gelernt. So habe ich durch über 4 Jahre browserlife.de Serverbetrieb viel Probleme umschiffen müssen und habe so manch Eigenheit des Internets schmerzhaft erfahren müssen. Aktuell beschäftige ich mich mit Virtualisierung mit KVM und libvirt, dass ist spannend, aber man findet leider nur mit viel googlen (oder bingen) passende Lösungen…

Damit kommen wir auch dazu warum ich das alles erzähle: Ich verbringe täglich locker 1/5 meiner Arbeitszeit damit das Internet nach Lösungen für meine Probleme zu durchsuchen…ich lese Foren, Blogs, Stackoverflow und Mailinglisten auf der Suche nach so manch Fehler…doch schreiben tu ich nie, dabei lebt das ganze Konzept der Communities von der „Rückgabe“ von Wissen. Dabei ist es das beste was man machen kann- auch für sich selbst! Einfach wenn man ein Problem gelöst hat und es möglicherweise auch für andere oder einen selber nochmal interessant werden könnte es aufzuschreiben. Das muss ja nicht immer eine detailierte Step-By-Step Anleitung sein sondern machnmal einfach nur ein Codeschnipsel.

Lange Rede, relativ kurzer Sinn: Ich werde ab sofort versuchen wieder mehr zu IT Themen hier zu veröffentlichen. Thema wird immer das sein, was mich beim Programmieren oder Administrieren so beschäftigt. Ich hoffe ich schaffe es regelmäßig, denn seien wir mal ehrlich: Jeder Informatiker hat mindestens einmal in der Woche ein Problem was andere vielleicht auch schon geplagt hat!

Auf bessere Zeiten für dieses Blog!