在普通php脚本中使用appserver.io SessionBean

在普通php脚本中使用appserver.io SessionBean,php,appserver,Php,Appserver,我正在寻找一种方法,用appserver.io SessionBean替换现有应用程序中的select功能,但是我找不到一个关于如何在普通php类中访问SessionBean的示例 我从以下示例中获得了一个超级简单的单例SessionBean: <?php namespace MyVendor\MyApp; /** * @Singleton(name="MySingletonBean") */ class MySingletonBean extends \Stackable {

我正在寻找一种方法,用appserver.io SessionBean替换现有应用程序中的select功能,但是我找不到一个关于如何在普通php类中访问SessionBean的示例

我从以下示例中获得了一个超级简单的单例SessionBean:

<?php

namespace MyVendor\MyApp;

/**
 * @Singleton(name="MySingletonBean")
 */
class MySingletonBean extends \Stackable
{
    protected $counter = 0;

    public function raiseMe()
    {
        return $this->counter++;
    }
}

由于SessionBeans作为容器中的真实PHP对象存在,因此无法从e。G一个PHP-FPM应用程序。为此,我们实现了一个客户端,它向会话bean返回一个代理,并允许您执行它的方法。另外,有必要配置持久性容器本身,因为默认情况下,出于安全原因,我们已停用远程连接

因此,您应该做的第一件事是在您的项目中安装
appserver io/rmi
包作为Composer需求,例如。g

$ composer install appserver-io/rmi
之后,您必须配置一个服务器,该服务器允许远程访问持久性容器,例如。G您可以将以下XML片段添加到
etc/appserver/appserver.XML
文件中的

<server
    name="persistence-container"
    type="\AppserverIo\Server\Servers\MultiThreadedServer"
    worker="\AppserverIo\Server\Workers\ThreadWorker"
    socket="\AppserverIo\Server\Sockets\StreamSocket"
    requestContext="\AppserverIo\Server\Contexts\RequestContext"
    serverContext="\AppserverIo\Appserver\Server\Contexts\StandardServerContext"
    streamContext="\AppserverIo\Server\Contexts\StreamContext"
    loggerName="System">

<params>
    <param name="admin" type="string">info@appserver.io</param>
    <param name="transport" type="string">tcp</param>
    <param name="address" type="string">127.0.0.1</param>
    <param name="port" type="integer">8585</param>
    <param name="workerNumber" type="integer">4</param>
    <param name="workerAcceptMin" type="integer">3</param>
    <param name="workerAcceptMax" type="integer">8</param>
    <param name="documentRoot" type="string">webapps</param>
    <param name="directoryIndex" type="string">index.pc</param>
    <param name="keepAliveMax" type="integer">64</param>
    <param name="keepAliveTimeout" type="integer">5</param>
    <param name="errorsPageTemplatePath" type="string">resources/templates/www/error.phtml</param>
</params>

<environmentVariables>
    <environmentVariable condition="" definition="LOGGER_ACCESS=Access" />
</environmentVariables>

<connectionHandlers>
    <connectionHandler type="\AppserverIo\WebServer\ConnectionHandlers\HttpConnectionHandler" />
    <!-- connectionHandler type="\AppserverIo\Appserver\MessageQueue\ConnectionHandlers\AmqpConnectionHandler" / -->
</connectionHandlers>

<accesses>
    <!-- per default allow everything -->
    <access type="allow">
        <params>
            <param name="X_REQUEST_URI" type="string">.*</param>
        </params>
    </access>
</accesses>

<modules>
    <!-- REQUEST_POST hook -->
    <module type="\AppserverIo\WebServer\Modules\AuthenticationModule"/>
    <module type="\AppserverIo\WebServer\Modules\VirtualHostModule"/>
    <module type="\AppserverIo\WebServer\Modules\EnvironmentVariableModule" />
    <module type="\AppserverIo\WebServer\Modules\RewriteModule"/>
    <module type="\AppserverIo\WebServer\Modules\DirectoryModule"/>
    <module type="\AppserverIo\WebServer\Modules\AccessModule"/>
    <module type="\AppserverIo\WebServer\Modules\CoreModule"/>
    <module type="\AppserverIo\Appserver\PersistenceContainer\PersistenceContainerModule" />
    <!-- RESPONSE_PRE hook -->
    <module type="\AppserverIo\WebServer\Modules\DeflateModule"/>
    <!-- RESPONSE_POST hook -->
    <!-- module type="\AppserverIo\Appserver\Core\Modules\ProfileModule"/ -->
</modules>

<fileHandlers>
    <fileHandler name="persistence-container" extension=".pc" />
</fileHandlers>

</server>
该示例使用由
md5('test)
生成的虚拟会话ID,该ID仅用于测试目的。例如,在实际应用程序中,您将使用默认的PHP会话ID

希望能给你一个好印象事情会怎样发展:)

<server
    name="persistence-container"
    type="\AppserverIo\Server\Servers\MultiThreadedServer"
    worker="\AppserverIo\Server\Workers\ThreadWorker"
    socket="\AppserverIo\Server\Sockets\StreamSocket"
    requestContext="\AppserverIo\Server\Contexts\RequestContext"
    serverContext="\AppserverIo\Appserver\Server\Contexts\StandardServerContext"
    streamContext="\AppserverIo\Server\Contexts\StreamContext"
    loggerName="System">

<params>
    <param name="admin" type="string">info@appserver.io</param>
    <param name="transport" type="string">tcp</param>
    <param name="address" type="string">127.0.0.1</param>
    <param name="port" type="integer">8585</param>
    <param name="workerNumber" type="integer">4</param>
    <param name="workerAcceptMin" type="integer">3</param>
    <param name="workerAcceptMax" type="integer">8</param>
    <param name="documentRoot" type="string">webapps</param>
    <param name="directoryIndex" type="string">index.pc</param>
    <param name="keepAliveMax" type="integer">64</param>
    <param name="keepAliveTimeout" type="integer">5</param>
    <param name="errorsPageTemplatePath" type="string">resources/templates/www/error.phtml</param>
</params>

<environmentVariables>
    <environmentVariable condition="" definition="LOGGER_ACCESS=Access" />
</environmentVariables>

<connectionHandlers>
    <connectionHandler type="\AppserverIo\WebServer\ConnectionHandlers\HttpConnectionHandler" />
    <!-- connectionHandler type="\AppserverIo\Appserver\MessageQueue\ConnectionHandlers\AmqpConnectionHandler" / -->
</connectionHandlers>

<accesses>
    <!-- per default allow everything -->
    <access type="allow">
        <params>
            <param name="X_REQUEST_URI" type="string">.*</param>
        </params>
    </access>
</accesses>

<modules>
    <!-- REQUEST_POST hook -->
    <module type="\AppserverIo\WebServer\Modules\AuthenticationModule"/>
    <module type="\AppserverIo\WebServer\Modules\VirtualHostModule"/>
    <module type="\AppserverIo\WebServer\Modules\EnvironmentVariableModule" />
    <module type="\AppserverIo\WebServer\Modules\RewriteModule"/>
    <module type="\AppserverIo\WebServer\Modules\DirectoryModule"/>
    <module type="\AppserverIo\WebServer\Modules\AccessModule"/>
    <module type="\AppserverIo\WebServer\Modules\CoreModule"/>
    <module type="\AppserverIo\Appserver\PersistenceContainer\PersistenceContainerModule" />
    <!-- RESPONSE_PRE hook -->
    <module type="\AppserverIo\WebServer\Modules\DeflateModule"/>
    <!-- RESPONSE_POST hook -->
    <!-- module type="\AppserverIo\Appserver\Core\Modules\ProfileModule"/ -->
</modules>

<fileHandlers>
    <fileHandler name="persistence-container" extension=".pc" />
</fileHandlers>

</server>
<?php

use AppserverIo\RemoteMethodInvocation\RemoteConnectionFactory;

require_once __DIR__ . '/vendor/autoload.php';

$connection = RemoteConnectionFactory::createContextConnection();
$connection->injectPort(8585);
$connection->injectAddress('127.0.0.1');
$connection->injectTransport('http');
$connection->injectAppName('example');

$session = $connection->createContextSession();
$session->setSessionId(md5('test'));
$proxy = $session->createInitialContext()->lookup('ASingletonProcessor');

echo $proxy->raiseCounter() . PHP_EOL;