1.6.11

Moving Glassfish

When you decide to move your Glassfish installation from one folder to another folder/computer probably you will get errors from osgi like;

WARNING: Failed to install
file:/export/home/luca/java/as/glassfish-v3.1/glassfish/modules/XXXX.jar
org.osgi.framework.BundleException: Bundle symbolic name and version are
not unique: org.glassfish.XXXXXX

All this errors are about osgi cache system. After you delete;

"glassfish-v3/glassfish/domains/domain1/osgi-cache/felix/"

everything should be fine.

3.5.11

Egit and Github on Windows

Finally I got. Over lots of issues (like "no adress associated with name" or "auth failed" from eclipse) finally I can use Github with eclipse on windows. We apply first steps from eclipse forums guidelines and then combine it with classical console commands.

1. Set up the ssh key stuff
a. Download and install mysys git according to the github instructions at http://help.github.com/win-git-installation/
b. In C:/Users/you/ssh hide any existing keys (id_rsa and id_rsa.pub) in a subdirectory. If the ssh directory does not exist, create it. Of course, "you" is your username as the OS knows you.
c. From the start menu, run Git-Bash command shell (a regular DOS command shell will not work).
d. In the Git-Bash shell generate an rsa key based on your email (the one you registered at github):


$ ssh-keygen -t rsa -C "you"


and enter your pass phrase and confirm when asked.
e. The previous step should have created C:/User/you/ssh/id_rsa.pub which you can now open in a text editor and copy. At github, go to account settings, SSH Keys, add a key and paste this in the key box.
f. In Git-Bash again (notice the back-ticks in the next line):


$ eval `ssh-agent`
$ ssh-add C:/User/you/ssh/id_rsa
$ ssh git

2. From Eclipse share your project with Egit and then open Git-bash and go to your directory of your apps in your workspace. And now two more steps;

$ git remote add origin git@github.com:{your_user_name}/{your_project_name}.git
$ git push -u origin master
 
After you open Eclipse again and refresh you can see your remote repo under the git-repo view.

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 .

19.11.09

Spring test masking exceptions

Spring test module has lots of benefits. Bu some times it may be a bit confusing.

When Using spring test module it mostly produces only one exception for all exceptions. As below

java.lang.NoSuchMethodError:
org.junit.runner.notification.RunNotifier.testAborted(Lorg/junit/runner/Description;Ljava lang/Throwable;)V

exception masking all others and getting debug process harder for me. Finally I can figure out the problem. If you use spring 2.5.x series you have to use Junit 4.4 . If you use 3.0 then Junit 4.7 will suits for u.