Hi all,
I am a new member on this list and after reading the posts from this list in the last few days, I don't even know if this is the apropriate place for asking questions about using mod_perl. If it is not, please tell me if there is another list which could be more useful for a mod_perl beginner.
I want to use the DBI module with mod_perl 2 with Perl 5.8.4, and for the moment... under Windows 2000.
I have tried:
In httpd.conf: PerlRequire [path]/preload.pl
in preload.pl: use Apache::DBI(); use DBI (); DBI->install_driver("mysql"); ###Apache::DBI->connect_on_init("DBI:mysql:database=presa;host=localhost", "ODBC", undef, {PrintError =>1, RaiseError=>0, AutoCommit => 1});
in the GetCategories.pm module: ##use Apache::DBI; use DBI; my $dbh = ...;
I have tried more combinations, but every time I get the following error in the logs:
[Tue Dec 28 21:07:34 2004] [error] DBD::mysql::db prepare failed: handle 2 is owned by thread 265c564 not current thread 14ce78c (handles can't be shared between threads and your driver may need a CLONE method added) at f:/web/presa/modules/GetCategories.pm line 18.\n -----
So I have commented out the following line in preload.pl: ###Apache::DBI->connect_on_init("DBI:mysql:database=presa;host=localhost", "ODBC", undef, {PrintError =>1, RaiseError=>0, AutoCommit => 1});
And in GetCategories.pm I have used only:
use DBI; my $dbh = ...;
Well, in this case the script works, but I don't know if this way of using DBI is the best way.
I'm afraid your script, just appears to be working and if you put it under a stress testing, that will really involve multithreading you will see the same problem. Take a look at:
http://search.cpan.org/~rudy/DBD-mysql-2.9004/lib/DBD/mysql.pm#MULTITHREADING
-----------------------------
The multithreading capabilities of DBD::mysql depend completely on the underlying C libraries: The modules are working with handle data only, no global variables are accessed or (to the best of my knowledge) thread unsafe functions are called. Thus DBD::mysql is believed to be completely thread safe, if the C libraries are thread safe and you don't share handles among threads.
The obvious question is: Are the C libraries thread safe? In the case of MySQL the answer is "mostly" and, in theory, you should be able to get a "yes", if the C library is compiled for being thread safe (By default it isn't.) by passing the option -with-thread-safe-client to configure. See the section on How to make a threadsafe client in the manual.
-----------------------------
-- __________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
-- Report problems: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html List etiquette: http://perl.apache.org/maillist/email-etiquette.html