Archive for the 'Theory' Category

Should objects be responsible for their own stubbing?

I’m an advocate of TDD (test driven development) and I try too use it all the time when I’m coding. I have gotten accustomed to using JMock for a lot of my testing as most of what I test are servlets and such which require quite a bit of setup (HttpServletResponse, HttpServletRequest etc). The one thing I don’t like though is that using jmock exposes too much of the inner workings (or expectations of the inner workings) of the system to be flexible enough for rapid design. What I mean by this is that when I’m coding TDD style, I write my test case first and as I do I am thinking about how I may setup the class interface etc… Jmock forces me to setup certain expectations in advance (not with a gun to my head but pretty close) about how the code will actually implement the solution.

For example say I’m writing a login servlet called LoginServlet. This servlet class has a method called “doPost” that takes a ServletRequest and ServletResponse. My test case begins like this…

public void testLoginWithValidCredentials()throws Exception{   String email = "";String pass = "abc123";

StubRequest req = new StubRequest();








Now I knew in advance that I was going to need a session object because I’m putting something on it after the login; what that is and how it works are unknown at the moment. Also at this point I don’t really have any expectations for my test case. I guess my expectation is that after executing loginServlet.doPost(…) that there will be some new information on the Session object. Thats about all I know to be true. So we can pull the session off the request object afterward and check that its there…. or using the JMock way we can set an expectation that the mockHttpSession receives a setAttribute message once with some data (At this point I have decided that I will store an Account object on the session). So we create our JMock expectation:

**Note:  I created an account instance object with some test data

Great, now we can know for sure that the info was set to the session. But how to we get that info?
All of a sudden I need to make all sorts of assumptions about how the code is going to be implemented instead of actually implementing it. I’m sure I’m just missing something here but if the way I get the data is by creating a LoginController instance inside the servlet then I need a way to control what comes out of that controller from the test case. Ok, so I could add an overloaded constructor to my Servlet that takes a LoginController instance and then store that inside the servlet for use during the doPost call… my gut tells me that may be the wrong thing to do. Lets try it out and make sure….

public void testLoginWithValidCredentials()

 throws Exception{		LoginControllerStub loginControllerStub = new LoginControllerStub();


loginServlet = new LoginServlet();


String email = "";

 	String pass = "abc123";

StubRequest req = new StubRequest();





loginServlet.doPost(req, response);


Now we need to fill in the login servlet code…

public class LoginServlet extends HttpServlet {
	private LoginController loginController = null;
	public void setLoginController(LoginController lc){
		this.loginController = lc;
	protected LoginController getLoginController(){
			this.loginController = new LoginController();
		return this.loginController;
	public void doPost(HttpServletRequest req, HttpServletResponse res) 
	throws ServletException, IOException {
		String email = req.getParameter("email");
		String password = req.getParameter("password");
		LoginController loginController = getLoginController();
		Account account = loginController.getAccount(email, password);
			// successful login
			req.getSession().setAttribute(Account.class.getName(), account);
			// something was wrong with the creds

And the test passes…. Hmmm maybe there is a clean way to do this after all….
The power of blogging wins again. This is really just a ramble run amok, if you have comments please send them to me.

WebService DataBase

Data Persistence as a Web Service


Imagine all you had to do to store and retrieve data in object form was to have:


Object obj = new Object();;


and all the gory details about how it is stored could be ignored (sort of). In the java world and to some extent the .Net world you could use hibernate as it does a good job of solving the O/R Mapping problem. However it is still a not an ideal solution from a programmer perspective because its not transparent and can clutter up your business logic to some degree with all the DAO (data access objects) you need to write.


Would it not be great to take the approach that DB4O took with their object database ( with their tiny footprint object database engine you can almost transparently persist and retrieve your objects. But its a little awkward to setup access to a shared version of the database. (see the db40 documentation for an explanation) After reading how it works think about how you might achieve this for a web application that has separate helper processes running on remote machines accessing the same database file?


It would be great to be able to have a database as a web service. A web service that allowed you to simply send a package of data and store it, retrieve it thought some criteria and filter, delete it and merge it seamlessly with other data available in its context.


What if the language of the transaction was simple and contained only two chunks of information:


  1. The object data itself (ie:

      1. String baz = “some string”;

        Integer yo = 103423;

    1. class foo extends object{


  2. The meta data about this object:


      #SUBGRAPH:{ child[0]=baz:type=String




This would represent a self descriptive object that could be stored and indexed. Ah, but now comes the clincher. What if you have an object graph that needs to be stored and has interdependencies etc. Well thats a bit of an implementation detail but it would not be unreasonable to predict that some form of Meta-Meta-Data could form the foundation of the storage mechanism. If you take a look at the RDF standard it defines a way that definitions of “things” can be referenced by other “things” and this forms the basis of the Semantic web theory. I think that it would be possible to apply the same principals against the storage and retrieval with in a limited score with unbounded parameters. What I mean by this is that it would run off one system (limited scope) but its data constraints would be limitless (unbounded). I think also that this can be achieved using some combination of strongly typed languages and weakly typed languages.

More to come as I think about this some more…