Is it possible to somehow use some of the PHP classes that come with Zend in a Java project? I'd like to think that there's always a way, but how?
-
@Alfred, Haven't tried yet actually. Did you try it yourself?jblue– jblue2010-09-17 23:58:13 +00:00Commented Sep 17, 2010 at 23:58
-
For fun I created a simple little message queue in java which you could use. I did similiar stuff like this in the past on top redis. It works pretty good! I also did write a lot of simple webservices which could also work and is really easy to write! I guess you should start with writing a little simple webservice because that is really easy!Alfred– Alfred2010-09-18 00:16:13 +00:00Commented Sep 18, 2010 at 0:16
2 Answers
You could try using Quercus, a Java based PHP runtime. Other than that, you could write a web service in PHP, which is called by your Java code, or a command-line PHP script which is executed by Java.
4 Comments
Question you should ask yourself first
First some questions you should ask your self, which could help use give you the best answer(because programming is a lot of times about trade-offs):
Can you run PHP code natively: If it is not possible to run PHP code natively via (http/CLI) then your only option would be to try if Quercus does the job.
How much concurrency does PHP have: Let's assume you don't call PHP much. Then I would consider writing a simple webservice(see below)because this is the easiest to implement. If not a PHP deamon which is running in the background waiting for work(PHP) to process which it receives from java message queue(deamon), and sends the message to queue.
- How quickly should PHP respond to java: If quick then a daemon would be the way to go.
But I would first advice try to implement the easiest/quickest solution and benchmark it. The quickest solution could be written in a couple of minutes. The more difficult could take some time.
Solutions:
- Quercus: If you can't run PHP natively(CLI/HTTP) then this is your only option.
Simple webservice: let's say you call http://localhost:8181/zend/doZend.php?a=a&b=b from within your Java program. This would call:
doZendfunction with function parametersa&bfrom your corresponding PHP service- return results to Java program which called PHP service.
- A named pipe could also be quick/easy solution if you are in *nix. I assume this would out perform I think the queue part would perform better under high load, but this one is easier to implement.
- MessageQueue in java/C: write a PHP deamon which reads from a queue(redis blocking list pop(*nix)/write your own java version) and puts the answer on another blocking queue from which your Java program will read the answer when available. This option is a little bit hard to implement, but if scaling is a must I think this is the way to go. The redis part could(If not possible to compile it) also be replaced by a simple java deamon which only does have a blocking queue if desired. But the redis variant is really fast/stable and I would really go with that.