2011-03-22 36 views
5

Tôi gặp sự cố khi thiết lập thiết lập Php-Java Bridge đúng cách.Làm việc với Cầu Php-Java

Tôi sẽ giải thích những gì tôi đã làm.

  • Trang web của tôi là trong php tinh khiết
  • Đối với quá trình giao dịch thanh toán của chúng tôi, chúng tôi cần phải thiết lập một cầu nối php-java
  • Tôi đi theo liên kết này để thiết lập cầu PHP-JAVA BRIDGE INSTALATION.
  • Ở đây tôi biết rằng tôi cần phải có một jvm riêng để cài đặt cây cầu.
  • Vì vậy, lần đầu tiên tôi cài đặt apache-tomcat-6.0.14 trong JVM riêng bằng bảng điều khiển c của tôi. Sau khi instalation nó yêu cầu tôi Map một miền tới JVM riêng. Vì vậy, tôi ánh xạ tên miền example.com của tôi (đó là tùy chọn duy nhất có sẵn) cho nó. Sau đó, nó yêu cầu bật chuyển hướng lưu lượng truy cập từ máy chủ web Apache đến máy chủ ứng dụng Java của tôi (có hộp kiểm và tôi đã nhấp vào nó)
  • Cuối cùng nó yêu cầu tôi triển khai Tệp WAR (JavaBridge.WAR là tệp của tôi) và everthing có vẻ tốt đẹp
  • Bây giờ khi tôi đi đến http://example.com/JavaBridge/ Tôi có thể thấy các ví dụ javabridge và nó hoạt động tốt.

So far so good

Bây giờ vấn đề của tôi bắt đầu ở đây khi tôi cố gắng truy cập vào một tập tin lớp java từ php. Mẫu test.php là những gì tôi tạo và đặt mã sau vào đó.

<?php 
     require_once("http://example.com:portnumber/JavaBridge/java/Java.inc"); 
     $System = java("java.lang.System"); 
     echo $System->getProperties(); //This Part echo's correctly and shows the data so it means i can access Java.inc Correctly 

     $path_e24class = getcwd(). '/e24PaymentPipe.class'; //This part fails both test.php and java class file e24PaymentPipe.class are in the same directory in publich_html folder 
     java_require($path_e24class); 
     $pipe = new Java("e24PaymentPipe"); 
     $pipe->setAction("1"); 
?> 

Nội dung trang web của tôi nằm trong thư mục public_html và tệp WAR được triển khai trong jvm riêng tư.

Đây là thông báo lỗi đang nhận được.

1) Warning: java_require() not supported anymore. Please use tomcat or jee hot deployment instead 
    Fatal error: Uncaught [[o:Exception]:"java.lang.Exception: CreateInstance failed: new e24PaymentPipe. Cause: java.lang.ClassNotFoundException: e24PaymentPipe VM: [email protected]://java.sun.com/" at: #-10 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358) #-9 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) #-8 
java.lang.Class.forName0(Native Method) #-7 
java.lang.Class.forName(Class.java:247) #-6 
php.java.bridge.Util.classForName(Util.java:1518) #-5 
php.java.bridge.JavaBridge.CreateObject(JavaBridge.java:445) #-4 
php.java.bridge.Request.handleRequest(Request.java:458) #-3 
php.java.bridge.Request.handleRequests(Request.java:500) #-2 
php.java.bridge.http.ContextRunner.run(ContextRunner.java:145) #-1 
php.java.bridge.ThreadPool$Delegate.run(ThreadPool.java:60) #0 
http://example.com:portnumber/JavaBridge/java/Java.inc(232): java_ThrowExceptionProxyFactory->getProxy(3, 'java.util.Prope...', 'T', false) #1 

Cuối cùng tôi không biết nhiều về java. Vì vậy, bị mắc kẹt ở đây không biết phải làm gì.

+0

Bạn có thể giải quyết các vấn đề với 'java_require()' không? – Kit

Trả lời

3

Đây là bước tuyệt vời theo bước tutorial bạn có thể theo dõi, hiển thị mọi thứ bắt buộc! Đó là một chút cũ (2007) nhưng đã giúp tôi một thời gian trước đây.

Ngoài ra còn có một tùy chọn khác. Bạn có thể cài đặt Apache Tomcat và triển khai chiến tranh của bạn ở đó. Bạn có thể có nhiều trường hợp tomcat đồng thời với httpd của bạn đang chạy cùng một lúc trên cùng một máy, miễn là bạn tôn trọng cài đặt cổng. Bạn thậm chí có thể đứng trước họ với Apache httpd.

+0

Thankzz cho rằng hướng dẫn tuyệt vời .... nhưng tôi vẫn còn một số nghi ngờ ... như đang cố gắng để thiết lập này trên một máy chủ sống mà dựa linux .... và hướng dẫn ở đây là dành cho windows xp .... vì vậy có thể điều này được theo sau quá cho một máy chủ Linux ... –

+0

@Scrappy Cocco: Tuyệt vời mà bạn thích nó! Bạn sẽ thấy rằng mọi thứ may mắn đáng ngạc nhiên giống hệt nhau giữa các cửa sổ và Linux. Bạn phải thay thế ".dll" bằng ".so", ký tự phân tách đường dẫn "\" bằng "/" và các thư mục được đặt ở các vị trí khác nhau nhưng dễ theo dõi. Sau khi tất cả các cửa sổ đã sao chép rất nhiều các quy ước được sử dụng trong Unix. –

+0

@CostisAivalis - Bạn có biết một công việc xung quanh cho lỗi 'require_java()' được lưu ý ở trên không? – Kit

0

Bạn có thể thử điều này; đặt JavaBridge.jar vào thư mục lib của tomcat, ví dụ: apache-tomcat-7.0.12/lib.

Khởi động lại máy chủ tomcat và sau đó,

$pipe = new java("com.aciworldwide.commerce.gateway.plugins.e24PaymentPipe"); 
$pipe->setAction("1"); 

Bằng cách này tôi đã tạo ra phiên bản php của đối tượng.

0

Tại sao bạn không đặt lớp e24PaymentPipe trong classpath ứng dụng Java của bạn và bỏ qua hai dòng dưới đây:

// $path_e24class = getcwd(). '/e24PaymentPipe.class'; 
// java_require($path_e24class); 

$pipe = new java("fully.qualified.classpath.e24PaymentPipe"); 

Bạn đang trộn các hoạt động bên PHP và Java phía. theo lý thuyết, java_require (không được chấp nhận) được thiết kế để hoạt động ở phía Java. Bạn đang chỉ định đường dẫn bên PHP.

2

bạn có thể thử này:

  1. gói mã của bạn để JAR, và sao chép nó vào java.ext.dirs mà bạn có thể tìm thấy trong JavaBridge.log
  2. sao chép các thư viện lớp liên quan đến java.ext .dirs
  3. khởi động lại dịch vụ của JavaBridge

chúc may mắn!

<?php require_once("JavaBridge/java/Java.inc"); 
    try {  
    $hd = new java("hdfs.HDFS");  
    $hd->get("hdfs://master:9000/user/hadoop/test-in/logo_cn.png", "/home/hadoop/1.png"); 
    } catch (JavaException $ex) { echo "An exception occured: "; echo $ex; echo "<br>\n";} 
?> 
0

Bạn có thể tiết kiệm cho mình rất nhiều đau buồn bằng cách sử dụng một pure PHP implementation của thư viện e24PaymentPipe.

Disclaimer

Liên kết là để repo github của tôi về thư viện, nhưng tôi đã không viết nó. Xem readme trong cho các khoản tín dụng ban đầu.

2

Bạn có thể sử dụng php implementation on github hoạt động với php 5.3.

Xem tín dụng trên git readme để biết thêm thông tin.

Các vấn đề liên quan