Welcome! As you have probably worked out by now, our transaction manager is developed under components/txmanager/trunk. There's also a more osgi-friendly version in my sandbox. (the runtime functionality is pretty much the same, it's just configuration differences).
The tm is entirely xa based (no corba tm features) and fully supports recovery. It supports lots of branches but does not currently include any tm-to-tm communication to support distributed transactions (where one of the branches is a transaction in another tm). (It does support j2ca transaction inflow, so from that point of view the hard half of the problem is solved). Our recovery protocol is AFAIK unique in providing incremental recovery as resource managers come online. The way this works is that we name all the resource managers and record the name with the branch xid in the tx log. That way when a resource manager reappears after a shutdown we can definitively dispose of all the branch xids that relate to that resource manager. Without this feature, if the tm fails in between commit and recording commit in the tx log, there is no way to tell if the xids from the committed tx came from a resource manager that has restarted or one yet to restart. We haven't provided last-resource 1-phase commit optimization because, well, it doesn't provide xa guarantees. We do have an untested feature where you can use a db as the tx log and do a 1-phase commit on it as the last participant, but this is likely to be a lot slower than normal xa with a log. The only way I know of to get better throughput and retain reliability is to find a way to generate idempotent operations. I'm certainly interested in any other ideas you may have. thanks! david jencks On Apr 28, 2012, at 10:20 AM, Julian Klappenbach wrote: > Hey all! > > I'm just joining on the group, and thought I'd introduce myself. I've worked > in software development for over 20 years, a good portion of that developing > Java enterprise solutions and applications. I've previously worked at BEA, > before Oracle bought them, and really enjoyed the work. > > I have a new project for a client that needs a good J2EE stack, and I've been > evaluating the code and documentation for most of the candidates in the > market. Geronimo has really stood out. > > My primary focus on the stack, at least initially, will mirror the > requirements for the application I'm developing. The system is to be a > transaction processing engine, dealing with money. The system also needs to > scale, and scale efficiently and effectively. At first glance, that's a > likely recipe for distributed transactions and XA protocols over all > resources involved in transactions. There are other ways of solving the > issues of DT that sacrifice consistency for simplicity and speed, but these > are often simple hacks or procedural in nature. I'm interested in the types > of features that could be worked into a transaction engine / persistence > layer to give more options to developers, perhaps coming up with protocols > that offer heuristic recovery functionality without the overhead of DPC. > > I'm also interested in transaction processing married to web services -- be > they SOAP, REST, or JSON via JAX-WS. WS-AT, WS-Coordination, and WS-BA are > all areas that I'd like to explore. > > If any of you are involved in these areas, please get in touch. I'd like to > learn more about what you're doing and how I may eventually contribute in > kind. > > I'm looking at the code base right now, and I've read the documentation on > building Geronimo. Is there a tag other than the beta release that will give > me something stable? The trunk has been giving me dependency issues. I've > run bootstrap successfully, but am still hitting (among other dependency > complaints): > > [ERROR] Failed to execute goal on project j2ee-system: Could not resolve > dependencies for project > org.apache.geronimo.framework:j2ee-system:car:3.0-SNAPSHOT: Failure to find > org.apache.geronimo.framework.features:framework:kar:3.0-SNAPSHOT > > not even halfway through the build. Are there other targets I need to first > execute in order to ensure that these dependencies are built and installed? > If there's other documentation online that explain this, just point the way. > Otherwise, a known valid tag would be great. I'm considering getting a maven > proxy set up so I can grab trunk and mediate packages independently. > > Anyway, as I learn the stack, I'll do what I can to add documentation, etc. > > Cheers! > > Julian
