Pats media conspiracy

Leave a comment

Does anybody else think its fishy that 24 hours after the Boston Globe reported that the Patriots had cooperated with the NFL, given all tapes and notes, that the tapes had been destroyed, and case closed by the league office, there is no mention of the story on espn.com or cnnsi.com’s web site?  I mean, usually these guys are on top of every story within seconds of it being released.  Maybe ESPN doesn’t want to report it because of this 5 day old bullshit story by Greg Easterbunnybrook saying Belichick won’t last the season is one of their highlighted stories. 

No, I think the media doesn’t want the story to end.  Controversy sells, good positive news doesn’t.  That’s another thing I should have warned the patriots of in my last pats blog, the media will never ever have something good to say about you again.  And will focus on the negative, because it drives traffic to their sites or sells papers.

EJB 3.1: Immediate feedback on EJB Singletons and concurrency needed

32 Comments

Well, its that time again. Time to work on the next version of Java EE and that means EJB 3.1. Since the EJB 3.1 list is a private one, I intend to regularly converse with the community through this blog to tell you what’s going on and to obtain valuable feedback.

One new thing that is being circulated in the expert group is the idea of a singleton EJB much like what we already provide in JBoss EJB 3.0 implementation through @Service beans. Singleton EJBs would be a single EJB instance, created at boot-time, with the same functionality as stateless and stateful beans (remote, local, and web service interface, transactions, security, injection ,etc…)

Singletons and concurrency

There’s a couple of debates going on within the expert group on singletons and their concurrency with multiple invocations. Should only single-threaded singletons be allowed? Since servlets can either ben single or multi-threaded, seems reasonable to allow the same thing in EJB land. But, what do you think? If we support both models, what should be the default? Again, your feedback is needed!

Convenient concurrency

Another idea being proposed is to expand the concurrency model even further and provide convenience annotations over the java.util.concurrent library, for instance

@Singleton
public class MyBean {
   @ReadOnly public int getStuff() {...}
    @Write public void setStuff(int i) {...}
}

Basically the @ReadOnly and @Write annotations would manage a read-write lock that is implicitly associated with the single instance and managed by the EJB container.

So, if we’re gonna do basic concurrency, what about transactional concurrency as well? Should read/write locks be transactional as well? Held for the duration of a transaction?

If all this is gonna happen, how do we declare the default concurrency? Here’s one idea:

enum ConcurrencyMode {
   SINGLE_THREADED,
   MULTI_THREADED,
   READ_WRITE,  // use a readwritelock, but read is the default access if no annotation provided
   WRITE_READ, // use a readwriteock, but write is the default access if no annotation is provided
   TRANSACTIONAL_READ_WRITE, // same as READ_WRITE but transactional
   TRANSACTION_WRITE_READ // same as WRITE_READ but transactional
}

@Singleton(concurrency=WRITE_READ)
public class myBean {...}

Feedback needed

Any feedback in the comments section of this blog. Even a simple +1 or -1, or +1 on @Singleton, -1 on concurrency are all valuable feedback!

Mark’s rebuttal on compensations with REST and JBPM

3 Comments

I got what I hoped for. Mark Little responded to my previous blog. Cool, now I’ll really start to learn something…. Let me respond to some of his comments:

Bill: “One of my concerns is the complexity of the WS-* layer and how it affects maintainability and evolvability of a distributed system. WS-* requires both the client and server to have the necessary middleware components and libraries installed to work.”

Mark: Yes, but that’s the case for any distributed system: the endpoints have got to be able to understand each other or go through some intermediary that can do the protocol/data translation. The same is true for HTTP though.
Mark’s right, I said something obvious, but I think the layers you have to have in sync are very different in size and complexity. While a REST over HTTP web service only really requires an HTTP client, HTTP web service, and maybe an XML parser, WS-* requires those plus all the WS-* libraries, plus any generated stubs. What I like about REST over HTTP you can actually tell the server what data format you’re sending (content-type) and what format you want back (accept). Maybe there is something equivalent in the WS soup of specifications, but it doesn’t seem like that is what the industry is pushing as its default framework.

Bill: “What I continually like about REST over HTTP is that there is little to no requirement on either the client or server side for additional libraries or generated stubs other than a http client library and a http server.

Mark: So let’s assume we can get everyone to agree to use HTTP (not a big assumption, so I’m happy with this). Then we have to get them to agree to the protocol data, the format, representation, etc. that actually flows between the endpoints. It’s no good someone saying “because we agree on PUT or GET that’s the end of the story.” That’s a bit like saying that because we agree on using letters and envelopes to send mail around the world the recipients will be able to understand what’s being sent!

Its eerie. I gave the same argument to Vinoski over private email months ago, but then I thought about it a bit more. Don’t you have to do the same thing with WS? You still have to agree on the message you are sending. What is the name of the remote method call you are invoking. What are its parameters. What is the data format of its parameters, and so on. What allowed me to break the internal conflict I had was when I came to this realization: What if you think of PUT, GET, POST, DELETE, and OPTIONS as a set of metadata?

@Put void createOrder(Document theOrder);
@Delete void deleteOrder(int orderNum);
@Get Document getOrder();

Maybe I’m crazy, but these HTTP operations are really nothing more than annotations on a method. In using REST over HTTP, yes, you still have to agree on the data format exchange, but you are providing clearly defined, distinct, exact, metadata on the behavior of your endpoint. Behavior that can be generically communicated to mature tools and services that have been around forever that your operations department knows how to operate and fine tune your application with.

Mark: The Web works because the standards/specifications on which it is based were laid down back in the early 1990’s and haven’t really changed. The W3C manages them and everyone agreed to abide by them very early on; there’s strong commercial incentive not to change things. That has nothing to do with REST and everything to do with protocol agreement: same thing has happened with WS-*.

I am officially in my late 30s. I did work through both the short-lived DCE and long-lived CORBA eras that touted the same story of interoperability. Sorry if I am skeptical and worried that the industry will yet again re-invent itself in another 5-10 years.

Mark: Yes, we have interoperability on the WWW (ignoring the differences in HTML syntax and browsers). But we do not have interoperabilty for transactions, reliable messaging, workflow etc.

A wise man once told me if you run into a wall, redefine the problem. To me, that’s what the whole REST exercise is, redefining the problem in distributed computing. The whole underlying point of my previous blog was that maybe you don’t need interoperability for transactions, reliable messaging, and workflow in a distributed environment, if you let the client drive the application. Yes, you need transactions, reliable messaging and workflow at the client. The idioms I described with jBPM use all three of these subsystems, but they do not require a remote protocol definition. As responsible engineers, we should be questioning the need for WS-*. The amount of investment is just too huge for any organization. There’s too much money and time to be lost.

Bill’s next point was around flexibility. He mentions the ordering of compensations can sometimes (often?) be important and that you can’t rely on ordering within WS-BA. Unfortunately that’s not correct, as was pointed out several years ago.
Apologies. I didn’t make this mistake intentionally. The article Mark points out was one of the things I read before writing my previous blog. The talk of scopes was a little confusing there. Seemed more of talk of nested transactions than the control of ordering. But, even so, I still don’t get the need for it. Why the need for BA if it is not going to do things automatically for you? If the line between your business process and your compensation engine is starting to blur, why not have your bpm and compensation engine be the same thing? Cuts out one less piece of infrastructure you have to install and manage.

So just because I decide to use REST and HTTP doesn’t mean I get instant portability and interoperability. Yes, I get interoperability at the low level, but it says nothing about interoperability at the payload. That’s damn hard to achieve, as we’ve seen over the past 7+ years.

Not so sure this is true. If your content type is text/xml, you’ll probably have an XSD associated with it. If you use the design by contract to implement your web services that people like the Spring guys are pushing, you really have the same thing.

Bill: You still have strong decoupling in a bpm driven activity. The difference is that instead of compensation being hidden by the server, it is visible, and in your face, embedded directly in the business process. With jBPM, you can look at the process diagram and know exactly the flow of success and failure conditions of your distributed application. With BA, you would have to dive into the documentation and code to determine how your application functions.”

Mark: Yes, that’s right, but no different to what you’d find with a good WS-BPEL implementation.

See? I knew I’d learn something. But when I said “a bpm engine like jBPM might be a better solution to manage compensations.” I meant any bpm engine. What I really want here is to have the client drive the application and simplify the complexity of the distributed protocol. This is why I said I really liked the idea of using BA with a web application. It would all be local and controllable. After reading up on BPEL compensation handlers, I also like the idea of using them with RESTful web services. Again, put all the responsibility on the client for managing the coordination.  Then we don’t have a dual dependency on an in-sync client and server.

Distributed Compensation with REST and jBPM

9 Comments

Over the past few months I’ve been leading up to something. Although I was researching and diving into specifics of compensations, jbpm, and REST, I had a much grander purpose in writing these specific blogs:

These blogs were specifically written as a thought exercise in what it would take to write a coordinated distributed application. What pieces would we really need? Where does WS-* fit in? How about REST and BPM? Do we really need a business activity framework? How can we write scalable and maintainable distributed systems? I want to pull together my thoughts on the answers to these questions in this blog entry as well as ask a few more.

Maintainability: REST over WS

One of my concerns is the complexity of the WS-* layer and how it affects maintainability and evolvability of a distributed system. WS-* requires both the client and server to have the necessary middleware components and libraries installed to work. A distributed application usually means that it is an integration project. You are probably integrating with systems you do not control. There is probably a good chance you would not be able to bring down these systems to install or upgrade their middleware architecture. They may be poorly maintained or even not maintained at all. This is where the idea of REST comes in to simplify things and make things more usable over time. Since it has constrained, well defined interfaces over a mature and stable protocol, it has a higher chance of letting your distributed applications evolve as the WWW has evolved.

What I continually like about REST over HTTP is that there is little to no requirement on either the client or server side for additional libraries or generated stubs other than a http client library and a http server. This doesn’t mean that you cannot use a client and/or server side framework to implement your RESTful services or connect to an existing service. You are free to use whatever you want to make yourself productive, but not at the expense of requiring the client or server to have anything installed other than HTTP support.

Flexibility: BPM vs. WS-Business Activity

Earlier this year Mark Little introduced me to the idea of compensating transactions and a framework that could manage such an application. My first thought was that this stuff was interesting, but my intuition was telling me that compensations were something that might have to be modeled rather than managed. That compensations were more of a business process than something that could be coordinated automatically. My feeling is that compensation could easily become too complex for a transaction manager to handle generically. That if you modified a transaction manager to handle these more complex scenarios it would quickly start to look like a bpm framework.

Take an abort event for example. The coordinator in a compensating framework like WS-Business Activity has to make decisions on what order to perform a compensatory action on the resources participating in the activity. A default LIFO ordering seems very appropriate on the surface, but it falls apart in even the simplest of examples. For instance, let’s revisit the example I gave in my previous blog of the ordering of a computer at an online retailer. The business process might look like this:

  1. Bill credit card
  2. Pull parts from inventory
  3. Assemble computer
  4. Install software
  5. QA
  6. Ship

Let’s say the customer canceled the order after it had reached the QA state, #5. Having the customer wait for a LIFO compensation to receive refund on their credit card is just not acceptable. They will not want to wait for installed software to be wiped, the computer disassembled and parts sent back to inventory before they receive their refund. Therefore a 1-4-3-2 ordering of compensations might be more appropriate. Let’s expand this scenario even further. What if the customer paid in cash? The cash refund process might take just as long as disassembling the computer would. Maybe it would make more sense to do the refund in parallel with the other compensations? So, state #1 could be done in parallel with 4, 3, and 2, but, 4-3-2 still has ordering dependencies. You can’t disassemble the computer before you’ve wiped the hardrive. You can’t send parts back to inventory before you’ve disassembled the computer. So, you see, in even the simplest of business activities, you can have variable and complex compensation ordering. This is why I think a bpm engine like jBPM might be a better solution to manage compensations.

When I had discussed this with Mark, he made a good point that you are just replacing one coordinator(BA) with another (jBPM). You still need a coordination engine. Although he is semantically correct, I think the solutions are very different. With BA you have something generic and decoupled from the business process. In a distributed system, it is also a defined contract that both the client and server must obey. Which brings me to my favorite quote in the O’Reilly RESTful Web Services book:

The client should be in charge of managing its own path through the application

While WS-BA puts the onus on both the client and server to have WS libraries that are of the same version and can interact with one another. This all works beautifully in controlled environments. You have a very nice decoupling between compensations and business logic in both client and server side code. But…. What happens when BA versions are out of sync, there’s interoperability problems, or even worse, one or more of the services you have to coordinate does not support WS-BA? With jBPM, success and failure paths are a part of the business process. There isn’t necessarily a contract between the client and server as the client is responsible for knowing how to compensate and to perform the compensation. You still have strong decoupling in a bpm driven activity. The difference is that instead of compensation being hidden by the server, it is visible, and in your face, embedded directly in the business process. With jBPM, you can look at the process diagram and know exactly the flow of success and failure conditions of your distributed application. With BA, you would have to dive into the documentation and code to determine how your application functions.

In his blog in late August, Heuristics, one-phase commit and compensations, Mark Little talks about his early compensation framework and its interaction with heuristics:

In both of these problem scenarios what typically happens is that someone (e.g., a system administrator) has to get to grips with the inconsistent data and figure out what was going on in the rest of the application in order to try to impose consistency. One of the important reasons this can’t really happen automatically (at the TM level) is because it required semantic information about the application, that simply isn’t available to the transaction system. They compensate manually.

Until then. What we were proposing was allowing developers to register compensation transactions with the coordinator that would be triggered upon certain events, such as heuristic outcomes or one-phase errors. And to do it opaquely as far as the application developer was concerned. Because these compensations are part of the transaction, they’d get logged so that they would be available during recovery. Plus, a developer could also define whether presumed abort, presumed commit or presumed nothing were the best approaches for the individual transaction to use (it has an affect on recovery and failure scenarios).

Reading this fed more fuel to my idea that compensations really belonged as part of a process model. Transactions that have heuristic outcomes many times require human intervention as well as action by the framework itself. Yes, there’s a lot a transaction manager could do to make it easier to record business activities, but you’re still going to have interact with a real person to resolve many issues. jBPM is great at modeling work that requires a human.

But what about reliability?

Great, so we’re going to use something like jBPM as both our coordination and compensation engine and REST to expose our services on the network. Can we trust these things to provide us with the reliability and consistency that we expect out of something like WS and WS-BA? If you’re modelling compensations in jBPM, you’re gonna need the ability to reliably perform these compensations. Luckily, I’ve already answered how you can guarantee execution and failure handling in jBPM. But what about REST, what does it add? If you have truly written RESTful services, you have a lot of reliability and consistency built into your application. HTTP GET, PUT, and DELETE are supposed to be idempotent, meaning that it doesn’t matter how many times you’ve invoked them, the result is the same. While jBPM can guarantee you execution and failure handling, it can’t guarantee that these events won’t be duplicated. Since your RESTful services should be idempotent, you won’t have to worry about it! (I know, easier said then done.)

Where does that leave WS-BA?

I did discuss my ideas a bit with Mark. One of his comments that struck home was “Imagine if you had to explicitly tell all of your XA resource managers to prepare and commit?” I’ll admit that in a WS-BA world, writing a client that integrates a bunch of distributed services into one business activity would be uber simple and clean. The work being done with the JBoss Business Activity Framework simplifies the server side greatly as well. A compensation framework like JBoss Business Activity, might work really really well in the controlled environment of a web application. Until I actually write one of these applications or talk to a bunch of users and customers that have used WS-BA to model their integration project, I will remain skeptical. I just hope that I can get the feedback I need to further formulate my thoughts on this subject. Your thoughts and experiences??????

Patriots scandal brings back old memories

2 Comments

Ok, after a day to reflect and read all the articles and see all the commentary, I think this whole thing is being blown way out of proportion.  I take Bill Belichick’s latest comment pretty literally and I’m surprised nobody is dissecting it more in the press.  Even the Boston press this morning seems to have ignored Bill’s post-penalty comments.

As the Commissioner acknowledged, our use of sideline video had no impact on the outcome of last week’s game. We have never used sideline video to obtain a competitive advantage while the game was in progress.

Part of my job as head coach is to ensure that our football operations are conducted in compliance of the league rules and all accepted interpretations of them. My interpretation of a rule in the Constitution and Bylaws was incorrect.

Everybody asks the question, why did Bill Belichick do this petty stuff when he already had a dominant team?  Maybe the answer isn’t so diabolical as members of the press seem to like to paint a picture of.  Maybe its as simple as he tapes the signals to review  after the game and that he didn’t believe this was a violation.

Its funny seeing opponents come out of the woodwork asking if their games were tainted with this.  Hines Ward questioning the 2001 and 2004 AFC championship games against the Steelers.  Let’s review those.  In 2001, the Patriots scored a total of 3 offensive points in the 2nd half of the game.  Huge advantage huh?  In 2004, the game was already over by the second half before any analysis of play calling could have been dissected.  Then you have members of the press comparing this to Nixon and Watergate.

All this eerily reminded me of the JBoss astroturfing incident.  We had many of the usual detractors coming out of the woodwork condemning us for the evil actions we had inflicted on the Java community.  You had people also comparing our actions to Nixon and Watergate.  Yes, this incident was blown out of proportion as well, basically because of our previous arrogance and inability to let any slight against us go unchallenged.  Belichick has similar arrogance and inability to let grudges go.  Both incidents were also terribly inconsequential and even irrelevant in the grand scheme of things.  Does it change all the hard work Belichick or JBoss did to achieve their successes.  No, it shouldn’t.  Does it taint your accomplishments in the eyes of others?  Sure it does, but what ends up happening is you continue the fight not to bask in the glory others place upon you, but instead for your own personal feeling of self worth.

So, what’s in store for Belichick’s legacy?  My guess is that in the near to far future, you’ll have individuals that see an opportunity to boost their own careers or settle old grudges by simply out right lieing about new allegations when the Patriots continue to have new success.  Their proof for these made-up accusations will be, “they’ve done something bad before, so this must be true.”

So, what will Belichick do about it?  Will he be a pussy and retire after this season?  Or will  he stick around for another 10 years and win another 3 superbowls? I hope he doesn’t let this scandal ruin the love he has for the game or kill his deep desire to win and win big.  I hope he doesn’t let others define his own personal perception of himself.

Patriot’s scandal

4 Comments

Well, if you’re a fan of the NFL you’ve probably heard about CameraGate. Another hero of mine taken down by cheating. So, I’m really conflicted within. A few weeks ago when I found out about the Harrison HGH scandal, I demanded the Patriots release him. Now that Belichick has been caught for cheating, should I be demanding he be fired by Kraft? Or should I rescind my Harrison request? This ESPN article gives a different perspective on things, especially the Zach Thomas story of him analyzing audio tape obtained from a mike on a defensive player to learn Brady’s audibles. (Pats lost that game 21-0). Another thing the ESPN article talked about was how the home team was allowed to have extra cameras on the sideline:

Home teams often place video cameras on the sideline to record the opposing team’s signals. The cameras are placed on the sideline under the guise that they provide extra game tape for the home team’s coaches. When road teams attempt to get credentials for their sideline cameramen, the applications are usually rejected.

Maybe Belichick’s rationalization is that this is an unfair advantage of the home team and that he should be allowed the same advantages. All this leaves me to believe that this has been blow way out of proportion. I hope we hear a good explanation from Belichick. We probably won’t though given how tight-lipped he is.

Now how about Rodney? Given the type of guy he is in the community and the team leader he is. I guess I have to forgive. Especially if I have to rationalize for Belichick’s actions.

Clueless, Unclear, or Both on Ruby?

10 Comments

In my previous blog, Go Away Ruby, Andy Oliver got a little upset with me in the comments section. In typical Andy style, he likes to strut the one thing he knows to show how much smarter he is than everybody else. His usual tactic is to state the one bug he found in an application to show how much the thing or the individual who wrote the thing sucks (to Andy, everything sucks) and how clever he was in finding this bug. Sounds like I dislike Andy, but I don’t. Andy is one of those rare people that know how to create an open source project, promote it successfully, and recruit talented volunteers to help him out. His mail project at Buni.org is a testament to this (cool stuff BTW, you should check it out).

Anyways, Andy had to go on a long rant on how clueless I was on Ruby. Maybe I am totally clueless, but I think he missed my point on what I disliked about Ruby and other languages like PHP, Perl, Tcl, VB, and Python. The last five of which I have written at least one project in. What I dislike is that these languages do not require type declaration in their syntax. Take this from the Ruby Language homepage:

 

# The Greeter class
class Greeter
  def initialize(name)
    @name = name.capitalize
  end

  def salute
    puts "Hello @name"
  end
end

# Create a new object
g =Greeter.new("world")

# Output "Hello World!"
g.salute

I dislike the fact that the initialize method does not require a return type and that the parameters of the method declaration don’t require a type either. Also, the ‘g’ variable has no syntactically assigned type either. I just don’t see how the refactoring and code analysis tools that Intellij and Eclipse have for Java could ever be mirrored in Rubyland, or even Python, Perl, Tcl, VB, or PHP for that matter. Maybe Andy is married to his VI editor, but I just can’t go back to the days of having grep and sed as my sole refactoring tools.

I am guilty though of using incorrect vocabulary to define my beef with Ruby or Andy. I should not have used typeless or dynamic typing and stuck purely to type-safety. Maybe things are clearer now?

If dynamic typing sucks, JBoss AS must suck

In the Go Away Ruby comments Andy state that if I think dynamic typing sucks (I don’t), then in turn I must also think JBoss AS sucks. In Andy’s world, java.lang.Proxy and JBoss’s Invocation object are just a workaround for the lack of dynamic typing in Java. Dynamic typing, in my mind at least, means that type is assigned at runtime and can even by augmented at runtime. JBoss is not trying to provide dynamic typing for the user, we’re trying to take a statically typed interface that the user defines and tunnel it over a generic construct. We are neither assigning type at runtime, nor are we augmenting types at runtime. The JBoss interceptors do not care or even interact with the arguments or return type of a method invocation. Yes, the transport layer need to use Java Serialization to marshal and unmarshal these objects, but, last I heard, reflection != dynamic typing. Even if JBoss’s use of proxies fell under the Andy Oliver definition of dynamic typing our use of it still does not fall under my beef with Ruby and other dynamically typed languages that don’t require type declarations. Our use of these constructs does not prevent me from using any of the powerful tools available in Intellij and Eclipse for refactoring or analyzing JBoss’s code base.

JBoss AOP and dynamic typing

JBoss AOP does try to mimic some of the features of dynamically typed languages. Or, as Andy would say, it tries to work around the fact that Java isn’t dynamically typed. Specifically, introductions and mixins. It would be cool if Java made it easier for JBoss AOP to provide this type of feature. BUT….not at the expense of relaxing type safety.

Could care less about performance Andy

And, yo Andy, when did I ever say in my blog I didn’t like languages like Ruby because they weren’t compiled? I don’t align myself to any performance debate when comparing interpretted or JITed dynamically typed languages. The debate sounds too similar to the C++/C vs. Java junk that flew around in the late 90’s. In any database or networked application, any overhead Ruby et al. have will probably be negligible compared to DB access. CPU power is cheap anyways.

Why Groovy is different

Now, in my last statement in Go Away Ruby blog, I talked about pushing Groovy over Ruby. Groovy is cool because you can write pure type-safe Java and get the zero turnaround. You get much of the nice syntax sugar that the Ruby guys have. Here’s an idea, what if we strip down Groovy and pull out all the untype-safe (vocab again 😉 ) things to get Dynamic Java?

Can I go back to my vacation?

Anyways, Andy now that you have proved how smart you are and what an idiot I am, can I go back to my vacation?

Standardize Spring in EE 6

23 Comments

Back in 2004 JBoss had a tough decision to make. Should we keep Hibernate proprietary and under our sole control? Or should we bring it to a standards body? You know the decision we made. I think Spring and Interface 21 are at a similar crossroads, whether they know it or not. I’d like to call on Interface 21 to bring core Spring IoC to EE 6. Here’s why its a win-win situation for everybody.

Better business for Interface 21

I personally think that the main reason I21 hasn’t thought about standardizing Spring is because they are worried it will hurt their business. We had the exact similar fear with Hibernate. What would happen if we standardized Hibernate and gave the opportunity to vendors like Oracle and BEA to enter the ORM space and threaten our growing strangle hold on ORM frameworks? The reality of the situation was that there was a shrinking, but still very large, set of users out there still using CMP. Many of these organizations were married to standards and wouldn’t go proprietary, even though Hibernate was open source. What ended up happening was that when we brought Hibernate to the EJB 3.0 and JPA specification, Hibernate was recognized immediately as a migration path to EE 5. Hibernate downloads skyrocketed along with Hibernate related business. I just know that Spring and Interface 21 would notice similar gains if they aligned with EE 6.

The Spring community will probably scoff at any suggestion that the EJB user base is still large enough to make any impact on things, but this is just not the case. Yes, Spring has a large community, but EE 5 stopped much of the bleeding and breathed new life into the EJB specification. I know this because I’ve been out there. There’s also these compelling facts about EJB 3 momentum that I posted on a TSS thread back in June.

Better for the Spring community

Let’s face it, Spring is not a kernel. It has no deployment model. It is dependent on bootstrapping itself through the WAR init process, manually, or by proprietary app server specific init classes. It has no classloader scoping, delegating it to the application server it is running in. The Spring guys know this is a weakness of theirs, which is why they are so keen to align themselves with OSGi. They desperately need a standardized kernel to build their own stack. If Spring was brought to EE 6, they would get this deployment model they so thirst for. Not only this, but it would be even easier, more consistent, and simpler to package and deploy Spring components within other application servers like what we do with the JBoss Spring Deployer. The Spring community would also get the benefit of mixing and matching Spring technology with EE component models.

Now, a bit more touchy non-technical subject is the idea that Spring is controlled by one vendor. Yes, its open source, but, IMO, JBoss history proves that a vendor can maintain tight control over its space even if there is defection and forking. Way back in the day, people also complained of the stranglehold Marc Fleury had on JBoss. The thing is, I thought our users were isolated from any real or imagined evil we might inflict on the open source Java community because we were standards base. This isn’t so with Spring. Spring is now VC funded which means its founders and investors are looking for an exit strategy and payday event. There were recent rumors of acquisition we heard as well before they announced this funding. Yes, this sounds a lot like FUD from me, but it is just the plain reality of the software business. Having Spring standardized would isolate the Spring community from the mess of any acquisition, IPO, founder exit, or going out of business fire sale. Any real or imagined mess 😉

Better for Java EE

Although EE 5 added some IoC capabilities, its still both verbose and incomplete. For instance, you cannot define graphs of pojos within XML and inject it into an EE components. This limits EE to having to solely work with primitives when doing configuration. Not very flexible. Beyond technical reasons, having Spring standardized would make EE 6 a compelling platform to migrate to just like annotations and Hibernate standardization made EE 5 exciting. Bringing the weight of the Spring community into EE would greatly strengthen and unify the Java enterprise space.

Unification

Before EE 5, you had division in the Java ORM world. You had the CMP crowd: big, but legacy. The JDO crowd: noisy, but irrelevant. And the Hibernate crowd: large, de facto, but proprietary. What JPA did was get everybody together and start showing a unified path and vision for the Java ORM space. I think Spring and EJB are in a very similar situation and we would get similar benefit of joining them.

So Rod, Bill Shannon this is good for everybody, so lets get it done.

Patriots will also be tainted

1 Comment

The news that Rodney Harrison of the New England Patriots was suspended for using HGH really shook me.  Harrison was my favorite player on the Pats. My heart is broken.  One report I heard said that he had been using it the past 2 years to recover from the serious knee and shoulder injuries he had sustained.  Although Harrison took the suspension like a man and admitted to wrong doing (he didn’t have to do this), a more honorable action would have been to just plain retire.

The bigger question is, how will the Patriots organization react to this?  If the Patriots do not release Harrison, Belichick and Kraft will also be tainted. You can’t proclaim yourself the model franchise in the NFL and accept such behavior. I’m a 15 year season ticket holder. I want the Patriots to win another superbowl, but not at the expense of the franchise’s image.   As it is, the 2003 and 2004 championships are going to have an asterix next to them.

Go away Ruby

18 Comments

I’ve been reading the RESTful Web Services book. I like it a lot. The only thing I don’t like is that there is too much Ruby in it. Ruby, please, go away. Might be a good scripting language, I don’t know, but to push Ruby or any typeless language for that matter as the way to do things, is just plainly irresponsible. Hey, I’ve been there. Done projects in Perl, Tcl, and Python. The 1st few weeks of the projects are highly productive. You are loving life. Then you find that you need to refactor. You need to search for usages of an object, oh, guess what, you’re screwed. Its funny to me to see that the people pushing these things are usually book writers, or get-in-get-out consultants.

Using a scripting language is like going to McDonalds. The food is quick and tastes great, but the time you spend on the toilet after just isn’t worth the whole experience. Yes, scripting gives you zero turn around development. But, if the industry is going to move to scripting, let’s rally around something type safe. How about Groovy? Sure, it has its typeless aspects, but it doesn’t stop you from doing pure type safe code. The mass of Java programmers out there can easily switch between it and Java. Or even better, improve Java (and Java EE for that matter) to make it closer to zero turn around. For example, adding the ability for schema changes in java.lang.instrument or even silly things like simplifying the package structure in Java EE.

Older Entries Newer Entries