File Coverage

blib/lib/Tuxedo/Admin.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package Tuxedo::Admin;
2              
3             our $VERSION = '0.08';
4              
5 1     1   23805 use Carp;
  1         2  
  1         81  
6 1     1   6 use strict;
  1         1  
  1         33  
7 1     1   641 use Tuxedo::Admin::ud32;
  1         4  
  1         34  
8 1     1   735 use Tuxedo::Admin::ExportedResource;
  0            
  0            
9             use Tuxedo::Admin::Group;
10             use Tuxedo::Admin::LocalAccessPoint;
11             use Tuxedo::Admin::ImportedResource;
12             use Tuxedo::Admin::Resources;
13             use Tuxedo::Admin::RemoteAccessPoint;
14             use Tuxedo::Admin::Server;
15             use Tuxedo::Admin::Service;
16             use Tuxedo::Admin::TDomain;
17             use Data::Dumper;
18              
19             sub new
20             {
21             my $pkg = shift;
22             my $self = { @_ };
23              
24             $self->{'TUXDIR'} = $ENV{'TUXDIR'} if exists $ENV{'TUXDIR'};
25             $self->{'TUXCONFIG'} = $ENV{'TUXCONFIG'} if exists $ENV{'TUXCONFIG'};
26             $self->{'BDMCONFIG'} = $ENV{'BDMCONFIG'} if exists $ENV{'BDMCONFIG'};
27             $self->{'APP_PW'} = $ENV{'APP_PW'} if exists $ENV{'APP_PW'};
28              
29             croak("Missing TUXDIR parameter!") unless exists $self->{'TUXDIR'};
30             croak("Missing TUXCONFIG parameter!") unless exists $self->{'TUXCONFIG'};
31             croak("Missing BDMCONFIG parameter!") unless exists $self->{'BDMCONFIG'};
32              
33             $self->{client} =
34             new Tuxedo::Admin::ud32
35             (
36             'TUXDIR' => $self->{'TUXDIR'},
37             'TUXCONFIG' => $self->{'TUXCONFIG'},
38             'BDMCONFIG' => $self->{'BDMCONFIG'},
39             'APP_PW' => $self->{'APP_PW'}
40             );
41              
42             bless($self, $pkg);
43              
44             return $self;
45             }
46              
47             sub _tmib_get
48             {
49             my ($self, $input_buffer) = @_;
50             my (%buffer, $field, $occurrence, $error, %output_buffer);
51             $input_buffer->{'TA_OPERATION'} = [ 'GET' ];
52             do
53             {
54             ($error, %buffer) = $self->{client}->tpcall('.TMIB', $input_buffer);
55             if ($buffer{'TA_OCCURS'}[0] ne '0')
56             {
57             foreach $field (keys %buffer)
58             {
59             foreach $occurrence (@{ $buffer{$field} })
60             {
61             if (exists $output_buffer{$field})
62             {
63             push @{ $output_buffer{$field} }, $occurrence;
64             }
65             else
66             {
67             $output_buffer{$field}[0] = $occurrence;
68             }
69             }
70             }
71             }
72             $input_buffer->{'TA_CURSOR'}[0] = $buffer{'TA_CURSOR'}[0];
73             $input_buffer->{'TA_OPERATION'}[0] = 'GETNEXT';
74             }
75             while (exists $buffer{'TA_MORE'} and ($buffer{'TA_MORE'}[0] ne '0'));
76             return ($error, %output_buffer);
77             }
78              
79             sub _tmib_set
80             {
81             my ($self, $input_buffer) = @_;
82             my ($error, %output_buffer);
83             $input_buffer->{'TA_OPERATION'} = [ 'SET' ];
84             ($error, %output_buffer) = $self->{client}->tpcall('.TMIB', $input_buffer);
85             return ($error, %output_buffer);
86             }
87              
88             sub status
89             {
90             my $self = shift;
91             return $self->{client}->status();
92             }
93              
94             sub print_status
95             {
96             my $self = shift;
97             my $filehandle = shift;
98             if (defined $filehandle)
99             {
100             print $filehandle $self->status(), "\n";
101             }
102             else
103             {
104             print STDOUT $self->status(), "\n";
105             }
106             }
107              
108             sub resources
109             {
110             my $self = shift;
111              
112             my (%input_buffer, $error, %output_buffer);
113             my ($field, $methodname, %info, $resources);
114              
115             $input_buffer{'TA_CLASS'} = [ 'T_DOMAIN' ];
116             $input_buffer{'TA_FLAGS'} = [ '65536' ]; # MIB_LOCAL
117              
118             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
119              
120             delete $output_buffer{'TA_OCCURS'};
121             delete $output_buffer{'TA_ERROR'};
122             delete $output_buffer{'TA_MORE'};
123             delete $output_buffer{'TA_CLASS'};
124             delete $output_buffer{'TA_STATUS'};
125              
126             foreach $field (keys %output_buffer)
127             {
128             $methodname = $field;
129             $methodname =~ s/^TA_//;
130             $methodname =~ tr/A-Z/a-z/;
131             $info{$methodname} = $output_buffer{$field}[0];
132             }
133              
134             $resources = new Tuxedo::Admin::Resources($self, %info);
135             return $resources;
136             }
137              
138             sub server
139             {
140             croak "Invalid parameters" unless (@_ == 3);
141             my ($self, $svrgrp, $svrid) = @_;
142             return new Tuxedo::Admin::Server($self, $svrgrp, $svrid);
143             }
144              
145             sub server_list
146             {
147             my $self = shift;
148              
149             my (%input_buffer, $error, %output_buffer, $filter);
150             my ($server, $methodname, %info, @servers);
151             my ($i, $count, $field);
152              
153             # Add filter fields
154             if (@_ != 0)
155             {
156             my $filter = shift;
157             #print Dumper($filter);
158             croak "Filter must be a _reference_ to a hash" unless ref $filter;
159             foreach $methodname (keys %{ $filter })
160             {
161             $field = "ta_$methodname";
162             $field =~ tr/a-z/A-Z/;
163             $input_buffer{$field} = [ $filter->{$methodname} ];
164             }
165             }
166              
167             $input_buffer{'TA_CLASS'} = [ 'T_SERVER' ];
168             $input_buffer{'TA_FLAGS'} = [ '65536' ]; # MIB_LOCAL
169             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
170             croak($self->status() . "\n") if ($error < 0);
171              
172             $count = $output_buffer{'TA_OCCURS'}[0];
173              
174             delete $output_buffer{'TA_OCCURS'};
175             delete $output_buffer{'TA_ERROR'};
176             delete $output_buffer{'TA_MORE'};
177             delete $output_buffer{'TA_CLASS'};
178             delete $output_buffer{'TA_STATUS'};
179              
180             for ($i=0;$i<$count;$i++)
181             {
182             $server = new Tuxedo::Admin::Server(
183             $self,
184             $output_buffer{TA_SRVGRP}[$i],
185             $output_buffer{TA_SRVID}[$i]
186             );
187             $servers[$i] = $server;
188             }
189             return @servers;
190             }
191              
192             sub group
193             {
194             croak "Invalid parameters" unless (@_ == 2);
195             my ($self, $svrgrp) = @_;
196             return new Tuxedo::Admin::Group($self, $svrgrp);
197             }
198              
199             sub group_list
200             {
201             my $self = shift;
202             my (%input_buffer, $error, %output_buffer);
203             my ($group, $methodname, %info, @groups);
204             my ($i, $count, $field);
205              
206             # Add filter fields
207             if (@_ != 0)
208             {
209             my $filter = shift;
210             croak "Filter must be a _reference_ to a hash" unless ref $filter;
211             foreach $methodname (keys %{ $filter })
212             {
213             $field = "ta_$methodname";
214             $field =~ tr/a-z/A-Z/;
215             $input_buffer{$field} = [ $filter->{$methodname} ];
216             }
217             }
218              
219             $input_buffer{'TA_CLASS'} = [ 'T_GROUP' ];
220             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
221             croak($self->status() . "\n") if ($error < 0);
222              
223             $count = $output_buffer{'TA_OCCURS'}[0];
224              
225             delete $output_buffer{'TA_OCCURS'};
226             delete $output_buffer{'TA_ERROR'};
227             delete $output_buffer{'TA_MORE'};
228             delete $output_buffer{'TA_CLASS'};
229             delete $output_buffer{'TA_STATUS'};
230              
231             for ($i=0;$i<$count;$i++)
232             {
233             $group = new Tuxedo::Admin::Group(
234             $self,
235             $output_buffer{TA_SRVGRP}[$i]
236             );
237             $groups[$i] = $group;
238             }
239             return @groups;
240             }
241              
242             sub service
243             {
244             croak "Invalid parameters" unless (@_ == 3);
245             my ($self, $servicename, $svrgrp) = @_;
246             return new Tuxedo::Admin::Service($self, $servicename, $svrgrp);
247             }
248              
249             sub service_list
250             {
251             my $self = shift;
252             my (%input_buffer, $error, %output_buffer);
253             my ($service, $methodname, %info, @services);
254             my ($i, $count, $field);
255              
256             # Add filter fields
257             if (@_ != 0)
258             {
259             my $filter = shift;
260             croak "Filter must be a _reference_ to a hash" unless ref $filter;
261             foreach $methodname (keys %{ $filter })
262             {
263             $field = "ta_$methodname";
264             $field =~ tr/a-z/A-Z/;
265             $input_buffer{$field} = [ $filter->{$methodname} ];
266             }
267             }
268              
269             #%input_buffer = $_[0]->fields() if (@_ == 1);
270             $input_buffer{'TA_CLASS'} = [ 'T_SVCGRP' ];
271             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
272             croak($self->status() . "\n") if ($error < 0);
273              
274             $count = $output_buffer{'TA_OCCURS'}[0];
275              
276             delete $output_buffer{'TA_OCCURS'};
277             delete $output_buffer{'TA_ERROR'};
278             delete $output_buffer{'TA_MORE'};
279             delete $output_buffer{'TA_CLASS'};
280             delete $output_buffer{'TA_STATUS'};
281              
282             for ($i=0;$i<$count;$i++)
283             {
284             $service = new Tuxedo::Admin::Service(
285             $self,
286             $output_buffer{TA_SERVICENAME}[$i],
287             $output_buffer{TA_SRVGRP}[$i]
288             );
289             $services[$i] = $service;
290             }
291             return @services;
292             }
293              
294             sub local_access_point
295             {
296             croak "Invalid parameters" unless (@_ == 2);
297             my ($self, $access_point) = @_;
298             return new Tuxedo::Admin::LocalAccessPoint($self, $access_point);
299             }
300              
301             sub local_access_point_list
302             {
303             my $self = shift;
304             my (%input_buffer, $error, %output_buffer);
305             my ($local_access_point, $methodname, %info, @local_access_points);
306             my ($i, $count, $field);
307              
308             # Add filter fields
309             if (@_ != 0)
310             {
311             my $filter = shift;
312             croak "Filter must be a _reference_ to a hash" unless ref $filter;
313             foreach $methodname (keys %{ $filter })
314             {
315             $field = "ta_$methodname";
316             $field =~ tr/a-z/A-Z/;
317             $input_buffer{$field} = [ $filter->{$methodname} ];
318             }
319             }
320              
321             $input_buffer{'TA_CLASS'} = [ 'T_DM_LOCAL' ];
322             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
323             croak($self->status() . "\n") if ($error < 0);
324              
325             $count = $output_buffer{'TA_OCCURS'}[0];
326              
327             delete $output_buffer{'TA_OCCURS'};
328             delete $output_buffer{'TA_ERROR'};
329             delete $output_buffer{'TA_MORE'};
330             delete $output_buffer{'TA_CLASS'};
331             delete $output_buffer{'TA_STATUS'};
332              
333             for ($i=0;$i<$count;$i++)
334             {
335             $local_access_point = new Tuxedo::Admin::LocalAccessPoint(
336             $self,
337             $output_buffer{TA_DMACCESSPOINT}[$i]
338             );
339             $local_access_points[$i] = $local_access_point;
340             }
341             return @local_access_points;
342             }
343              
344             sub remote_access_point
345             {
346             croak "Invalid parameters" unless (@_ == 2);
347             my ($self, $access_point_name) = @_;
348             return new Tuxedo::Admin::RemoteAccessPoint($self, $access_point_name);
349             }
350              
351             sub remote_access_point_list
352             {
353             my $self = shift;
354             my (%input_buffer, $error, %output_buffer);
355             my ($remote_access_point, $methodname, %info, @remote_access_points);
356             my ($i, $count, $field);
357              
358             # Add filter fields
359             if (@_ != 0)
360             {
361             my $filter = shift;
362             croak "Filter must be a _reference_ to a hash" unless ref $filter;
363             foreach $methodname (keys %{ $filter })
364             {
365             $field = "ta_$methodname";
366             $field =~ tr/a-z/A-Z/;
367             $input_buffer{$field} = [ $filter->{$methodname} ];
368             }
369             }
370              
371             $input_buffer{'TA_CLASS'} = [ 'T_DM_REMOTE' ];
372             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
373             croak($self->status() . "\n") if ($error < 0);
374              
375             $count = $output_buffer{'TA_OCCURS'}[0];
376              
377             delete $output_buffer{'TA_OCCURS'};
378             delete $output_buffer{'TA_ERROR'};
379             delete $output_buffer{'TA_MORE'};
380             delete $output_buffer{'TA_CLASS'};
381             delete $output_buffer{'TA_STATUS'};
382              
383             for ($i=0;$i<$count;$i++)
384             {
385             $remote_access_point = new Tuxedo::Admin::RemoteAccessPoint(
386             $self,
387             $output_buffer{TA_DMACCESSPOINT}[$i]
388             );
389             $remote_access_points[$i] = $remote_access_point;
390             }
391             return @remote_access_points;
392             }
393              
394             sub tdomain
395             {
396             croak "Invalid parameters" unless (@_ == 3);
397             my ($self, $dmaccesspoint, $dmnwaddr) = @_;
398             return new Tuxedo::Admin::TDomain($self, $dmaccesspoint, $dmnwaddr);
399             }
400              
401             sub tdomain_list
402             {
403             my $self = shift;
404             my (%input_buffer, $error, %output_buffer);
405             my ($tdomain, $methodname, %info, @tdomains);
406             my ($i, $count, $field);
407              
408             # Add filter fields
409             if (@_ != 0)
410             {
411             my $filter = shift;
412             croak "Filter must be a _reference_ to a hash" unless ref $filter;
413             foreach $methodname (keys %{ $filter })
414             {
415             $field = "ta_$methodname";
416             $field =~ tr/a-z/A-Z/;
417             $input_buffer{$field} = [ $filter->{$methodname} ];
418             }
419             }
420              
421             $input_buffer{'TA_CLASS'} = [ 'T_DM_TDOMAIN' ];
422             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
423             croak($self->status() . "\n") if ($error < 0);
424              
425             $count = $output_buffer{'TA_OCCURS'}[0];
426              
427             delete $output_buffer{'TA_OCCURS'};
428             delete $output_buffer{'TA_ERROR'};
429             delete $output_buffer{'TA_MORE'};
430             delete $output_buffer{'TA_CLASS'};
431             delete $output_buffer{'TA_STATUS'};
432              
433             for ($i=0;$i<$count;$i++)
434             {
435             $tdomain = new Tuxedo::Admin::TDomain(
436             $self,
437             $output_buffer{TA_DMACCESSPOINT}[$i],
438             $output_buffer{TA_DMNWADDR}[$i]
439             );
440             $tdomains[$i] = $tdomain;
441             }
442             return @tdomains;
443             }
444              
445             sub exported_resource
446             {
447             croak "Invalid parameters" unless (@_ == 2);
448             my ($self, $dmresourcename) = @_;
449             return new Tuxedo::Admin::ExportedResource($self, $dmresourcename);
450             }
451              
452             sub exported_resource_list
453             {
454             my $self = shift;
455             my (%input_buffer, $error, %output_buffer);
456             my ($exported_resource, $methodname, %info, @exported_resources);
457             my ($i, $count, $field);
458              
459             # Add filter fields
460             if (@_ != 0)
461             {
462             my $filter = shift;
463             croak "Filter must be a _reference_ to a hash" unless ref $filter;
464             foreach $methodname (keys %{ $filter })
465             {
466             $field = "ta_$methodname";
467             $field =~ tr/a-z/A-Z/;
468             $input_buffer{$field} = [ $filter->{$methodname} ];
469             }
470             }
471              
472             $input_buffer{'TA_CLASS'} = [ 'T_DM_EXPORT' ];
473             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
474             croak($self->status() . "\n") if ($error < 0);
475              
476             $count = $output_buffer{'TA_OCCURS'}[0];
477              
478             delete $output_buffer{'TA_OCCURS'};
479             delete $output_buffer{'TA_ERROR'};
480             delete $output_buffer{'TA_MORE'};
481             delete $output_buffer{'TA_CLASS'};
482             delete $output_buffer{'TA_STATUS'};
483              
484             for ($i=0;$i<$count;$i++)
485             {
486             $exported_resource = new Tuxedo::Admin::ExportedResource(
487             $self,
488             $output_buffer{TA_DMRESOURCENAME}[$i]
489             );
490             $exported_resources[$i] = $exported_resource;
491             }
492             return @exported_resources;
493             }
494              
495             sub imported_resource
496             {
497             croak "Invalid parameters" unless (@_ == 2);
498             my ($self, $dmresourcename) = @_;
499             return new Tuxedo::Admin::ImportedResource($self, $dmresourcename);
500             }
501              
502             sub imported_resource_list
503             {
504             my $self = shift;
505             my (%input_buffer, $error, %output_buffer);
506             my ($imported_resource, $methodname, %info, @imported_resources);
507             my ($i, $count, $field);
508              
509             # Add filter fields
510             if (@_ != 0)
511             {
512             my $filter = shift;
513             croak "Filter must be a _reference_ to a hash" unless ref $filter;
514             foreach $methodname (keys %{ $filter })
515             {
516             $field = "ta_$methodname";
517             $field =~ tr/a-z/A-Z/;
518             $input_buffer{$field} = [ $filter->{$methodname} ];
519             }
520             }
521              
522             $input_buffer{'TA_CLASS'} = [ 'T_DM_IMPORT' ];
523             ($error, %output_buffer) = $self->_tmib_get(\%input_buffer);
524             croak($self->status() . "\n") if ($error < 0);
525              
526             $count = $output_buffer{'TA_OCCURS'}[0];
527              
528             delete $output_buffer{'TA_OCCURS'};
529             delete $output_buffer{'TA_ERROR'};
530             delete $output_buffer{'TA_MORE'};
531             delete $output_buffer{'TA_CLASS'};
532             delete $output_buffer{'TA_STATUS'};
533              
534             for ($i=0;$i<$count;$i++)
535             {
536             $imported_resource = new Tuxedo::Admin::ImportedResource(
537             $self,
538             $output_buffer{TA_DMRESOURCENAME}[$i]
539             );
540             $imported_resources[$i] = $imported_resource;
541             }
542             return @imported_resources;
543             }
544              
545             sub debug
546             {
547             my $self = shift;
548             $self->{client}->debug($_[0]) if (@_ == 1);
549             return $self->{client}->debug();
550             }
551              
552             =pod
553              
554             Tuxedo::Admin - Runtime Tuxedo administration
555              
556             =head1 SYNOPSIS
557              
558             use Tuxedo::Admin;
559              
560             $admin = new Tuxedo::Admin(
561             'TUXDIR' => '/opt/bea/tuxedo8.1',
562             'TUXCONFIG' => '/home/keith/runtime/TUXCONFIG',
563             'BDMCONFIG' => '/home/keith/runtime/BDMCONFIG'
564             );
565              
566             foreach $server ($admin->server_list())
567             {
568             print server->servername(), "\n";
569             }
570              
571             =head1 DESCRIPTION
572              
573             This module aims to make runtime administration of a Tuxedo environment
574             simpler and less error-prone than the usual method of navigating the tmadmin,
575             dmadmin and qmadmin menus or writing multiple adhoc ud32 scripts to make TMIB
576             calls.
577              
578             It provides a simple object-oriented Perl interface to the Tuxedo MIBs
579             allowing the caller to query, add or update the various components of the
580             Tuxedo environment, such as servers, groups, access points etc.
581              
582             =head2 INITIALISATION
583              
584             Certain environment variables need to be set in order to access a Tuxedo
585             environment. These are:
586              
587             TUXDIR
588             TUXCONFIG
589             BDMCONFIG
590             APP_PW
591              
592             These can either be set in the environment itself or they can be passed as
593             parameters to the Tuxedo::Admin constructor. (Note that APP_PW need only be
594             set if application passwords are being used.)
595              
596             $admin = new Tuxedo::Admin(
597             'TUXDIR' => '/opt/bea/tuxedo8.1',
598             'TUXCONFIG' => '/home/keith/runtime/TUXCONFIG',
599             'BDMCONFIG' => '/home/keith/runtime/BDMCONFIG'
600             );
601              
602             or just:
603              
604             $admin = new Tuxedo::Admin;
605              
606             if the required variables are set in the environment.
607              
608             =head1 METHODS
609              
610             =head2 resources
611              
612             Retrieves the resource settings for the current Tuxedo application.
613              
614             $resources = $admin->resources();
615              
616             where $resources is a reference to a Tuxedo::Admin::Resources object.
617              
618             =head2 server
619              
620             Retrieves information about a specific server instance.
621              
622             $server = $admin->server($group_name, $server_id);
623              
624             where $group_name is the name of the group the server is in and $server_id is
625             the server's identifier in this server group. Together these parameters
626             uniquely identify a server. $server is a reference to a Tuxedo::Admin::Server
627             object.
628              
629             =head2 server_list
630              
631             Retrieves a list of server instances.
632              
633             @servers = $admin->server_list(\%filter)
634              
635             where %filter is an optional reference to a hash that specifies attributes
636             that each server instance in the returned list must have and @servers is a
637             list of references to Tuxedo::Admin::Server objects that match the filter.
638              
639             For example:
640              
641             @servers = $admin->server_list( { 'servername' => 'GWTDOMAIN',
642             'restart' => 'Y' } );
643              
644             =head2 group
645              
646             Retrieves information about a specific group.
647              
648             $group = $admin->group($group_name);
649              
650             where $group_name is the name of the group and $group is a reference to a
651             Tuxedo::Admin::Group object.
652              
653             =head2 group_list
654              
655             Retrieves a list of groups.
656              
657             @groups = $admin->group_list(\%filter);
658              
659             where %filter is an optional reference to a hash that specifies attributes
660             that each group in the returned list must have and @groups is a list of
661             references to Tuxedo::Admin::Group objects that match the filter.
662              
663             =head2 service
664              
665             Retrieves information about a specific service.
666              
667             $service = $admin->service($service_name, $group_name);
668              
669             where $service_name is the name of the service and $group_name is the name of
670             the group that the server that advertised this service is in. $service is a
671             reference to a Tuxedo::Admin::Service object.
672              
673             =head2 service_list
674              
675             Retrieves a list of services.
676              
677             @services = $admin->service_list(\%filter);
678              
679             where %filter is an optional reference to a hash that specifies attributes
680             that each service in the returned list must have and @services is a list of
681             references to Tuxedo::Admin::Service objects that match the filter.
682              
683             =head2 local_access_point
684              
685             Retrieves information about a specific local access point.
686              
687             $local_access_point =
688             $admin->local_access_point($access_point_name,
689             $access_point_id,
690             $group_name);
691              
692             where $access_point_name is the local name of the access point,
693             $access_point_id is the external identifier for the access point and
694             $group_name is the name of the server group to which the local access point
695             server instances belong. These parameters uniquely identify a local access
696             point. $local_access_point is a reference to a
697             Tuxedo::Admin::LocalAccessPoint object.
698              
699             =head2 local_access_point_list
700              
701             Retrieves a list of local access points.
702              
703             @local_access_points = $admin->local_access_point_list(\%filter);
704              
705             where %filter is an optional reference to a hash that specifies attributes
706             that each local access point in the returned list must have and
707             @local_access_points is a list of references to
708             Tuxedo::Admin::LocalAccessPoint objects that match the filter.
709              
710             =head2 remote_access_point
711              
712             Retrieves information about a specific remote access point.
713              
714             $remote_access_point =
715             $admin->remote_access_point($access_point_name, $access_point_id);
716              
717             where $access_point_name is the local name for the remote access point and
718             $access_point_id is the external identifier for the remote access point.
719             These parameters uniquely identify a remote access point.
720             $remote_access_point is a reference to a Tuxedo::Admin::RemoteAccessPoint
721             object.
722              
723             =head2 remote_access_point_list
724              
725             Retrieves a list of remote access points.
726              
727             @remote_access_points = $admin->remote_access_point_list(\%filter);
728              
729             where %filter is an optional reference to a hash that specifies attributes
730             that each remote access point in the returned list must have and
731             @remote_access_points is a list of references to
732             Tuxedo::Admin::RemoteAccessPoint objects that match the filter.
733              
734             =head2 tdomain
735              
736             Retrieves the TDomain configuration for a specific access point.
737              
738             $tdomain = $admin->tdomain($access_point_name, $network_address);
739              
740             where $access_point_name is the local name for the access point that this
741             TDomain configuration is for and $network_address is the network address (host
742             and port) for this access point. $tdomain is a reference to a
743             Tuxedo::Admin::TDomain object.
744              
745             =head2 tdomain_list
746              
747             Retrieves a list of TDomain configurations.
748              
749             @tdomains = $admin->tdomain_list(\%filter);
750              
751             where %filter is an optional reference to a hash that specifies attributes
752             that each TDomain configuration in the returned list must have and @tdomains
753             is a list of references to Tuxedo::Admin::TDomain objects that match the
754             filter.
755              
756             =head2 imported_resource
757              
758             Retrieves information about a specific imported resource.
759              
760             $imported_resource =
761             $admin->imported_resource($resource_name);
762              
763             where $resource_name is the name of the imported resource. $imported_resource
764             is a reference to a Tuxedo::Admin::ImportedResource object.
765              
766             =head2 imported_resource_list
767              
768             Retrieves a list of imported resources.
769              
770             @imported_resources = $admin->imported_resource_list(\%filter);
771              
772             where %filter is an optional reference to a hash that specifies attributes
773             that each imported resource in the returned list must have and
774             @imported_resources is a list of references to Tuxedo::Admin::ImportedResource
775             objects that match the filter.
776              
777             =head2 exported_resource
778              
779             Retrieves information about a specific exported resource.
780              
781             $exported_resource = $admin->exported_resource($resource_name);
782              
783             where $resource_name is the name of the exported resource. $exported_resource
784             is a reference to a Tuxedo::Admin::ExportedResource object.
785              
786             =head2 exported_resource_list
787              
788             Retrieves a list of exported resources.
789              
790             @exported_resources = $admin->exported_resource_list(\%filter);
791              
792             where %filter is an optional reference to a hash that specifies attributes
793             that each exported resource in the returned list must have and
794             @exported_resources is a list of references to Tuxedo::Admin::ExportedResource
795             objects that match the filter.
796              
797             =head2 status
798              
799             Returns a description of the status of the last call that changed the current
800             Tuxedo application.
801              
802             $status = $admin->status();
803              
804             =head2 print_status
805              
806             Prints a description of the status of the last call that changed the current
807             Tuxedo application to the given file handle, or to STDOUT if no file handle is
808             given.
809              
810             $admin->print_status(*STDERR);
811              
812             $admin->print_status();
813              
814             =cut
815              
816             1;
817