[Cascavel-pm] Erro na herança de subrotina

Ednardo Lobo ednardo em elobo.cjb.net
Quinta Março 6 12:28:08 CST 2003


On Thu, Mar 06, 2003 at 02:52:00PM -0300, Marcia Henke wrote:
> Olá pessoal !!
>
>
> Estou  tendo o  seguinte erro  quando executo  meu arquivo  Monitor.pl
> :   Can't   locate   object   method   "getNameSystem"   via   package
> "ServiceController" (perhaps you  forgot to load "ServiceController"?)
> at   SNMPManager.pm  line   8.  Compilation   failed  in   require  at
> ./Monitor.pl line 6. BEGIN failed--compilation aborted at ./Monitor.pl
> line 6.
>
>
> No arquivo Monitor.pl tenho a seguinte implementação
>
> #!/usr/bin/perl -I/home/monitor
> use SNMPManager;                                       # LINHA 6
> $objSNMP = new SNMPManager();
> $serviceSNMP = SNMPManager->checkService();
> $config = ServerManager->getValue("STATUS_MONITOR");
> if ($config == 1){
>   if (index($serviceSNMP, "No Response") != -1) {
>     SNMPManager -> restart();
>   }#FIM TESTE STATUS SERVIÇO "SNMP"
> }
>
>
> No arquivo SNMPManager.pm esta implementado da seguinte forma :
>
> package SNMPManager;
> use ServiceController;
> our @ISA = ("ServiceController");
> $objSNMP = new ServiceController();
> $dir = "/home/monitor/novo/logs/2003";
> $nameFile = ServiceController->getNameSystem();               # LINHA 8
> sub new {
>  my $SNMPService = {};
>  checkStatus();
>  bless $SNMPService, "SNMPManager";
>  return $SNMPService;
> }
>
> sub checkService {
>   system("snmpwalk suryatec -c public -v 2c sysUptime > SNMP-scplog 2> SNMP-scplog");
>   $result = `cat SNMP-scplog`;
>   system("rm -rf SNMP-scplog");
>   return $result;
> }
>
> sub restart {
>   system("/etc/init.d/snmpd restart >> $dir/$nameFile");
> }
> 1;
>
>
> E  o arquivo  ServiceController.pm, que  servirá como  um controlador,
> onde SNMPManager.pm não sabe que existe o LogManager.pm :
>
> package ServiceController;
> use StatusManager;
> use LogManager;
> our @ISA = ("LogManager", "StatusManager");
> $objLog=new LogManager();
> $objStatus=statusManager StatusManager();
> sub new {
>   $class = shift;
>   $self = {};
>   bless ($self,$class);
>   return $self;
> }
> 1;
> 
> O que  estou fazendo errado, pois  não consigo visualizar onde  está o
> erro. O objetos estão carregados. Agradeço ajuda anciosa
>

    Márcia, a  estruturação dos pacotes  não está  muito boa e  você não
está utilizando a herança de forma muito adequada, mas, por agora, tente
substituir a linha 8:

    $nameFile  = ServiceController->getNameSystem();

    por
    
    $nameFile = ServiceController::getNameSystem();


    Acho que irá resolver seu problema!!

-- 
    Ednardo Lobo - www.elobo.cjb.net

    Por favor, evitem enviar anexos no formato MS-Office, obrigado!
    Veja: http://www.fsf.org/philosophy/no-word-attachments.pt.html

--
Air Force Inertia Axiom:
	Consistency is always easier to defend than correctness.



Mais detalhes sobre a lista de discussão Cascavel-pm