Hi Haj,
ich hoffe, es geht dir gut. :)
Was meinst du denn mit "Rustikalem Design" :)
Schlecht, oder nur veraltet ?
Ich habe nun alles entfernt was nicht notwendig ist, um den Code besser
zu verstehen und schreibe ihn Part für Part neu, bzw. prüfe, was der Code
genau bewirkt.
Ich habe jetzt nur noch den Objekt - Manager :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package Kernel::System::ObjectManager;
use strict;
use warnings;
use Carp qw( carp confess );
# use Kernel::Config;
# use Kernel::System::Log;
our $CurrentObject;
# -------------------------------------------------------------------------------------------------------------------------------
sub new {
# Übergabe der Parameter aus Aufruf
my ( $Typ , %Parameter ) = @_;
# Asssozierung eines Hashes zu einer Klasse
my $Self = bless { }, $Typ;
# Entfernung des Debug - Parameters
$Self -> { Debug } = delete $Parameter{ Debug };
# Sortierung der Parameter des Hashes & Zuordnung über Befehl "$Self -> { Param } -> { $Parameter }"
# ( Nur bei Übergabe eines Parameters über NEW - Methode des Object - Managers )
for my $Schluessel ( sort keys %Parameter )
{
$Self -> { Parameter } -> { $Schluessel } = $Parameter{ $Schluessel };
}
# Rückgabe des OM - Objektes
return $Self;
}
# -------------------------------------------------------------------------------------------------------------------------------
sub Get {
# No param unpacking for increased performance
if ( $_[ 1 ] && $_[ 0 ] -> { Objects } -> { $_[ 1 ] } )
{
return $_[ 0 ] -> { Objects } -> { $_[ 1 ] };
}
if ( !$_[ 1 ] )
{
$_[ 0 ] -> _DieWithError( Error => "Fehler : Fehlender Parameter ( Objekt - Bez. )" );
}
local $CurrentObject = $_[ 1 ] if !$CurrentObject;
return $_[ 0 ] -> _ObjectBuild( Package => $_[ 1 ] );
}
# -------------------------------------------------------------------------------------------------------------------------------
sub _ObjectBuild {
my ( $Self, %Parameter ) = @_;
my $Package = $Parameter{ Package };
my $Datei_Bezeichnung = $Package;
$Datei_Bezeichnung =~ s{::}{/}g;
$Datei_Bezeichnung .= '.pm';
eval { require $Datei_Bezeichnung; };
if ( $@ )
{
if ( $CurrentObject && $CurrentObject ne $Package )
{
$Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject" );
} else {
$Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Moduls $Package" );
}
}
}
# -------------------------------------------------------------------------------------------------------------------------------
sub _DieWithError {
my ( $Self, %Parameter ) = @_;
print $Parameter{ Error };
}
# -------------------------------------------------------------------------------------------------------------------------------
1;
und die "Installer.pl" für den Aufruf :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
package Installer;
use strict;
use warnings;
use Kernel::System::InterfaceInstaller;
use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager -> new( 'test' => "Test" ); # Erstellung des Kernels für Objekt - Manager
# --------------------------------------------------------------------------------------------------------------------------------------------------------
Initialisierung( );
# --------------------------------------------------------------------------------------------------------------------------------------------------------
sub Initialisierung {
my $Debug = 1;
my $Test = $Kernel::OM -> Get( 'Kernel::Modules::test' );
}
Ich möchte nun herausfinden ( Ja immer noch :) ), wann "$CurrentObject && $CurrentObject ne $Package" wahr ist.
if ( $@ )
{
if ( $CurrentObject && $CurrentObject ne $Package )
{
$Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject" );
} else {
$Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Moduls $Package" );
}
}
Ändere ich 'Kernel::Modules::test' auf ein falsches Modul, wird die Meldung : "Fehler bei der Initialisierung des Moduls $Package" angezeigt. Lade ich jetzt aber ein Modul im Modul "test",
z. B. mit :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl
package Kernel::Modules::test;
use strict;
use warnings;
our @ObjectDependencies = ( 'Kernel::Config' );
# --------------------------------------------------------------------------------------------------------------------------------------------------------
sub new {
my ( $Type, %Parameter ) = @_;
# Asssozierung eines Hashes zu einer Klasse
my $Self = { };
bless( $Self, $Type );
my $Test = $Kernel::OM -> Get( 'Kernel::Modules::FalschesModul' );
}
# --------------------------------------------------------------------------------------------------------------------------------------------------------
sub Ausfuehrung {
print "Ausfuehrung !" , "\n";
}
# --------------------------------------------------------------------------------------------------------------------------------------------------------
1;
Das && verweist doch darauf, dass in dem Paket "test" nochmal den Objekt - Manager aufrufe,
was ich ja mit dem Get Befehl mache. Ist das Paket dann falsch, müsste dann nicht die Meldung :
"Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject"
erscheinen ?
Die Fehlerausgabe printe ich erstmal mit "print $Parameter{ Error };".
VG
YAPD
Last edited: 2019-06-02 22:12:25 +0200 (CEST)
Yet Another Perl Developer