Jason Spisak wrote:
You might remember me, I've been a big Zope fan since ZTables, and have recently been asked "Why Zope?". The project is commited to PostgreSQL and leaning toward PHP. Here's the project requirements for a softwre company:
Hardware Compatability List Software Compatability List Store/ECommerce User tracking and services like Pay for downloads Upgrades if they have a serial number paid up Billing/Invoicing for corporate accounts Inventory tracking CRM/Sales functions
They don't see that Zope's built in security machinery would beat something home brewed for what they expect to need it for. Plus the over head of running Zope instances is greater than PHP scripts.
What are the arguments for Zope in this context?
Transaction Safety? When reading your requirements that was the first thing coming into my mind. I don't know how php does this, so I went to google and found http://www.phpbuilder.com/columns/linuxjournal200009.php3 Below is one snippet, notice all the ugly "//check for errors" and "//abort transaction". If someone knows where I misinterpret something or how php solves this, corrections welcome. But wouldn't it be nice if we had an application server which would take care of all this for us? Oh, wait ... ;-) cheers, oliver function cart_new() { //make the database connection handle available global $conn,$customer_id,$feedback; //start a transaction query("BEGIN WORK"); //query postgres for the next value in our sequence $res=query("SELECT nextval('seq_customer_id')"); //check for errors if (!$res || pg_numrows($res)<1) { $feedback .= pg_errormessage($conn); $feedback .= ' Error - Database didn\'t return next value '; query("ROLLBACK"); return false; } else { //set that value in a local var $customer_id=pg_result($res,0,0); //register the id with PHP4 session_register('customer_id'); //insert the new customer row $res=query("INSERT INTO customers (customer_id) VALUES ('$customer_id')"); //check for errors if (!$res || pg_cmdtuples($res)<1) { $feedback .= pg_errormessage($conn); $feedback .= ' Error - couldn\'t insert new customer row '; query("ROLLBACK"); return false; } else { //commit this transaction query("COMMIT"); return true; } } }