Fix RT#84787
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Upgrading.pod
CommitLineData
8c57b129 1=head1 NAME
2
3Catalyst::Upgrading - Instructions for upgrading to the latest Catalyst
4
dacd8b0e 5=head1 Upgrading to Catalyst 5.9
5d5f4a73 6
e6006848 7The major change is that L<Plack>, a toolkit for using the L<PSGI>
862a7989 8specification, now replaces most of the subclasses of L<Catalyst::Engine>. If
e6006848 9you are using one of the standard subclasses of L<Catalyst::Engine> this
10should be a straightforward upgrade for you. It was a design goal for
11this release to preserve as much backwards compatibility as possible.
12However, since L<Plack> is different from L<Catalyst::Engine>, it is
13possible that differences exist for edge cases. Therefore, we recommend
14that care be taken with this upgrade and that testing should be greater
15than would be the case with a minor point update. Please inform the
16Catalyst developers of any problems so that we can fix them and
17incorporate tests.
5d5f4a73 18
773b3b08 19It is highly recommended that you become familiar with the L<Plack> ecosystem
ae908e7e 20and documentation. Being able to take advantage of L<Plack> development and
21middleware is a major bonus to this upgrade. Documentation about how to
22take advantage of L<Plack::Middleware> by writing your own C<< .psgi >> file
23is contained in L<Catalyst::PSGI>.
5d5f4a73 24
e6006848 25If you have created a custom subclass of L<Catalyst:Engine>, you will
26need to convert it to be a subclass of L<Plack::Handler>.
5d5f4a73 27
28If you are using the L<Plack> engine, L<Catalyst::Engine::PSGI>, this new
773b3b08 29release supersedes that code.
5d5f4a73 30
e6006848 31If you are using a subclass of L<Catalyst::Engine> that is aimed at
32nonstandard or internal/testing uses, such as
33L<Catalyst::Engine::Embeddable>, you should still be able to continue
34using that engine.
5d5f4a73 35
36Advice for specific subclasses of L<Catalyst::Engine> follows:
37
93d60cae 38=head2 Upgrading the FastCGI Engine
5d5f4a73 39
e6006848 40No upgrade is needed if your myapp_fastcgi.pl script is already upgraded
41to use L<Catalyst::Script::FastCGI>.
5d5f4a73 42
93d60cae 43=head2 Upgrading the mod_perl / Apache Engines
5d5f4a73 44
e6006848 45The engines that are built upon the various iterations of mod_perl,
14148e06 46L<Catalyst::Engine::Apache::MP13> (for mod_perl 1, and Apache 1.x) and
862a7989 47L<Catalyst::Engine::Apache2::MP20> (for mod_perl 2, and Apache 2.x),
14148e06 48should be seamless upgrades and will work using using L<Plack::Handler::Apache1>
49or L<Plack::Handler::Apache2> as required.
5d5f4a73 50
e6006848 51L<Catalyst::Engine::Apache2::MP19>, however, is no longer supported, as
862a7989 52Plack does not support mod_perl version 1.99. This is unlikely to be a
53problem for anyone, as 1.99 was a brief beta-test release for mod_perl
542, and all users of mod_perl 1.99 are encouraged to upgrade to a
55supported release of Apache 2 and mod_perl 2.
5d5f4a73 56
93d60cae 57=head2 Upgrading the HTTP Engine
5d5f4a73 58
040835f0 59The default development server that comes with the L<Catalyst> distribution
60should continue to work as expected with no changes as long as your C<myapp_server>
61script is upgraded to use L<Catalyst::Script::HTTP>.
5d5f4a73 62
93d60cae 63=head2 Upgrading the CGI Engine
5d5f4a73 64
697a3e9e 65If you were using L<Catalyst::Engine::CGI> there is no upgrade needed if your
e6006848 66myapp_cgi.pl script is already upgraded to use L<Catalyst::Script::CGI>.
5d5f4a73 67
cf8eab35 68=head2 Upgrading Catalyst::Engine::HTTP::Prefork
5d5f4a73 69
040835f0 70If you were using L<Catalyst::Engine::HTTP::Prefork> then L<Starman>
da9eab5a 71is automatically loaded. You should (at least) change your C<Makefile.PL>
72to depend on Starman.
0ea8962d 73
da9eab5a 74You can regenerate your C<myapp_server.pl> script with C<catalyst.pl>
75and implement a C<MyApp::Script::Server> class that looks like this:
76
77 package MyApp::Script::Server;
78 use Moose;
79 use namespace::autoclean;
80
81 extends 'CatalystX::Script::Server::Starman';
82
83 1;
84
e6006848 85This takes advantage of the new script system, and will add a number of
86options to the standard server script as extra options are added by
87Starman.
da9eab5a 88
89More information about these options can be seen at
90L<CatalystX::Script::Server::Starman/SYNOPSIS>.
91
92An alternate route to implement this functionality is to write a simple .psgi
e6006848 93file for your application, and then use the L<plackup> utility to start the
da9eab5a 94server.
5d5f4a73 95
93d60cae 96=head2 Upgrading the PSGI Engine
5d5f4a73 97
e6006848 98If you were using L<Catalyst::Engine::PSGI>, this new release supersedes
99this engine in supporting L<Plack>. By default the Engine is now always
100L<Plack>. As a result, you can remove the dependency on
101L<Catalyst::Engine::PSGI> in your C<Makefile.PL>.
8f912f0b 102
103Applications that were using L<Catalyst::Engine::PSGI>
104previously should entirely continue to work in this release with no changes.
105
e6006848 106However, if you have an C<app.psgi> script, then you no longer need to
107specify the PSGI engine. Instead, the L<Catalyst> application class now
108has a new method C<psgi_app> which returns a L<PSGI> compatible coderef
109which you can wrap in the middleware of your choice.
8f912f0b 110
111Catalyst will use the .psgi for your application if it is located in the C<home>
e6006848 112directory of the application.
697a3e9e 113
93a57b4b 114For example, if you were using L<Catalyst::Engine::PSGI> in the past, you will
8f912f0b 115have written (or generated) a C<script/myapp.psgi> file similar to this one:
697a3e9e 116
117 use Plack::Builder;
118 use MyCatalytApp;
119
120 MyCatalystApp->setup_engine('PSGI');
121
122 builder {
123 enable ... # enable your desired middleware
124 sub { MyCatalystApp->run(@_) };
125 };
126
8f912f0b 127Instead, you now say:
697a3e9e 128
129 use Plack::Builder;
130 use MyCatalystApp;
131
132 builder {
133 enable ... #enable your desired middleware
75d68821 134 MyCatalystApp->psgi_app;
697a3e9e 135 };
5d5f4a73 136
34effbc7 137In the simplest case:
8f912f0b 138
34effbc7 139 MyCatalystApp->setup_engine('PSGI');
140 my $app = sub { MyCatalystApp->run(@_) }
141
142becomes
143
34effbc7 144 my $app = MyCatalystApp->psgi_app(@_);
145
146B<NOT>:
147
148 my $app = sub { MyCatalystApp->psgi_app(@_) };
149 # If you make ^^ this mistake, your app won't work, and will confuse the hell out of you!
150
e6006848 151You can now move C<< script/myapp.psgi >> to C<< myapp.psgi >>, and the built-in
773b3b08 152Catalyst scripts and your test suite will start using your .psgi file.
ad15c817 153
e6006848 154B<NOTE:> If you rename your .psgi file without these modifications, then
155any tests run via L<Catalyst::Test> will not be compatible with the new
156release, and will result in the development server starting, rather than
157the expected test running.
93a57b4b 158
c47cd2ce 159B<NOTE:> If you are directly accessing C<< $c->req->env >> to get the PSGI
160environment then this accessor is moved to C<< $c->engine->env >>,
161you will need to update your code.
162
e6006848 163=head2 Engines which are known to be broken
93a57b4b 164
e6006848 165The following engines B<DO NOT> work as of Catalyst version 5.9. The
166core team will be happy to work with the developers and/or users of
167these engines to help them port to the new Plack/Engine system, but for
168now, applications which are currently using these engines B<WILL NOT>
169run without modification to the engine code.
93a57b4b 170
171=over
172
173=item Catalyst::Engine::Wx
174
ad15c817 175=item Catalyst::Engine::Zeus
176
177=item Catalyst::Engine::JobQueue::POE
178
179=item Catalyst::Engine::XMPP2
180
181=item Catalyst::Engine::SCGI
182
93a57b4b 183=back
184
5d5f4a73 185=head2 Engines with unknown status
186
e6006848 187The following engines are untested or have unknown compatibility.
188Reports are highly encouraged:
5d5f4a73 189
ad15c817 190=over
191
192=item Catalyst::Engine::Mojo
193
e6006848 194=item Catalyst::Engine::Server (marked as Deprecated)
ad15c817 195
e6006848 196=item Catalyst::Engine::HTTP::POE (marked as Deprecated)
ad15c817 197
198=back
5d5f4a73 199
3f22de0b 200=head2 Plack functionality
040835f0 201
3f22de0b 202See L<Catalyst::PSGI>.
0aafa77a 203
dacd8b0e 204=head2 Tests in 5.9
4db14a9a 205
e6006848 206Tests should generally work the same in Catalyst 5.9, but there are
207some differences.
4db14a9a 208
e6006848 209Previously, if using L<Catalyst::Test> and doing local requests (against
210a local server), if the application threw an exception then this
211exception propagated into the test.
4db14a9a 212
e6006848 213This behavior has been removed, and now a 500 response will be returned
214to the test. This change standardizes behavior, so that local test
215requests behave similarly to remote requests.
4db14a9a 216
180d7416 217=head2 Regex dispatch type is deprecated.
218
219The Regex dispatchtype (L<Catalyst::DispatchType::Regex>) has been deprecated.
220
221You are encouraged to move your application to Chained dispatch (L<Catalyst::DispatchType::Chained>).
222
223If you cannot do so, please add a dependency to Catalyst::DispatchType::Regex to your application's
224Makefile.PL
225
7e2ec16e 226=head1 Upgrading to Catalyst 5.80
227
5687c7f9 228Most applications and plugins should run unaltered on Catalyst 5.80.
7e2ec16e 229
8f61d649 230However, a lot of refactoring work has taken place, and several changes have
1a98f036 231been made which could cause incompatibilities. If your application or plugin
8f61d649 232is using deprecated code, or relying on side effects, then you could have
ba03ccca 233issues upgrading to this release.
5687c7f9 234
cf8eab35 235Most issues found with existing components have been easy to
8f61d649 236solve. This document provides a complete description of behavior changes
237which may cause compatibility issues, and of new Catalyst warnings which
773b3b08 238might be unclear.
7e2ec16e 239
8f61d649 240If you think you have found an upgrade-related issue which is not covered in
241this document, please email the Catalyst list to discuss the problem.
7e2ec16e 242
85f0a66f 243=head1 Moose features
244
8f61d649 245=head2 Application class roles
85f0a66f 246
8f61d649 247You can only apply method modifiers after the application's C<< ->setup >>
85f0a66f 248method has been called. This means that modifiers will not work with methods
773b3b08 249run during the call to C<< ->setup >>.
85f0a66f 250
a6eb852a 251See L<Catalyst::Manual::ExtendingCatalyst> for more information about using
252L<Moose> in your applications.
253
85f0a66f 254=head2 Controller actions in Moose roles
255
d76c88f3 256You can use L<MooseX::MethodAttributes::Role> if you want to declare actions
257inside Moose roles.
85f0a66f 258
d935773d 259=head2 Using Moose in Components
260
261The correct way to use Moose in a component in a both forward and backwards
262compatible way is:
263
264 package TestApp::Controller::Root;
265 use Moose;
266 BEGIN { extends 'Catalyst::Component' }; # Or ::Controller, or whatever
267
268See L<Components which inherit from Moose::Object before Catalyst::Component>.
269
8f61d649 270=head1 Known backwards compatibility breakages
7e2ec16e 271
8f61d649 272=head2 Applications in a single file
85f0a66f 273
274Applications must be in their own file, and loaded at compile time. This
8f61d649 275issue generally only affects the tests of CPAN distributions. Your
276application will fail if you try to define an application inline in a
277block, and use plugins which supply a C< new > method, then use that
278application latter in tests within the same file.
85f0a66f 279
280This is due to the fact that Catalyst is inlining a new method on your
8f61d649 281application class allowing it to be compatible with Moose. The method
282used to do this changed in 5.80004 to avoid the possibility of reporting
283an 'Unknown Error' if your application failed to compile.
85f0a66f 284
38f90e49 285=head2 Issues with Class::C3
286
8f61d649 287Catalyst 5.80 uses the L<Algorithm::C3> method dispatch order. This is
288built into Perl 5.10, and comes via L<Class::C3> for Perl 5.8. This
289replaces L<NEXT> with L<Class::C3::Adopt::NEXT>, forcing all components
290to resolve methods using C3, rather than the unpredictable dispatch
291order of L<NEXT>.
38f90e49 292
cf8eab35 293This issue manifests itself by your application failing to start due to an
5d06547d 294error message about having a non-linear @ISA.
295
8f61d649 296The Catalyst plugin most often causing this is
297L<Catalyst::Plugin::Session::Store::FastMmap> - if you are using this
298plugin and see issues, then please upgrade your plugins, as it has been
299fixed. Note that Makefile.PL in the distribution will warn about known
300incompatible components.
5d06547d 301
302This issue can, however, be found in your own application - the only solution is
303to go through each base class of the class the error was reported against, until
304you identify the ones in conflict, and resolve them.
305
306To be able to generate a linear @ISA, the list of superclasses for each
307class must be resolvable using the C3 algorithm. Unfortunately, when
308superclasses are being used as mixins (to add functionality used in your class),
ae7da8f5 309and with multiple inheritance, it is easy to get this wrong.
38f90e49 310
311Most common is the case of:
312
313 package Component1; # Note, this is the common case
314 use base qw/Class::Accessor::Fast Class::Data::Inheritable/;
315
8f61d649 316 package Component2; # Accidentally saying it this way causes a failure
38f90e49 317 use base qw/Class::Data::Inheritable Class::Accessor::Fast/;
318
319 package GoesBang;
320 use base qw/Component1 Component2/;
321
5d06547d 322Any situation like this will cause your application to fail to start.
38f90e49 323
8f61d649 324For additional documentation about this issue, and how to resolve it, see
5d06547d 325L<Class::C3::Adopt::NEXT>.
38f90e49 326
6f04e56a 327=head2 Components which inherit from Moose::Object before Catalyst::Component
7e2ec16e 328
6f04e56a 329Moose components which say:
7e2ec16e 330
6f04e56a 331 package TestApp::Controller::Example;
332 use Moose;
845bfcd2 333 extends qw/Moose::Object Catalyst::Component/;
7e2ec16e 334
8f61d649 335to use the constructor provided by Moose, while working (if you do some hacks
1a98f036 336with the C< BUILDARGS > method), will not work with Catalyst 5.80 as
6f04e56a 337C<Catalyst::Component> inherits from C<Moose::Object>, and so C< @ISA > fails
25f61108 338to linearize.
6f04e56a 339
6f04e56a 340The correct way to use Moose in a component in a both forward and backwards
341compatible way is:
342
343 package TestApp::Controller::Root;
344 use Moose;
345 BEGIN { extends 'Catalyst::Component' }; # Or ::Controller, or whatever
346
ba03ccca 347Note that the C< extends > declaration needs to occur in a begin block for
3df46b1b 348L<attributes> to operate correctly.
349
d935773d 350This way you do not inherit directly from C<Moose::Object>
351yourself. Having components which do not inherit their constructor from
352C<Catalyst::Component> is B<unsupported>, and has never been recommended,
353therefore you're on your own if you're using this technique. You'll need
354to detect the version of Catalyst your application is running, and deal
355with it appropriately.
356
eaae9a92 357You also don't get the L<Moose::Object> constructor, and therefore attribute
358initialization will not work as normally expected. If you want to use Moose
3df46b1b 359attributes, then they need to be made lazy to correctly initialize.
360
361Note that this only applies if your component needs to maintain component
362backwards compatibility for Catalyst versions before 5.71001 - in 5.71001
363attributes work as expected, and the BUILD method is called normally
eaae9a92 364(although BUILDARGS is not).
3df46b1b 365
366If you depend on Catalyst 5.8, then B<all> Moose features work as expected.
8566c0de 367
d935773d 368You will also see this issue if you do the following:
369
370 package TestApp::Controller::Example;
371 use Moose;
372 use base 'Catalyst::Controller';
373
374as C< use base > appends to @ISA.
375
e11cac87 376=head3 use Moose in MyApp
377
378Similar to the above, this will also fail:
379
380 package MyApp;
381 use Moose;
382 use Catalyst qw/
383 ConfigLoader
384 /;
385 __PACKAGE__->setup;
386
387If you need to use Moose in your application class (e.g. for method modifiers
8f61d649 388etc.) then the correct technique is:
e11cac87 389
390 package MyApp;
391 use Moose;
5b6f82d2 392 use Catalyst;
393
e11cac87 394 extends 'Catalyst';
5b6f82d2 395
396 __PACKAGE__->config( name => 'MyApp' );
e11cac87 397 __PACKAGE__->setup(qw/
398 ConfigLoader
399 /);
400
04a48104 401=head2 Anonymous closures installed directly into the symbol table
402
403If you have any code which installs anonymous subroutine references directly
404into the symbol table, you may encounter breakages. The simplest solution is
405to use L<Sub::Name> to name the subroutine. Example:
406
e11cac87 407 # Original code, likely to break:
1a98f036 408 my $full_method_name = join('::', $package_name, $method_name);
04a48104 409 *$full_method_name = sub { ... };
410
e11cac87 411 # Fixed Code
04a48104 412 use Sub::Name 'subname';
413 my $full_method_name = join('::',$package_name, $method_name);
414 *$full_method_name = subname $full_method_name, sub { ... };
415
8f61d649 416Additionally, you can take advantage of Catalyst's use of L<Class::MOP> and
417install the closure using the appropriate metaclass. Example:
04a48104 418
419 use Class::MOP;
420 my $metaclass = Moose::Meta::Class->initialize($package_name);
421 $metaclass->add_method($method_name => sub { ... });
422
780654ad 423=head2 Hooking into application setup
424
8f61d649 425To execute code during application start-up, the following snippet in MyApp.pm
780654ad 426used to work:
427
428 sub setup {
429 my ($class, @args) = @_;
430 $class->NEXT::setup(@args);
431 ... # things to do after the actual setup
432 }
433
8f61d649 434With Catalyst 5.80 this won't work anymore, because Catalyst no longer
435uses NEXT.pm for method resolution. The functionality was only ever
436originally operational as L<NEXT> remembers what methods have already
437been called, and will not call them again.
780654ad 438
1a98f036 439Using this now causes infinite recursion between MyApp::setup and
440Catalyst::setup, due to other backwards compatibility issues related to how
e6c5b548 441plugin setup works. Moose method modifiers like C<< before|after|around setup
1a98f036 442=> sub { ... }; >> also will not operate correctly on the setup method.
780654ad 443
444The right way to do it is this:
445
446 after setup_finalize => sub {
447 ... # things to do after the actual setup
448 };
449
ade00972 450The setup_finalize hook was introduced as a way to avoid this issue.
1a98f036 451
e11cac87 452=head2 Components with a new method which returns false
7e2ec16e 453
8dd2f514 454Previously, if you had a component which inherited from Catalyst::COMPONENT,
8f61d649 455but overrode the new method to return false, then your class's configuration
8dd2f514 456would be blessed into a hash on your behalf, and this would be returned from
a87f5aa5 457the COMPONENT method.
7e2ec16e 458
8f61d649 459This behavior makes no sense, and so has been removed. Implementing your own
460C< new > method in components is B<highly> discouraged. Instead, you should
461inherit the new method from Catalyst::Component, and use Moose's BUILD
1a98f036 462functionality and/or Moose attributes to perform any construction work
463necessary for your class.
7e2ec16e 464
465=head2 __PACKAGE__->mk_accessor('meta');
466
e11cac87 467Won't work due to a limitation of L<Moose>. This is currently being fixed
468inside Moose.
7e2ec16e 469
470=head2 Class::Data::Inheritable side effects
471
8dd2f514 472Previously, writing to a class data accessor would copy the accessor method
473down into your package.
474
8f61d649 475This behavior has been removed. While the class data is still stored
8dd2f514 476per-class, it is stored on the metaclass of the class defining the accessor.
7e2ec16e 477
8f61d649 478Therefore anything relying on the side effect of the accessor being copied down
8dd2f514 479will be broken.
7e2ec16e 480
1a98f036 481The following test demonstrates the problem:
8dd2f514 482
483 {
484 package BaseClass;
485 use base qw/Class::Data::Inheritable/;
486 __PACKAGE__->mk_classdata('foo');
487 }
488
489 {
490 package Child;
491 use base qw/BaseClass/;
492 }
493
494 BaseClass->foo('base class');
495 Child->foo('sub class');
eaae9a92 496
e11cac87 497 use Test::More;
8dd2f514 498 isnt(BaseClass->can('foo'), Child->can('foo'));
7e2ec16e 499
f4dda4a8 500=head2 Extending Catalyst::Request or other classes in an ad hoc manner using mk_accessors
7e2ec16e 501
8dd2f514 502Previously, it was possible to add additional accessors to Catalyst::Request
503(or other classes) by calling the mk_accessors class method.
7e2ec16e 504
8f61d649 505This is no longer supported - users should make a subclass of the class whose
506behavior they would like to change, rather than globally polluting the
e11cac87 507Catalyst objects.
8be895a7 508
10011c19 509=head2 Confused multiple inheritance with Catalyst::Component::COMPONENT
8be895a7 510
8f61d649 511Previously, Catalyst's COMPONENT method would delegate to the method on
512the right hand side, which could then delegate back again with
513NEXT. This is poor practice, and in addition, makes no sense with C3
514method dispatch order, and is therefore no longer supported.
bcc773b9 515
ba03ccca 516If a COMPONENT method is detected in the inheritance hierarchy to the right
bcc773b9 517hand side of Catalyst::Component::COMPONENT, then the following warning
518message will be emitted:
7e2ec16e 519
8dd2f514 520 There is a COMPONENT method resolving after Catalyst::Component
5687c7f9 521 in ${next_package}.
8dd2f514 522
8f61d649 523The correct fix is to re-arrange your class's inheritance hierarchy so that the
bcc773b9 524COMPONENT method you would like to inherit is the first (left-hand most)
525COMPONENT method in your @ISA.
7e2ec16e 526
7e9340de 527=head2 Development server relying on environment variables
528
529Previously, the development server would allow propagation of system
530environment variables into the request environment, this has changed with the
531adoption of Plack. You can use L<Plack::Middleware::ForceEnv> to achieve the
532same effect.
533
c571d2c8 534=head1 WARNINGS
535
63b546b1 536=head2 Actions in your application class
537
538Having actions in your application class will now emit a warning at application
e256d0e1 539startup as this is deprecated. It is highly recommended that these actions are moved
63b546b1 540into a MyApp::Controller::Root (as demonstrated by the scaffold application
55dd186c 541generated by catalyst.pl).
da73c6af 542
e256d0e1 543This warning, also affects tests. You should move actions in your test,
544creating a myTest::Controller::Root, like the following example:
da73c6af 545
546 package MyTest::Controller::Root;
95a52a01 547
da73c6af 548 use strict;
549 use warnings;
95a52a01 550
da73c6af 551 use parent 'Catalyst::Controller';
95a52a01 552
da73c6af 553 __PACKAGE__->config(namespace => '');
95a52a01 554
da73c6af 555 sub action : Local {
556 my ( $self, $c ) = @_;
557 $c->do_something;
558 }
95a52a01 559
da73c6af 560 1;
63b546b1 561
ac9279b0 562=head2 ::[MVC]:: naming scheme
563
564Having packages called MyApp::[MVC]::XX is deprecated and can no longer be generated
565by catalyst.pl
566
567This is still supported, but it is recommended that you rename your application
568components to Model/View/Controller.
569
570A warning will be issued at application startup if the ::[MVC]:: naming scheme is
571in use.
572
ade00972 573=head2 Catalyst::Base
574
8f61d649 575Any code using L<Catalyst::Base> will now emit a warning; this
576module will be removed in a future release.
ade00972 577
c571d2c8 578=head2 Methods in Catalyst::Dispatcher
579
8f61d649 580The following methods in Catalyst::Dispatcher are implementation
581details, which may change in the 5.8X release series, and therefore their use
bcc773b9 582is highly deprecated.
c571d2c8 583
584=over
585
8dd2f514 586=item tree
c571d2c8 587
8dd2f514 588=item dispatch_types
c571d2c8 589
8dd2f514 590=item registered_dispatch_types
c571d2c8 591
8dd2f514 592=item method_action_class
c571d2c8 593
8dd2f514 594=item action_hash
c571d2c8 595
596=item container_hash
597
598=back
599
600The first time one of these methods is called, a warning will be emitted:
7e2ec16e 601
bcc773b9 602 Class $class is calling the deprecated method Catalyst::Dispatcher::$public_method_name,
dacd8b0e 603 this will be removed in Catalyst 5.9
7e2ec16e 604
c571d2c8 605You should B<NEVER> be calling any of these methods from application code.
606
8f61d649 607Plugin authors and maintainers whose plugins currently call these methods
8f5a2bd9 608should change to using the public API, or, if you do not feel the public API
8f61d649 609adequately supports your use case, please email the development list to
8f5a2bd9 610discuss what API features you need so that you can be appropriately supported.
7e2ec16e 611
95b20422 612=head2 Class files with names that don't correspond to the packages they define
7e2ec16e 613
e11cac87 614In this version of Catalyst, if a component is loaded from disk, but no
ba03ccca 615symbols are defined in that component's name space after it is loaded, this
bcc773b9 616warning will be issued:
7e2ec16e 617
bcc773b9 618 require $class was successful but the package is not defined.
7e2ec16e 619
8f61d649 620This is to protect against confusing bugs caused by mistyping package names,
bcc773b9 621and will become a fatal error in a future version.
622
623Please note that 'inner packages' (via L<Devel::InnerPackage>) are still fully
8f61d649 624supported; this warning is only issued when component file naming does not map
bcc773b9 625to B<any> of the packages defined within that component.
7e2ec16e 626
5687c7f9 627=head2 $c->plugin method
628
25f61108 629Calling the plugin method is deprecated, and calling it at run time is B<highly
8dd2f514 630deprecated>.
7e2ec16e 631
95a52a01 632Instead you are recommended to use L<Catalyst::Model::Adaptor> or similar to
ba03ccca 633compose the functionality you need outside of the main application name space.
7e2ec16e 634
4e68badc 635Calling the plugin method will not be supported past Catalyst 5.81.
bcc773b9 636
7e2ec16e 637=cut
4e68badc 638