Quercus – PHP in Java

აჟიტირებული ვარ სრული ამ სიტყვის მნიშნველობით… ასეთ რამეს მართლა არ ველოდი და ხელი მქონდა დიდი ხანია ჩაქნეული… ამასწინათ იკას ბლოგზე ვნახე პოსტი სათაურით: Breakthrough: Java Implementation of PHP5 თავისთავად დამაინტერესა(რატომღაც), დღეს გამოვნახე დრო და გავტესტე… სიმართლე უნდა ითქვას შედეგმა ყოველგვარ მოლოდინს გადააჭარბა…

PHP და Java ერთად? რაოდენ ირონიულადაც არ უნდა ჟღერდეს თურმე ეს შესაძლებელია. რა საჭიროა? მიჭირს კონკრეტული მაგალითის მოყვანა, თუმცა გავიხსენებ ერთი წლის წინანდელ შემთხვევას როდესაც ერთერთი მეგა კომპანიის(არა ქართული) რეპორტინგის სისტემაზე მუშაობისას როცა სკრიპტინგი აღმოჩნდა საჭირო(ამას გააჩნდა საფუძვლიანი მიზეზი) როგორ ვნატრობდი რომ Groovy – ის ნაცვლად PHP – ზე შემძლებოდა წერა… თუმცა ამის შესაძლებლობა მაშინ არ მომეცა.

მიუხედავად იმისა რომ ეს ძრავი ჯერ არ მუშაობს ბევრისათვის კარგად ნაცნობ Tomcat – ზე მიმაჩნია რომ არც ეს არის შორეული პერსპექტივა… რაც შეეხება ტესტირების შედეგებს…

პირველ რიგში ამისათვის საჭიროა Resin Server – ი, რომელიც კარგად არის ნაცნობი Java დეველოპერებისათვის და იგი შეგიძლიათ გადმოწეროთ შემდეგი მისამართიდან: Resin Pro 3.1.0 Download.

ასევე საჭიროა JDK 5 ან უფრო მაღალი ვერსია, მისი ინსტალაციის ინსტრუქცია შეგიძლიათ ნახოთ ამ მისმართზე.

Resin – ის გადმოწერის შემდეგ საჭიროა მისი დეარქივაცია, ჩემს შემთხვევაში ეს გავაკეთე C:\web\resin მისამართზე. მეტი ინსტალაციისათვის არაფერი არ არის საჭირო. სერვერის გასაშვებად საკმარისია httpd.exe ფაილის გაშვება, ხოლო http://localhost:8080/ მისამართის გახსნის შემდეგ დავინახავთ შესაბამის გვერდს რომელიც გვატყობინებს რომ Resin დასტარტულია.

როგორ გავუშვათ PHP სკრიპტი? ამისათვის საკმარისია C:\web\resin\webapps\ROOT კატალოგში შევქმნათ კატალოგი სასურველი სახელით, ჩემს შემთხვევაში კატალოგს დავარქვი test. შემდეგ ახლად შექმნილ კატალოგში უნდა შევქმნათ WEB-INF კატალოგი და მასში მოვათავსოთ web.xml ფაილი და ჩავწეროთ მასში შემდეგი ინსტრუქციები:

<web-app xmlns="http://caucho.com/ns/resin">
  <servlet-mapping url-pattern="*.php" servlet-class="com.caucho.quercus.servlet.QuercusServlet">
    <init>
      <script-encoding>iso-8859-1</script-encoding>
    </init>
  </servlet-mapping>
</web-app>

ეს არის და ეს ახალი ვებ აპლიკაციის კონფიგურაცია დასრულებულია და შეგვიძლია შევუდგეთ PHP – ზე წერას. test კატალოგში გააკეთეთ ჩვეულებრივი index.php ფაილი, ტესტირებისათვის შეგიძლიათ გამოიყენოთ შემდეგი კოდი:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Test {
 
  private $test;
 
  function __construct() {
    $this->test = "this is test";
  }
 
  static function runTest() {
    return "This is static method";
  }
 
  public function getVar() {
    return $this->test;
  }
 
  public function testArrayList() {
   
                //create ArrayList object
    $list = java("java.util.ArrayList", array(1, 2, 3, 4));
   
                //add instance of class Test into arraylist
    $list->add(new Test());
   
                //create another ArrayList instance
    $l1 = java("java.util.ArrayList", array("Test Array List"));
   
                //add $l1 to $list arraylist object
    $list->add($l1);
   
                //output object
    echo '<pre>';
    print_r($list);
   
  }
 
}

$t = new Test();

$t->testArrayList();

echo $t->getVar();

echo '<br />';

echo Test::runTest();

კოდის მუშაობის შედეგი შეგიძლიათ შემოწმოთ http://localhost:8080/test/index.php მისამართზე. როგორც მაგალითიდან ჩანს ჩვეულებრივ PHP – ს კოდთან გვაქვს საქმე რომელიც ისევე ჩვეულებრივად მუშაობს Resin – ზე როგორც იმუშავებდა PHP5/Apache2 ტანდემის შემთხვევაში, თუმცა ყურადღება უნდა მივაქციოთ testArrayList მეთოდს რომელიც უშუალოდ მუშაობს Java – ს ArrayList კლასთან.

java() ფუნქციის მეშვეობით შეგვიძლია ნებისმიერი Java – ს კლასის ობიექტის შექმნა და შემდეგ უკვე მისი გამოყენება PHP კოდში, როგორც მაგალითშია ნაჩვენები ამ ფუნქციას პირველ პარამეტრად გადაეცემა სასურველი Java კლასი, ხოლო შემდეგ პარამეტრებად პარამეტრები Java კლასის კონსტრუქტორის. (საგულისხმოა ის დეტალი რომ Quercus ავტომატურად ახორციელებს Java ობიექტების PHP ობიექტებად გარდაქმნას და პირიქით საჭიროების შემთხვევაში)

java() ფუნქციის მიერ დაბრუნებული ობიექტი შეგვიძლია გამოვიყენოთ ისევე როგორც ამას გავაკეთებდით Java – ში. მაგალითად: $list->add(new Test()); ამ შემთხვევაში add არის ArrayList კლასის მეთოდი. გამომდინარე იქიდან რომ ArrayList არის კონტეინერი მისი იტერაცია შეგვიძლია PHP – ს foreach ოპერატორის გამოყენებით.

დამატებითი დეტალებისთვის დოკუმენტაცია იხილეთ შესაბამის მისამართებზე:
Resin Documentaion
Quercus Documentaion

ტეგები: ,

10 Responses to “Quercus – PHP in Java”

  1. გიორგი says:

    არა რა, აღფრთოვანების დამალვა არ შეიძლება. უმარტივესი და უსერიოზულესია!

  2. იოსები says:

    :D მაზდეანობა მარადჟამს

  3. levani says:

    მე ვფიქრობ php5 როგორც ჯავას სკრიპტინგ ენა ვერ მოიდგავს საფუძვებს და ამისთვის შემდეგი არგუმენტები მაქვს,
    java 5 უკვე ჩადებულია javascript ის java ს იმპლემენტაცია, და მომავალშჳ ფიქრობენ მართლაც და საუკეთესო ჯავა სკრიპტული ენის beanshell ის სამუდამო ინტეგრაციასაც,
    ეს php5 მარტო resin ის ნაბიჯი იყო და ჯერჯერობით ვერ მოიკიდა ხელი, 6 თვის წინ NYSIGJava შექვედრაზე მოსული იყო resin ის აქიტექტი ზუსტად მაგის სასაუბროდ, რავიცი ვნახოთ მაგრამ მეგონი რომ ეგ ისევ და ისევ დარჩება მარტო resin ის სამყაროში.

  4. იოსები says:

    მე ვფიქრობ php5 როგორც ჯავას სკრიპტინგ ენა ვერ მოიდგავს საფუძვებს და ამისთვის შემდეგი არგუმენტები მაქვს

    სიმართლე გითხრა მე ბევრად უფრო სასარგებლო რამ დავინახე მანდ ვიდრე მხოლოდ Java – ს სკრიპტინგის ენა ;)

  5. levancho says:

    რავიცი პირადად მე ეგ სუფტა resin ის მარკეტინგული ხოდია, ყველამ იცით რეზინი გასასტიკდა უახლესი ტოკკატის რესილების მერე, რამაც ჯერ აიძულა ერთ დროს პოდიუმზე მყოფი ვენდორს გაეოფენსორსებინა თავისი პროდუქტი, ეხლა კი ეს PHP5 , ეგაც რავიცი უკვე თითქმის ერთ წელზე მეტია რად გამოვიდა და ჯერ არაფერი ისეთი აჭიოტაჭი არ გამოუწვევია, პირველრიგში ეგ იმის ბრალია რომ php ის java იმპლემენტაცია ვერასოდეს ვერ აჯობებს performance ით C.

  6. levancho says:

    მაგრამ , აი ამის წაკითხვის მერე, (სიტყვას უკან ვიღებ “აშკა”)

    http://www.jcmartin.org/2006/07/21/1153516292738.html

    მდააა, ოჩენ საინტერესოოო, ოჩენ .

  7. იოსები says:

    არ ვიცი ლევან რეზინის მარკეტინგული სვლა არის თუ სხვა რამ, მაგრამ ფაქტია რომ მსგავს რამეს უკვე აღარ ველოდი… კი ვითომ იყო PHP – ში ჯავასთან მუშაობის შესაძლებლობა, ვითომ სან მაიკროსისტემსთთან ერთადაც აკეთებდნენ რაღაცას მაგრამ შედეგი საბოლოო ჯამში იყო 0.

    რაც შეეხება რეზინის ძრავს არ მგონია რომ მისი გადატანა სხვა ვებ/აპპ სერვერებზე რთული იყოს და შეუძლებელი… მეორეც მქონდა შეხება Groovy – სთან, გარჩეული მაქვს Ruby(JRuby) სიმართლე გითხრა ვერც ერთი ვერ აღვიქვი ისეთ ინსტრუმენტად რომელიც მე დამაკმაყოფილებდა… და არ მგონია რომ მარტო მე მქონდეს ეს განცდა :)

    PHP – ს რაც შეეხება ბევრი ვერ იტანს, ბევრს პრიმიტივად მიაჩნია მაგრამ სრული პასუხისმგებლობით შემიძლია ვთქვა რომ უზარმაზარი შესაძლებლობების მქონე ჩამოყალიბებული და განვითარებული ინსტრუმენტია და თუ ამ ენის სრულფასოვანი გამოყენების შესაძლებლობა იარსებებს Java – სთან ერთად ეს იქნება ძალიან კარგი ნებისმიერი თვალსაზრისით. რას ჩადებენ JDK – ში და რას არა ნაკლებად მადარდებს… ყოველდღიურ დეველოპმენტში JDK – ს ვიყენებთ მარტო და სხვა არაფერს? პირიქით ძალიან ბევრ სხვა ფრეიმვორკს და ტულს ვიყენებთ რომლებიც არ არის JDK – ს ნაწილი და არც იქნება არასოდეს, მაგრამ მათ გამოყენებას არავინ არასოდეს არ გვიშლიდა და არ დაგვიშლის :)

  8. levancho says:

    კი გეთანხმები მაგრამ პრობლემა ის არის რომ , ყლველთვის ჯობია პორტაბელური კოდის დაწერა, ჯერჯერობით აპლიკაციას რომელსაც java-php ით დაქერ მარტო resin ში იმუშავებს, როდესაც იგივე რო დაწერო მაგალითად javascript(not Client side) and java ში ყველგან იმუშავებს .

    თუ როდესმე ჯავას-php JDK-იმდე მიაღწევს მაშინ კი , და სიმართლე გითხრა მე მაგის წინააღმდეგი სრულიად არ ვარ პრიქით.

  9. იოსები says:

    ვნახოთ ;) დრო გვაჩვენებს ყველაფერს… შეიძლება ჩემი სიხარული და ოპტიმიზმი არც გამართლდეს :)

  10. გამარჯობა, მადლობ სტატიისთვის, მართალია მე ჯერ ჩემ აზრს ვერ გამოვხატავ ამ ტექნოლოგიის პლიუსების და მინუსების შესახებ, რადგან ჯერ JSF-ს და ajax4jsf-ს არ გავცდენილვარ web framework-ების თვალსაზრისით. მარა პერსპექტივაში უფრო ღრმადაც შეიძლება ჩავუჯდე რადგან php და java-ზე ვწერ მეც ძირითადად, ამას წინათ ვარკვევდი actionscript3.0-ით დაკავშირებას java-ს socket-ების სერვერთან, ამაზე მოგვიანებით მინდა მეც დავწერო ერთი ჯიგრული სტატია საინტერესო რამეა, ”ნინიას ბაღია” :D ვაბშე java და actionscript-ი ერთმანეთში.

დატოვე კომენტარი:

ქართული კლავიატურა, ჩართვა/გამორთვა კლავიშით "~"