Que tal observar suas classes de dominio em um diagrama de classe de forma automatica? Hoje me confundi com as classes de dominio em um projeto, as classes tinham relacoes um pouco complicadas, e no apice da minha dor de cabeca tentando ver o projeto como um todo, chega um email do wiki do grails na minha caixa , mostrando uma nova atualizacao em um plugin, chamado "Class Diagram".Oque ele faz? O Plugin gera de forma automatica o diagrama de classe, possibilitando que voce veja no seu navegador acessando: "http://localhost:8080/SuaAplicacao/classDiagram:".Usando o Plugin (Como de costume instalar o plugin:grails install-plugin class-diagram)So precisamos baixar o graphviz no site : http://www.graphviz.org/Download..php , apos instalar e reiniciar o computador, basta rodar sua aplicacao e entrar na url. Facil, dentro do arquivo dataSource, coloque a seguinte linha:loggingSql = true Esses dias tive que desenvolver um software que teria sua base de dados propria , mas algumas consultas de alguns dados deveriam ser feitas atraves de views no banco de dados do cliente, estudei varias alternativas como o plugin DataSources, mas a melhor alternativa que encontrei foi criar um DataSource no Spring. Como? Super facil.. na pasta config temos um pasta spring e dentro dela temos um arquivo resources.groovy. O meu arquivo ficou assim : ( O codigo explica mais do que 1000 palavras ):import org.apache.commons.dbcp.BasicDataSource// Place your Spring DSL code herebeans = { dataSourceOracle(BasicDataSource) { driverClassName = "oracle.jdbc.OracleDriver" url = "jdbc:oracle:thin:@187.11.11.111:1521/BASE" username = "user" password = "pass"}}Depois precisamos baixar o .jar do JDBC e colocar na pasta lib (Mas isso nao e segredo para ninguem), e por fim e so utilizar a Data Souce!!!Novamente... como??O grails injeta automaticamente os resources, em um Service pelo proprio nome do atributo.. por exemplo e so declarar o atributo:def dataSourceOracleE... pronto utilizar o dataSource! Se voce ja tentou usar o Jquery Drap and Drop , com multi-touch e ficou fustrado, la vai a solucao:Copie esse script para o comeco da sua pagina! (function ($) { // Detect touch support $.support.touch = 'ontouchend' in document; // Ignore browsers without touch support if (!$.support.touch) { return; } var mouseProto = $.ui.mouse.prototype, _mouseInit = mouseProto._mouseInit, touchHandled; function simulateMouseEvent (event, simulatedType) { //use this function to simulate mouse event // Ignore multi-touch events if (event.originalEvent.touches.length > 1) { return; } event.preventDefault(); //use this to prevent scrolling during ui use var touch = event.originalEvent.changedTouches[0], simulatedEvent = document.createEvent('MouseEvents'); // Initialize the simulated mouse event using the touch event's coordinates simulatedEvent.initMouseEvent( simulatedType, // type true, // bubbles true, // cancelable window, // view 1, // detail touch.screenX, // screenX touch.screenY, // screenY touch.clientX, // clientX touch.clientY, // clientY false, // ctrlKey false, // altKey false, // shiftKey false, // metaKey 0, // button null // relatedTarget ); // Dispatch the simulated event to the target element event.target.dispatchEvent(simulatedEvent); } mouseProto._touchStart = function (event) { var self = this; // Ignore the event if another widget is already being handled if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) { return; } // Set the flag to prevent other widgets from inheriting the touch event touchHandled = true; // Track movement to determine if interaction