31 de gen. 2009

Quercus i Zend Framework, la cosa no funciona.

Fa moltes dies que havia d'haver publicat aquesta entrada, però he estat molt ocupat amb les pràctiques del Cap i ja no pensava.
Bé, la qüestió es que no m'ha funcionat. No he pogut fer funcionar una aplicació desenvolupada amb Zend Framework amb el "Quercus".
He provat també el Kohana, i el problema és el mateix, hi ha una serie e classes i métodes que encara no estan implementats.
He escrit un missatge al fórum de "Quercus" i de moment sembla que no interessa a gaire gent.
http://forum.caucho.com/?q=node/224
La dedució que n'he tret de tot això, és que "Quercus" està bastant lluny de ser considearda una opció per entorns empresearials.

7 comentaris:

Unknown ha dit...

Hola Alexandre, primer de tot vull felicitar-te per aquest blog, realment és molt útil i s'aprenen coses molt interesants.

T'escric per reafirmar el que dius que Quercus i Zend Framework no funciona... M'he estat barallant un munt de setmanes intentant aconseguir que em funcioni la connexió php-java-bridge i no ho he aconseguit. De totes les possibilitats vaig trobar:

1).- Instal·lar php-java-bridge en Apache 2.2 (utilitzant WAMP server).

2).- Instal·lar php-java-bridge en Apache Tomcat 6.0.

3).- Vaig trobar per internet "Quercus" i també ho vaig provar en Apache i Tomcat.

No vaig poder treure'n una solució fins que vaig trobar Zend Framework el qual ja ve instal·lat el php-java-bridge directament.

Això va suposar un gran avantatge, però tot i així continuu tenint un problema: Necesito utilitzar codi JAVA dins del lleguatge PHP. Més concretament, poder crear una classe .JAVA i importar-la des desde la meva pàgina PHP. És possible fer això? Seria molt interesant poder crear objectes de classe i fer-ne un ús. Estic fent la tesina doctoral a la UdG i estic encallat ja fa unes setmanes sense treure'n l'aigua clara.

Si poguèssis dir-me'm quelcom o donar-me alguna idea seria fantàstic. Moltes gràcies per tot, i per llegir aquest llarg comentari.

A reveure!

Alexandre ha dit...

Hola Christian.
Això que comentes no ho he fet mai.
Així a mode ràpid si mires el que posa en aquesta pàgina
http://oreilly.com/pub/a/php/2001/06/14/php_jav.html?page=1
et funcionarà amb java 1.4, amb 1.6 no funciona.
Suposo que hauries de mirar el php-bridge.

O sigui en el php.ini descomentes

extension=php_java.dll

i afegeixes això:

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;


[java]
java.class.path="C:\xampp\apache\bin\php_java.jar;"
java.home="C:\Archivos de programa\Java\j2sdk1.4.2_04\jre\bin"
java.library="C:\Archivos de programa\Java\j2sdk1.4.2_04\jre\bin\client\jvm.dll"
java.library.path="C:\xampp\php\extensions;"

Una altra pàgina que post mirar és aquesta:
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=PuentePHPJava

Unknown ha dit...

Gràcies per contestar tant ràpidament!

Anant per parts, l'últim tutorial que m'has passat ja el vaig estar mirant i vaig tenir un gran problema i es que el php-java bridge amb la versió que ell utilitza no l'he trobat a cap lloc (3.1.8). Desde la pàgina oficial http://php-java-bridge.sourceforge.net/pjb/ només està accesible per windows l'última versió i amb la nova versió només és "funcionable" amb Apache Tomcat, motiu pel qual vaig fer la instal·lació i configuració sense éxit.... no va. I no va precisament perquè no existeix el fitxer php_java.dll tal i com s'explica en aquests manuals. Tot hagués sigut més fàcil si aquesta vella versió la pogués aconseguir!

Per altra banda, estic provant de seguir el primer tutorial que m'has passat. En quant el php-java-bridge, et vaig comentar en el primer escrit que el Zend Framework ja incorpora aquesta configuració i el primer exemple que presenta en el tutorial:

----- php

$systemInfo = new Java("java.lang.System");

print "Total seconds since January 1, 1970:
".$systemInfo->currentTimeMillis();

---

Funciona correctament! El tema de modificar el php.ini (modules settings i php_java.dll) cosa que no existeix, internament ja el configura quan instal·les el paquet de Zend. Una cosa guanyada no? :-p. Seguint les instruccions a la següent pàgina del manual, hi ha un exemple fet en java, l'he creat i compilat degudament. I ara es presenta un altre dubte, aquest fitxer java i el correponent .class ho tinc dins una carpeta del servidor apache c:/Apache2/htdocs/java/classes/ i el fitxer en php ho tinc directament a l'arrel. Mmmm, no em funciona em surt un error de php CGI/FAST en una finestreta. Serà que no troba aquest path? i si fos així a on ho hauria d'especificar perqué en el fitxer php no apareix cap include, import...

Em sap greu si t'estic fent perdre molt de temps però crec que és una situació interessant i que algu que passi per aquesta situació li pot ser de gran ajuda :-). I experiència per a tots.

PD: El Zend Server utilitza el php 5, i no el php4. Per altra banda per defecte instala java 1.6. Si no funciona provaré de utilitzar el 1.4, però ho he obviat perque la resta si que funciona i aparentment funciona tot menys el fet de crear una classe pròpia.

Alexandre ha dit...

Hola Christian
Mira això que t'ajudarà.
Jo crec que hauries d'afegir el teu directori de classes a java.class.path

Alexandre ha dit...

Perdona, m'he deixat la adreça
http://www.php.net/manual/en/ref.java.php#28127

Unknown ha dit...

Moltes gràcies Alexandre, miraré a veure si ho aconsegueixo. Ara mateix t'escric des de Slovakia i demà en calma miraré a veure si ho soluciono.
Moltes gràcies per tot! Estem en contacte :-)

Unknown ha dit...

Bones de nou!
Doncs ara per ara segueixo igual, he afegit al path el directori on conté les classes .java i .class

[Java]
java.class.path = "c:\Archivos de Programa\PHP\ext\php_java.jar; C:\Archivos de programa\Java\packages\"
java.home = "C:\Archivos de programa\Java\jdk1.6.0_16"
java.library = "C:\Archivos de programa\Java\jdk1.6.0_16\bin\server\jvm.dll"
java.library.path = "C:\Archivos de programa\PHP\ext"

però em surt un error del PHP:

"CGI / FastCGI ha detectado un problema y debe cerrarse."

Això passa quan intenta crear un objecte java:

$salesTax = new Java("SalesTax");

O sigui per alguna raó encara no accepta el path.... ainsss!