Как вызвать сессионный EJB-компонент из PHP? - PullRequest
1 голос
/ 05 июня 2010

Есть ли способ вызвать сессионный EJB-компонент из PHP? Существуют ли какие-либо специальные функции для этого?

Ответы [ 2 ]

3 голосов
/ 05 июня 2010

Не совсем. Если вы можете делать вызовы CORBA, большинство контейнеров поддерживают CORBA в качестве протокола для связи с удаленным EJB, но я бы не рекомендовал его.

Вам бы больше повезло, выставив вызов EJB Session Bean в качестве веб-службы SOAP, либо просто представьте его сервлетом и вызовите его как специальный веб-сервис.

Теперь, если вы используете PHP на сервере Java EE (Resin, я думаю, может запускать PHP), то вы можете вызвать вызов Java, который может вызвать метод EJB.

Но, честно говоря, веб-сервис или специальный веб-фасад, вероятно, ваш лучший и самый быстрый путь к успеху, при условии, что вам разрешено их писать.

1 голос
/ 06 июня 2010

Есть несколько библиотек, которые реализуют мост Java / Php, например PHP / Java Bridge .

Так что, если вы использовали IBM WebSphere ( source ):

<?php
   // Get the provider URL and Initial naming factory
   // These properties were set in the script that started the Java Bridge
   $system = new Java("java.lang.System");
   $providerUrl = $system->getProperty("java.naming.provider.url");
   $namingFactory = $system->getProperty("java.naming.factory.initial");
   $envt = array(
     "javax.naming.Context.PROVIDER_URL" => $providerUrl,
     "javax.naming.Context.INITIAL_CONTEXT_FACTORY" => $namingFactory,);
   // Get the Initial Context
   $ctx = new Java("javax.naming.InitialContext", $envt);
   // Find the EJB
   $obj = $ctx->lookup("WSsamples/BasicCalculator");
   // Get the Home for the EJB
   $rmi = new Java("javax.rmi.PortableRemoteObject");
   $home = $rmi->narrow($obj, new Java("com.ibm.websphere.samples.technologysamples.ejb.stateless.basiccalculatorejb.BasicCalculatorHome"));
   // Create the Object
   $calc = $home->create();
   // Call the EJB
   $num = $calc->makeSum(1,3);
   print ("<p> 1 + 3 = $num </p>");
?>
...