मेरे पास निम्न कॉन्फ़िगरेशन के साथ एक ZF2 प्रोजेक्ट है। यह सिद्धांत ओआरएम और एसएलएमक्यूयू का उपयोग कर रहा है। चूंकि SlmQueue हमारे नामकरण सम्मेलनों और ऑरैक डेटाबेस का समर्थन नहीं कर रहा है, इसलिए हमने SlmQueueDoctrine को अनुकूलित किया है।जेडएफ 2, ओरेकल, एसएलएमक्यूयूडॉक्ट्राइन, ClearObjectManagerStrategy काम नहीं कर रहा है
मुझे संदेह है कि मेरा काम ClearObjectManagerStrategy का उपयोग नहीं कर रहा है और व्यक्तिगत नौकरियों के निष्पादन से पहले ऑब्जेक्टमेनर को साफ़ नहीं करता है।
यह कतार शुरू होने के बाद डीबी संशोधनों को प्रतिबिंबित नहीं करता है। लेकिन अगर मैं कतार डिमन को मारता हूं और फिर से शुरू करता हूं तो यह नए मान उठाता है।
मैं व्यक्तिगत नौकरियों के निष्पादन से पहले ClearObjectManagerStrategy को कैसे कार्यान्वित कर सकता हूं और ऑब्जेक्टमेनगर को साफ़ कर सकता हूं?
मैंने भाग्य के बिना कई लोगों से संपर्क करने की कोशिश की है।
composer.json
{
"repositories": [
{
"url": "https://github.com/pradeep-sanjaya/doctrine-extensions.git",
"type": "git"
}
],
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.3.3",
"doctrine/doctrine-orm-module": "0.7.*",
"pradeep-sanjaya/doctrine-extensions": "dev-master",
"spoonx/sxmail": "1.4.*",
"slm/locale": "dev-master",
"imagine/Imagine": "0.6.*",
"tecnick.com/tcpdf": "dev-master",
"slm/queue": "0.4.*",
"slm/queue-doctrine": "0.4.*"
}
}
config/autoload/slm_queue.local.php
<?php
return array(
'slm_queue' => array(
'queue_manager' => array(
'factories' => array(
'doctrineQueue' => 'SlmQueueDoctrine\Factory\DoctrineQueueFactory'
),
),
'job_manager' => array(
'factories' => array(
'Report\Job\Rank' => 'Report\Job\RankFactory',
),
'shared' => array(
'Report\Job\Rank' => false
),
),
'queues' => array(
'doctrineQueue' => array(
'table_name' => 'IOQUEUE'
)
)
)
);
?>
मॉड्यूल/रिपोर्ट/src/रिपोर्ट/नौकरी/Rank.php
<?php
namespace Report\Job;
use DoctrineModule\Persistence\ObjectManagerAwareInterface;
use DoctrineModule\Persistence\ProvidesObjectManager as ProvidesObjectManagerTrait;
use SlmQueue\Job\AbstractJob;
use Application\Entity\Report;
use Application\Log\LoggerAwareInterface;
use Application\Log\LoggerAwareTrait;
use Application\Service\ReportService;
class Rank extends AbstractJob implements ObjectManagerAwareInterface, LoggerAwareInterface
{
use LoggerAwareTrait;
use ProvidesObjectManagerTrait;
/**
* @var ReportService
*/
protected $reportService;
/**
* @var array
*/
protected $reportId = array();
public function setReportService(ReportService $reportService)
{
$this->reportService = $reportService;
}
/**
* Execute the job
*
* @return void
*/
public function execute()
{
//clear object manager does not work
//$om = $this->getObjectManager();
//$om->clear();
$content = $this->getContent();
$this->setReportId($content['reportId']);
if (!empty($this->reportId)) {
try {
if (is_array($this->reportId)) {
foreach ($this->reportId as $reportId) {
$this->updateRank($reportId);
}
unset($reportId);
} else {
$this->updateRank($this->reportId);
}
} catch (\Exception $exception) {
echo "Exception message is {$exception->getMessage()} \n";
}
}
}
private function updateRank($reportId)
{
/* @var $report Report */
$report = $this->reportService->getReport($reportId);
$this->logInfo(print_r($report, true)); // this always return older db values, the values before it start queue deamon
if (!$report instanceof Report) {
return;
}
if (empty($rankData)) {
return;
}
//more codes, application related logics
$this->reportService->updateReportEntity($report);
}
private function setReportId($reportId)
{
if (is_numeric($reportId)) {
$this->reportId = array($reportId);
} elseif (is_array($reportId)) {
$this->reportId = $reportId;
} else {
throw new \Exception('Expects reportId as int or array');
}
}
}
* "स्पष्ट ऑब्जेक्ट प्रबंधक काम नहीं करता" * क्या मतलब है? क्या आपको कोई त्रुटि मिलती है? त्रुटि क्या है? क्या 'ऑब्जेक्ट प्रबंधक' सेट नहीं है?आप अपने 'ऑब्जेक्ट प्रबंधक' कहां से इंजेक्ट करते हैं? मुझे एक कन्स्ट्रक्टर नहीं दिख रहा है ... – Wilt
ऑब्जेक्टमैनेजरएवेयर इंटेरफेस को कार्यान्वित करना और ProvidesObjectManager का उपयोग करके, आप फैक्टरी –
से ऑब्जेक्टमेनगर को इंजेक्ट कर सकते हैं। "स्पष्ट ऑब्जेक्ट मैनेजर काम नहीं करता" के साथ टिप्पणी की गई पंक्ति का मतलब है कि यह ऑब्जेक्ट मैनेजर और वर्तमान लेनदेन को फ्लश नहीं करता है –