The best architecture for iSeries development is RPG business logic servers accessed by the client of your choice.
That's it. The gloves are off. It's time to make a stand here. No more beating around the bush or mollycoddling. I've spent enough time pussyfooting around the issue and using mealy-mouthed phrases like "in my opinion" and "for many applications" and "depending on your business goals." After hearing the political doublespeak that passes for debate at the highest level in this country, I suddenly realized that we have been doing the same thing in the iSeries community when we talk about architectures and application design. I reviewed a few conversations in forums and mailing lists, and it was clear that the facts were lost amid a blizzard of pseudo-scientific rhetoric, and this was why we had people--smart, seasoned people who you think would know better--actually wondering whether a Windows server farm might actually be a reasonable replacement for their iSeries.
No more. I'm putting an end to this nonsense here and now. In this article, I'm going to take a specific stand on a topic, and then I'm going to explain why we don't take stands anymore. I'm going to talk about client/server architecture--what it is, what it does, and how it is best implemented on the iSeries. Notice the word "best." There will be no fraternizing with the enemy, no politically correct phraseology. There are such things as right and wrong, and it's time we remembered that. Years ago, entire evenings could be spent arguing the merits of various architectures, and never once did we worry about things like "platform independence" and "open standards." Not that these things are bad in and of themselves, but we managed to get some pretty good code written without them.
So, in this article, I will...
Explain the merits of client/server design
Lay out the best architecture for iSeries business applications
Explain what has happened in our online communities
Message-Based Client/Server Design
The design that is head and shoulders above any other in the world of multi-tiered, multi-language development is the message-based client/server design. The basic architecture is deceptively simple, yet variants exist that can embrace just about any business problem imaginable.
One of the things I love about client/server is that it really is very basic. In its simplest form, a client sends a message to a server and receives a message in return. Almost immediately, you begin to run into issues such as message size and structure. At the highest level, there are two basic designs: fixed-format and delimited. Neither one is necessarily simpler than the other. Electronic data interchange (EDI) messages are essentially very complex fixed-format messages, while comma-delimited files can be very simple. But in general, fixed-format messages require less processing than delimited messages.
Figure 1: This is a simple client/server design. (Click images to enlarge.)
This sort of client/server design shown in Figure 1 is so basic that it can be applied almost anywhere. A call to a Java method is a client/server relationship, as is a call to an RPG program. Anytime you encapsulate a bit of logic in an object that has no knowledge of the caller (except through parameters), you have created a client/server design.
The next variety of client/server involves queues. Queues allow nearly unlimited data to be passed between client and server. The queuing can be unidirectional--pass the request to the server via a parameter and receive the results via data queue--or bidirectional, when the data to the server is of arbitrary size. Queues are also used for stateless servers, an issue I'll address shortly.
Figure 2: In a queued client/server design, messages can be longer and more complex.
Finally, you can create a multiple-layer framework in which one tier invokes a server but tells it to send data to a different tier. Figure 3 shows a modified Model-View-Controller (MVC) design in which servers feed the view. To be more precise, the view would communicate with a model, and the model would read the response queue. But in the interest of simplicity, the illustration is fine.
Figure 3: In the more complex architectures, objects in one tier direct servers to send data to objects in other tiers.
In this last variant, you can see that the application is completely broken up into separate tiers. The server tier is dedicated to business logic and database access. In a perfect world, nothing gets into or out of the database except through those servers. But the world is rarely perfect, and Enterprise Information Management tools may make it necessary to allow less structured access to your database. While I accept the necessity of this sort of access for inquiries, I absolutely forbid update access. People who allow unfettered updates to their databases, even with constraints and triggers in place, are simply asking for trouble.
The controller decides what happens next. Technically, the design is rather complex. While the controller does direct the servers to send their results to the view, the completion status is returned to the controller, which uses that information to determine which panel to display (e.g., which JavaServer Page). This implies that the controller also sends some data directly to the view; namely, the ID of the next page to display. But despite those little issues, Figure 3 is reasonably accurate. The user action (e.g., data entered into fields or the ID of which button was pressed) is indeed sent to the controller, which uses that information to figure out the next step in the process.
Statefulness
Statefulness is an interesting issue. You can write your servers so that they are completely independent of the client and there is no knowledge of previous transactions in any session. These are stateless sessions, and their best claim to fame is that they scale relatively easily, because theoretically you don't care which machine any one transaction runs on, since any machines in a high availability set are supposed to be mirrors of one another.
Stateful sessions, however, have lots of benefits. First, much less data needs to be transmitted each time. Basic information such as user and company can be cached. This is especially helpful in database applications, since you can implement before and after image processing by caching the before image in the server. The beauty of a good design, though, is that it can support either stateful or stateless servers.
Languages
Which language is each bit written in? That depends, and in fact it's not even relevant to the design. A properly designed architecture is language agnostic; language is a business decision based on skill sets and performance. The platform independence folks need to understand that any architecture that is not language agnostic is not platform-independent; things like .NET and J2EE almost immediately lock you into some sort of platform or language decision, and that's just plain wrong.
In Figure 3, the server can be written in Java using JDBC, the controller can be written in PHP, and the client can be a Visual Basic thick client. I wouldn't ever write a system that way, but I could.
So Which Architecture Is the Best?
This last design technique is one that my clients are beginning to use with fantastic success. The controller and the server are both written in RPG, while the view is a simple servlet that converts EBCDIC data to Java objects and then displays a JSP. Servers are stateful, which means that getting the next page of data is as simple as performing a READ on the appropriate file. No constant mucking about with cursors and positioning. With this technique, users are seeing not only sub-second response time, but also response times indistinguishable from those of green-screens. There is very little logic in the view other than the conversion code, and that gets quickly optimized by the Just-In-Time (JIT) compiler of the Java Virtual Machine (JVM), so the overhead typical of Java applications is almost entirely negated.
Let nobody say that I am anti-Java! I love Java, properly used. I just think that RPG is a much better language for encoding the vagaries of business rules. And in fact, another group of folks who push the client/server envelope are indeed trying to develop a purely Java- and JDBC-based client/server environment, only in this case with the ability to plug in iSeries-specific optimizations when appropriate. This is the sort of design that the open standards folks don't get: With a properly designed business object class, you can bury your persistence layer in the implementation of the object and then optimize it as necessary. In any case, I'm looking forward to seeing how that works. I doubt it will be quite as fast as the RPG-dominated design in the previous paragraph, but it should still perform reasonably well.
One last issue before I close, and that's about message formats. I believe that your primary goal should be to have your messages as lean as possible. While XML is a nice tool, it's not the be all and end all of communications. In fact, the way some people use it, it's really not much more than EDI using tags. I shudder when I read about people who have decided it makes sense to store all their data as XML, avoiding relational databases altogether. At the same time, I recognize the fact that XML can be a great inter-platform mediator, so in that perfect world I talk about (but never seem to get to), I would like an XML-based handshake that could then quickly be negotiated to a faster fixed-format messaging system. But I'll talk about that in more detail another day. Today, I want to talk about why we don't dare actually make statements anymore, why common sense has gone out of vogue.
The Rise of Technological Thuggery
This overly litigious Politically Correct society has made us so frightened of getting someone angry that we no longer state facts as facts. Everything we say has to be couched in conditional phrases, lest we offend somebody else's sensibilities (regardless of the fact that they're spewing utter nonsense). This Caspar Milquetoast-esque behavior on the part of smart, well-meaning people has given rise to a new phenomenon, the Technological Thug. This is someone who knows enough buzzwords to drown out common sense in rhetoric and who isn't afraid to figuratively pound the desk in order to shout down any opposing viewpoint. These people absolutely adore certain types of online communities.
Online communities come in a wide variety. You can categorize them in many ways, but one of the easiest is by level of moderation. While the simple breakdown is moderated and unmoderated, it's a little more complex than that. The moderated forums have different levels of moderation, so you really see a spectrum of moderation, from the totally unmoderated to the heavily moderated. And the results are rather interesting.
Totally unmoderated forums such as Usenet tend to develop their own social structure in which no one person can really run amok. With no rules, an unmoderated forum is the Old West of the online world, and the quickest gun wins. Technological Thugs are usually louder than they are smart and tend not to last long in an unmoderated society. Pure volume eventually gets trashed by wit, and it's often not a pretty sight. Troll roadkill: not for the squeamish.
On the other end of the spectrum, you have heavily moderated forums. Heavily moderated communities live and die by the moderator. For example, David Gibbs' communities at www.midrange.com thrive because David brooks no nonsense and metes out his judgments with an even hand. No favoritism and little slack. Technological Thugs typically get shown the door rather quickly. That is not to say that all heavily moderated forums are adverse to Thuggery. In some forums, the moderators clearly play favorites, the rules are arbitrary and stupid, and Thugs are given free rein as long as they agree with the boss. Those forums generally die, and while the death can be slow and painful, heavily moderated Thug's Dens tend to be self-limiting.
Finally, some forums are in the middle, with some moderation but not a lot. Typically, they allow just about anything except for blatant personal attacks and obscene language. Those forums oddly enough are the ones that seem to prompt the most noise, primarily because they become the home of Technological Thugs. These trolls typically pick an untenable position and then shout it at the top of their lungs. They thrive in minimally moderated environments because the moderation usually serves only to discourage good people from taking them to task. As long as they don't post egregious personal attacks, they can generally get away with murder when it comes to obfuscation and technical misinformation.
How Do We Stop This?
Part of this is our own fault, since we as a community no longer seem to be willing to do the basic footwork of comparing different designs and seeing what actually works. Technology is moving so fast that we don't think we can spend the time required to perform feasibility studies and proofs of concept, yet if we don't, we are prey to the Thugs who merrily insist that "Java is faster than RPG" and "SQL performs as well as native I/O." There was a time when such nonsense would be countered with a simple "Prove it!" It seems, though, that we allow anyone to say anything these days, mostly because nobody has done the necessary work to refute even the most outrageous of claims.
However, I've found a simple tool to use against the Thugs: facts. Facts tend to shut up the Thugs quicker than anything. Here's a perfect example: Since I've started the IAAI and published my first native I/O vs. SQL benchmarks, not one person has insisted that SQL is faster than native I/O. Nobody has argued on my Web site, nobody has challenged one of my columns, nobody has accosted me in a mailing list. You see, once you have true facts, the soft answers like "when using set-based processing" or "I/O is primarily wait time" start to fall apart. Facts are great levelers: They play no favorites.
So it's up to us to start doing the kind of things we used to do: testing various techniques and determining the best one. And I am going to start today by going on record with my choice for the best architecture for iSeries business applications.
Conclusions
So what am I saying here? A couple of things. First, I am going on record today as saying that a client/server architecture, using an RPG controller and an RPG server framework, communicating with a simple JSP user interface, is the fastest and best-performing architecture for web-based iSeries applications. I challenge anyone to prove me wrong. Second, we need to stop the Technological Thugs, and the only way to do that is to pound them with facts. Whenever someone says something that just doesn't make sense, call them on it and make them back up their position. And if all else fails, come to the IAAI and help us build our list of benchmarks.
Joe Pluta is the founder and chief architect of Pluta Brothers Design, Inc. He has been working in the field since the late 1970s and has made a career of extending the IBM midrange, starting back in the days of the IBM System/3. Joe has used WebSphere extensively, especially as the base for PSC/400, the only product that can move your legacy systems to the Web using simple green-screen commands. Joe is also the author of E-Deployment: The Fastest Path to the Web, Eclipse: Step by Step, and WDSC: Step by Step. You can reach him at
This e-mail address is being protected from spam bots, you need JavaScript enabled to view it
.
Heya Chris! Thanks for the encouragement. <p>In the e-Deployment book, the controller was always RPG. The UI portion (or "view") was either a browser or a Java thick client, but the rest of the code was in RPG. PSC/400 is the commercial version of e-Deployment and it uses a single servlet to route the requests. <p>The form parms are retrieved and used to update internal "record buffers", which can then be accessed by the original RPG program. In the case of a simple EXFMT, a buffer is sent from the program to the servlet, which converts EBCDIC to Java using the toolbox, and then displays the data via a JSP form. The data is read back in from the form and put back into the EBCDIC buffer, which is sent back to the program. <p>Obviously, it gets a little more complicated for subfiles, and there are also considerations for things like message subfiles and informational data structures. The really powerful thing about this approach is that you can pass hidden fields from the program to the servlet, something which cannot be done with a screen scraper. <p>As to thte technical issues of prgoram communication, I call an RPG program which communicates with the legacy application via data queues. I use the ProgramCall object with no PCML. I pass a data structure as the parameter and parse the EBCDIC buffer using the Java toolbox. <p>Joe
Hi Joe, <p>I hope you don't mind me asking more questions about your design. I'm intrigued by it. I read your redeployment book a few years ago and I don't recall you using RPG as the controller, but you may have. <p>Is there a one-to-one relationship between a JSP and the servlet? Or can many JSPs (different forms) point to one servlet? <p>Does the servlet retrieve the form parms and forward those to the RPG progam? How do you manage the parms to the RPG program if one servlet can handle many JSPs (many "screens" of unalike form data)? Do you have a hidden field in the form to tell the servlet which screen it needs to process? <p>Do you use ProgramCall or call the RPG pgm as a stored procedured? If ProgramCall, do you use PCML to automatically convert from UNICODE to EBCDIC and back? <p>Thanks! I certainly appreciate your presence in these forums. <p>Chris
kskuhlman: <p>The way you are approaching and evaluating your tests sounds like the way I was taught. I think it'd be great if you'd take Joe up on his offer and work on some better benchmarks. Then other people can see what you've done and maybe improve on it, just like you can improve on Joe's. <p>I especially agree with your comments on standard deviation. <p>On Joe's behalf, he has consistantly said this was just a beginning. And he made it open source. So he's WELL within his right to respond to criticisms with "put-up-or-shut-up" since he's made it so easy for ANYONE to "put-up". <p>-dan
Ken, you miss my primary point. You seem to think I am asking people for input on how I should write the tests. That's not correct. These tests are open source. If you don't like the tests or the calculations of the results, provide some better tests of your own. Don't expect me to write programs that explore every nuance; I've said over and over that I'm not a good enough SQL programmer to do that. That's why I have explicitly asked that rather than complain about the tests, people provide better ones. <p>I'm looking forward to your contributions on the website. If, on the other hand, you refuse to contribute because you don't believe in the value of what I'm doing, then your complaints are pretty much a waste of time, don't you think? They are then in fact the sort of argument that I address in the article: "You didn't do THIS and THIS, so your results are invalid." Pshaw. At least I took the time to do something concrete; feel free to either expand on it or ignore it, but further criticism is counter-productive. <p>Joe
Joe, thanks for overlooking the confrontational nature of my posts, just as I've overlooked the confrontational nature of your article, and of your second reply. However, you have apparently intentionally overlooked some of my FACTS (I assume from your earlier response that FACT is an acceptable word to capitalize). <p>As I indicated in my last post, using your test suite I came up with the result that single file native chains are significantly slower than "select into". In fact, the initial numbers were that "chain" was about 5 times slower than "select into". Using your standards for scientific integrity, I should be screaming up and down right about now how chain performs like "a dead yak". But I'm not, because the result defies common sense. Instead, I looked into the cause for about 5 minutes & saw two things that accounted for the non-sensible result. The use of erroneous timestamp math accounted for 4 of the 10 second gap. Not throwing out the bogus high & low runtimes accounted for another 7 seconds. In other words, once I improved the reporting to not contain these problems, the chain was shown to perform slightly better then "select into" (under the supplied test conditions). <p>I suggested in my first post that you include standard deviation when reporting your test summaries, and I hinted in my second post that you throw out the best & worst times. Since you ignored me the first two times, I'm saying it again now: a straight average is a misleading number without standard deviation. <p>In addition to the two improvements I suggested above, I propose that you also check to see to what degree the following variables have on the reported performance: <BR>
number of test iterations per run, use of the "optimize of n rows" clause, the number of fields returned (including a test that allows use of a perfect index), program object size, the use of primary keys, the size of the tables being accessed, the use of journaling, and the use of commitment control. <p>So, now, even though I don't believe in the value of what you're doing, I've suggested improvements in each of my three posts. You ignored me the first two times.. if you ignore me a third time, I'm going to have to assume that you're just trolling. <p>PS: Thanks clearing up the fact that you're not on some "sort of anti-SQL vendetta", just that you "hate it" sometimes.
The important concept of JSP Model II is not the language of the controller or the servers, but instead the fact that beans are loaded by something other than the JSP, and that which JSP is displayed next depends on the controller, rather than the current JSP. In JSP Model I, each JSP determines the next JSP to display, while in JSP Model I.5, there's a configuration file that identifies the program flow. <p>The language implementation of the controller and servers is really a matter of choice. In my article, I think I implied a 100% Pure Java implemenation, but there's a spectrum from pure Java to almost no Java. I think this is important, because this very-thin-servlet approach can be implemented by shops with very little in-house Java expertise. In fact, if you've created the base classes correctly, they can be managed by simple .ini files or XML configuration files, with no Java programming whatsoever except for what is needed to modify the JSPs. <p>Joe
I'm going to try to avoid propagating the confrontational tone of your posts. Just so we're clear: I don't have anything to prove. I am not on some sort of anti-SQL vendetta; as you can see, my tests already encompass RPG, Java, JDBC and SQL. I plan to add tests comparing program calls to procedure calls and data queues to sockets. The fact that SQL performs like a dead yak is not my fault, nor is it my goal to prove that. So, no, Ken, there is no onus on me. I am presenting my findings, and if you disagree with them, the onus is on YOU to provide alternate facts. Argue all you want, but until you provide alternate tests, my results stand. <p>And if the "rest of the benchmarking world" uses SQL, then it doesn't include the hundreds of thousands of iSeries shops running native RPG and COBOL applications. And if it doesn't, then they're really not that germane to this forum, are they? <p>I'm sorry for the slow download. Feel free to donate a T1 line for your downloading convenience <smile>. <p>Just to be clear, it's my belief that SQL is okay for queries, especially mutli-file queries with ad hoc ordering and selection. I hate it for single-record fetch and especially for transactionla update. I notice you didn't share your results on the INSERTs or UPDATEs, and my guess is they performed as poorly on your machine as they did on mine. <p>Thanks for the update on SQL date math. I would NEVER have guessed that. What an atrocity. Anyway, it should be noted that the problem only occurs when a test runs over a minute, and the vast majority of the tests did not. It will, however, skew results for the poorer performers. <p>So, yes, it's BUGGY! But the bug affects nearly none of the results. You might want to clarify that sort of remark, especially when you use EXCLAMATION POINTS AND CAPITAL LETTERS! <p>Joe
It looks like I have one apology to make, but it won't change my overall stance much. <p>I'm sorry for representing your select performance test as being based off of relative record number. It wasn't intentional slander, but rather a misunderstanding I had after reading one of the posts on your website a few months back. I did start to try to verify the claim yesterday, but unfortunately the package download took longer than my patience lasted. I've subsequently loaded your test suite, and have verified that in fact, it does compare keyed chain versus fetch performance. <p>We'll have to agree to disagree on the relevance of comparing simple i/o operations, however. Your agreement that workload-centric tests such as the SAP benchmark, or one of the TPC benchmarks, are more well-rounded satisfies my primary concern. Perhaps in the future, you could qualify your performance claims so that the scope of your claim is more clear. Also, I would encourage you to write one of the workload-centric tests in native I/O, to see if you could make a less qualified assertion. <p>The article, as it stands, with its unqualified assertions, is misleading. <p>As far as your challenge goes, it should be clear that I'm only interested in benchmarks that model a real-world workload. If your intent is to benchmark something else, then you wouldn't be interested in any contributions that I might make. And if you want it to grow into a real-world test, then it would be best to base it off of an existing model. The onus is on the person with something to prove, and since the rest of the benchmarking world uses SQL, that person is you. <p>Finally, please note that all of my comments are regarding the SQL vs native claims. The rest of the article is very good, and I wish you the best of luck in bringing some performance numbers to the "best web methodology" argument. I hope this hasn't been too much of a side-show from the main point of the article. <p>-Ken <p>PS: Just for grins, I went ahead and ran the test suite as you have it. Without endorsing the testsuite, I thought I'd share the results. On the box I tested on (1.75 physical/2 virtual CPU LPAR on a 840 running v5r2, latest cum level), after 10 test runs, the multitable fetch (SQL) tests averaged about 5.5 sec each, whereas the chain (native) version, took about 2 seconds. Also, the single table fetch tests took 3-4 seconds, while the native chain test averaged 9 seconds. The different runs varried widely, however. I still believe strongly that if this benchmark is to be used, some sort of normalized average should be used instead of a straight average. For instance, the native chain test ended up with a 83 second result in one of my tests, which was obviously bogus & should have been thrown out. <p>NOTE: The SQL used to calculate times in the test suite is buggy! When you subract timestamp fields in SQL, the result is _NOT_ seconds, it's an interval! The result is numeric, but it's encoded to have the minutes in the 3rd decimal precision, hours in the 5th decimal precision, etc. So, for example, if two timestamps are a minute apart, the difference is 100, not 60. See the following article for details on how to compensate for this <a href="http://mcpressonline.com/mc?14@232.1KNKfHX1eQT.17@.214a3065">article</a>
Joe, <p>Actually, I was referring to the JSP Model II definition in your <a href="http://www.mcpressonline.com/mc?printarticle@232.1KNKfHX1eQT.17@.6b17769e">JavaServer Faces<a> article. <BR>
I knew you must be using a servlet somehow because I know you don't use CGI (calling an RPG program directly from JSP). <p>Regards, <p>Chris</a></a>
JSP Model II is a somewhat overused term. People call Struts JSP Model II, when it really isn't. Others insist that JSP Model II must be 100% pure Java, even going so far as to require EJB. Me, I like to use a MVC architecture in which the servlet proxy is a thin facade over an RPG controller. This puts all my business logic - database and application - in RPG, where I like it. <p>The servlet is primarily used to pass data back and forth between the JSP view and the RPG controller (although as your design evolves, you can add some simple validations on the servlet side, as well as providing helper methods to the JSP for UI formatting). <p>That doesn't mean it's impossible to design 100% Pure Java solutions. There, the controller and database logic is in Java. And for relatively simple applications, it's really not a terrible solution. It's just that the code complexity goes up exponentially as your business rules get more complicated. <p>Joe
Joe, <p>I thought you were a proponent of JSP Model II -- using a Java servlet as the controller, not RPG. Or, in your article, is the form action of the JSP just a servlet which simply passes control to an RPG controller program? <p>Chris
I have said over and over again that my benchmarks are not perfect. However, that's about all that I agree with in your post. <p>First, I emphatically disagree with your assumption that benchmarks must "do some meaningful work" to be valid. Untrue. While workload-related benchmarks such as the SAP benchmark are certainly a more well-rounded measure, the fact that JDBC is 50 times slower than native RPG I/O for simple fetches is hardly meaningless. My tests provide raw data that can be used for analysis. <p>Second, you cite my benchmarks as immature. Perhaps, but such derogatory language is uncalled for and, given the nature of the site, not a little ironic. Did you read the posts on the site, wherein I call for others to make the benchmarks better? That's why I made the site open source. You don't like them? Feel free to write additional tests to test your assumptions. Rather than complain, which is easy to do and helps no one, I challenge you to instead put in even one tenth the work I have. I have already written the frameworks, put up the website, developed the tests and made the entire thing open source. All you have to supply is your wisdom in the form of more "mature" benchmarks. <p>Third, you say my results are misleading. J'accuse! Name one result I got which is misleading, and how and why it misleads. Be warned that I'll ask you to back up your statement with FACTS, meaning a benchmark that proves your point. <p>Finally, you state that my programs use RRN. Not true, or at best only partially true. The files are keyed, the access for FETCH tests is by CHAIN and WHERE clause. I do read sequentially for update tests, but I do that with both: I read through a result set or I read sequentially through a file. And of course, the concept of "RRN" access is meaningless on writes, where SQL and JDBC both perform miserably. <p>So, let's get back to it. You basically complained that my tests are immature and misleading, and I challenge you to back your opinion up with facts. Here are mine: <p>FACT: SQL is much slower than native I/O for any non-set based functions. Sometimes as much as ten times slower. <p>FACT: JDBC is even slower, by another factor of five, for nearly every operation. <p>CHALLENGE: Prove me wrong. Submit some tests to the site. It would probably take you less time to write a test program than to respond to this post. So don't sit here and complain, write some tests to test your hypothesis and add something to the community. <p>Joe
This article refers several times to the SQL-vs-native performance "benchmarking" that Joe has available on his site, and holds it up as an example of how to fight thuggery. <p>Sadly, however, that benchmarking is so immature that its results are severely misleading. The tables have no primary key, and are accessed by RRN, something that is outside the conceptual framework of SQL. Also, no statistics are given about the standard deviation of test runs, so it's impossible to tell if there's simply a higher "one time activation cost" of one method over the other, or if variations are consistent. Finally, the tests are so simplistic that they're too far removed from real applications to have any meaning. <p>A meaningful benchmark needs to test the performance of a meaningful task. For example, "find the 10 customers with the most open orders", or "for each manager, find the average salary of each job title that reports to them". Sample tables should be defined in third or 4th normal form, etc, etc. <p>Now, Joe, you know your benchmarks are a long ways from perfect. In fact, they barely scratch the surface. Your knowledge of this is reflected in the fact that your benchmark is release 0.2. So don't you think presenting potentially misleading information as gospel is disingenuous, if not the kind of out-in-out thuggery you claim to be fighting?
<i>Joe Pluta wrote: Facts tend to shut up the Thugs quicker than anything.</i> <p>My experience is quite the opposite. I have found that the technical purchasing and direction decisions made by non-technical execs are like stating "Damn the Facts, , , , ,Full speed wherever!" <p>And it would appear that most technical purchasing and direction decisions <u>are</u> being made by non-technical execs. <p>Been there and done that so many times, I've worn out the T-Shirt. <p>Dave
Being a thug, you don't play by any rules but your own. That's what makes you a thug. <p>And although you're a thug, and an anonymous thug at that (the worst subcategory in my opinion), I'll answer your questions once, even though they have nothing to do with my article (this is another Thuggery Tactic: ask unrelated questions and then complain when they're not answered). Here are the answers: "Better than any other", "to speed the processing of data into information", "no". <p>And since you missed my point, I'll restate it: a message-based client/server architecture using RPG as the controller and server communicating with a JSP front end is the best architecture for web-based iSeries applications. <p>If you don't need web-based iSeries applications, then feel free to ignore the statement. Otherwise, feel free to challenge it. However, use facts and stay on topic. Thugs, especially anonymous ones, should not be surprised if their statements are simply ignored. <p>Joe
Being a thug, I feel no obligation to play by your rules. <p>Please define 'best', tell us why companies use computers, and should all business problems require an IT department to solve them?
This is a discussion about <B>Client/Server Architecture</b>.<p align='center'><a href=http://www.mcpressonline.com/mc?1@232.1KNKfHX1eQT.17@.6b17dd6f>Click here for the article</a>.</p>