9.12.10

Two PL/SQL Tips

To drop all tables that you create;

This command will drop all the user's tables:
To insert string into a clob or blob field;

24.11.10

Excluding empty strings from hibernate example criterion

Hibernate example criterion is a useful tool for search functions. Altough it is highly configurable there is no built in function for exclude empty strings from your criteria. I found solutions in hibernate forums. The trick is creating your own property selector and set it to your example instance;

7.8.10

Some more words on ScriptTagProxy and Restful Client with ExtJs

I wrote about ScriptTagProxy (STP) before [1]. AFAIK it is the only way to make cross domain calls in ExtJs. So at firt I thougt that it is also the only way to use cross domain Restful Web Services but using a Restful WS with ScriptTagProxy is impossible and here is why;

The working method of STP is simple. Under the hood it creates a script element in the document object [2]. Sets the URI of the script [3] and other stuff. Then it adds it adds it to the head element of the document, so browser get ( literally with GET method ) the script from another domain. Here is the code example that the logic is also used by ExtJs in the doRequest method of STP;
script = document.createElement('script');
  script.src = 'http://example.com/cgi-bin/jsonp?q=What+is+the+meaning+of+life%3F';
  script.id = 'JSONP';
  script.type = 'text/javascript';
  script.charset = 'utf-8';
  // Add the script to the head, upon which it will load and execute.
  var head = document.getElementsByTagName('head')[0];
  head.appendChild(script);

If you know a bit about Restful WS you already saw the problem. After head.appendChild browser GET the script. So there is nothing to do for using POST, PUT and delete method and there is no way to use a cross domain Restful WS with ExtJs. If you think using about XmlHttpRequest and Ajax manully there is also same problem as Patrick Donelan says;
Due to the Same Origin Policy that browsers impose on Javascript, the XmlHttpRequest object is prevented from communicating with external domains (it's an attempted security feature). There are known work-arounds, such as script tag injection (where you use the src attribute on html elements to trick the browser into communicating remotely) however this is limited to GET requests only so you're not going to be able to do much RESTful communication with it. (FYI this is implemented in Ext as the ScriptTagProxy class which is a drop-in for the HttpProxy class).
Your other options are to use Flash for cross-domain requests, or to wait for the W3C Access Control (which lets you make cross-site XmlHttpRequests) to be implemented by all the browsers.

It is posibble to make the request inside your domain to a java bean via JSP. But this is not a good workaround with performance issues also you can't use advantages of Ext.data.Store's restful features and you have to write and maintain so much code.

[1] http://dayonmars.blogspot.com/2010/07/extjs-calls-url-with-options-method.html
[2] You can read it as web page.
[3] Actually the script could be a data package which is surrounded by a functions name. For example; methodName("book": { "id": "1", "author": "Tom Clancy");

Referances;
http://neil.fraser.name/news/2009/07/27/
http://www.codeproject.com/KB/webservices/ExtJS_WebServices_Remote.asp
http://www.sencha.com/learn/Manual:RESTful_Web_Services

13.7.10

Benefits of @Repository annotation ( and Root of the hierarchy of data access exceptions ) in Spring Framework



There are a bunch of stereotype annotations in Spring. Most of time differences are not exactly known. For example we use @Component annotation for DAO classes for a long time in our company and it works. But we didn't know benefits of @Repository annotation till now.

If we want to summarize it, we can say that "By using @Repository annotation in DAO classes, different kinds of exceptions that belongs to many kinds of data access technologies will be transparently converted to standard DataAccessException classes of Spring"

Let's think about real life. In an enterprise project we may need more than one data access technologies like JPA, Hibernate or even JDBC. Each of them has its own benefits but all has their own exceptions. In that case exception handling can easily turns into a code hell.

Root of the hierarchy of data access exceptions adress this issue and gives us a bunch of classes that we can handle easily in a standart way. Thus we have a strong abstraction layer for data access exceptions and we can handle each exception case as we want.

Schema of data access exceptions classes is below;





[1] Root of the hierarchy of data access exceptions discussed in Expert One-On-One J2EE Design and Development. Please see Chapter 9 of this book for detailed discussion of the motivation for this package.

1.7.10

ExtJs calls url with OPTIONS method problem.

When I'm trying to create a Restful grid with ExtJs it calls url with OPTIONS method . I couldn't despite I explicityly define method as GET. After two days finally I find the solution ScriptTagProxy.

You can read explanation from ExtJs documentation;
"An implementation of Ext.data.DataProxy that reads a data object from a URL which may be in a domain other than the originating domain of the running page.

Note that if you are retrieving data from a page that is in a domain that is NOT the same as the originating domain of the running page, you must use this class, rather than HttpProxy."

But now there is another problem because documentation also says that;
The content passed back from a server resource requested by a ScriptTagProxy is executable JavaScript source code that is used as the source inside a script tag. In order for the browser to process the returned data, the server must wrap the data object with a call to a callback function, the name of which is passed as a parameter by the ScriptTagProxy.
 You have to send your data inside a  script. The name of the script is sending in the callback parameter of the URI like http://foo.com/bar?callback=methodName .