【问题标题】:Working with Php-Java Bridge使用 PHP-Java 桥接器
【发布时间】:2011-07-20 08:50:22
【问题描述】:

我无法正确设置 Php-Java Bridge 设置。

我会解释我做了什么。

  • 我的网站是纯php的
  • 对于我们的支付交易流程,我们需要设置一个 php-java 桥
  • 我点击此链接设置网桥PHP-JAVA BRIDGE INSTALATION.
  • 在这里我了解到我需要一个私有 jvm 来安装网桥。
  • 所以我首先使用我的 c 面板在 Private JVM 中安装了 apache-tomcat-6.0.14。安装后,它要求我将域映射到私有 JVM。所以我将我的域 example.com(这是唯一可用的选项)映射到它。
  • 然后它要求启用从 Apache Web 服务器到我的 Java 应用程序服务器的流量重定向(有一个复选框,我点击了它)
  • 最后它要求我部署 WAR 文件(JavaBridge.WAR 是我的文件),一切似乎都很好
  • 现在,当我转到 http://example.com/JavaBridge/ 时,我可以看到 javabridge 示例,它工作正常。

到目前为止还不错

现在,当我尝试从 php.ini 访问 java 类文件时,我的问题就从这里开始了。我创建了一个示例test.php,并将以下代码放入其中。

  <?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");
?>

我的站点内容位于 public_html 文件夹中,WAR 文件部署在私有 jvm 中。

这些是我收到的错误消息。

  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:  1.6.0_22@http://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

最后我对 java 了解不多。所以我被困在这里不知道该怎么办。

【问题讨论】:

  • 你能解决java_require()的问题吗?

标签: java php php-java-bridge


【解决方案1】:

这里有一个很棒的一步一步tutorial你可以关注,它显示了所需的一切!它有点旧(2007 年),但不久前帮助了我。

还有另一种选择。您可以安装 Apache Tomcat 并在那里部署您的战争。只要您尊重端口设置,您甚至可以同时拥有多个 tomcat 实例,同时您的 httpd 在同一台机器上同时运行。您甚至可以使用 Apache httpd 将它们放在前面。

【讨论】:

  • Thankzz 的精彩教程......但我仍然有一些疑问......就像我试图在基于 linux 的实时服务器上设置它......这里的教程适用于 Windows xp ....所以对于 linux 服务器也可以遵循这个...
  • @Scrappy Cocco:你喜欢它真是太好了!你会发现幸运的是,windows 和 linux 之间的事情是惊人的相同。您必须将“.dll”替换为“.so”,将路径分隔符“\”替换为“/”,并且目录位于不同的位置,但易于理解。毕竟所有的窗口都复制了许多 Unix 中使用的约定。
  • @CostisAivalis - 你知道上面提到的require_java() 错误的解决方法吗?
  • @Kit:第 10 步是否提供“Hello World”输出?
  • @CostisAivalis:不。我收到一个错误Warning: java_require() not supported anymore. Please use
【解决方案2】:

您可以使用此 php implementation on github 与 php 5.3 一起使用。

有关更多信息,请参阅 git 自述文件中的学分。

【讨论】:

    【解决方案3】:

    使用 e24PaymentPipe 库的 pure PHP implementation 可以为自己省去很多麻烦。

    免责声明

    链接是我的库的 github repo,但不是我写的。有关原始学分,请参阅自述文件。

    【讨论】:

      【解决方案4】:

      你可以试试这个:

      1. 将您的代码打包到 jar 中,并将其复制到 java.ext.dirs,您可以在 JavaBridge.log 中找到该目录
      2. 将相关类库复制到java.ext.dirs
      3. 重启JavaBridge服务

      祝你好运!

      <?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";}
      ?>
      

      【讨论】:

        【解决方案5】:

        为什么不将 e24PaymentPipe 类放在 Java 应用程序的类路径中并跳过下面的两行:

        // $path_e24class = getcwd(). '/e24PaymentPipe.class';
        // java_require($path_e24class);
        
        $pipe = new java("fully.qualified.classpath.e24PaymentPipe");
        

        您正在混合 PHP 端和 Java 端操作。从理论上讲,java_require(已弃用)旨在在 Java 端工作。您正在指定 PHP 侧路径。

        【讨论】:

          【解决方案6】:

          你可以试试这个;将 JavaBridge.jar 放入 tomcat 的 lib 文件夹中,例如apache-tomcat-7.0.12/lib.

          重启tomcat服务器,然后,

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

          这样我创建了对象的 php 版本。

          【讨论】:

            猜你喜欢
            • 2011-02-13
            • 2018-02-18
            • 1970-01-01
            • 2013-06-08
            • 1970-01-01
            • 2011-11-29
            • 2012-06-12
            • 1970-01-01
            • 2012-07-19
            相关资源
            最近更新 更多