Tag Archives: Grails

How to rerun BootStrap with grails without restarting server?

You can do this with the console plugin. It is useful for running ad-hoc code inside a running server.

To rerun your BootStrap init closure, browse to the web-based console at http://localhost:8080/appname/console. Enter the following in the console:

def servletCtx = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext
def myBootstrapArtefact = grailsApplication.getArtefacts(‘Bootstrap’)[-1]
myBootstrapArtefact.referenceInstance.init(servletCtx)


 

ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

How to access Grails configuration?

You can access grails configuration in following ways:

1. In Controller :
class DemoController {
def grailsApplication
def demoAction = {
def obj = grailsApplication.config.propertyInConfig
}
}

2. In services :
class DemoService {
def grailsApplication

def demoMethod = {

          def obj = grailsApplication.config.propertyInConfig

}

}
3. In taglib :

class DemoTaglib {
def grailsApplication
static namespace = “cd”
def demoMethod = {
def obj = grailsApplication.config.propertyInConfig
out << obj
}

}

You can call this method of taglib in view as <cd:demoMethod/>
4. In view :
<html>
<head><title>Demo</title></head>
<body>
${grailsApplication.config.propertyInConfig}
</body>
</html>

   


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

Difference between getAll, findAll and list in Grails?

    getAll is an enhanced version of get that takes multiple ids and returns a List of instances. The list size will be the same as the number of provided ids. If some of the provided ids are null or there are no instances with these ids, the resulting List will have null values in those positions.

    findAll lets you use HQL queries and supports pagination.  It finds all of domain class instances matching the specified query.

    list finds all instances and supports pagination.

 


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

How to execute code depending on environment you are in?

You can execute code depending on environment you are in following ways:

In Bootstrap:

import grails.util.Environment
class BootStrap {
        def init = { servletContext ->
         if (Environment.current == Environment.DEVELOPMENT) {
         // insert Development environment specific code here
        } else
        if (Environment.current == Environment.TEST) {
         // insert Test environment specific code here
       } else
      if (Environment.current == Environment.PRODUCTION) {
      // insert Production environment specific code here
       }
    }
}   

In Controller:

import grails.util.Environment
class SomeController {
         def someAction() {
              if (Environment.current == Environment.DEVELOPMENT) {
               // insert Development environment specific code here
              } else
              if (Environment.current == Environment.TEST) {
              // insert Test environment specific code here
              } else
            if (Environment.current == Environment.PRODUCTION) {
           // insert Production environment specific code here
           }
            render “Environment is ${Environment.current}”
         }
}

In Views:

<g:if env=”development”>
We are in Development Mode
</g:if>
<g:if env=”production”>
We are in Production Mode
</g:if>
<g:if env=”test”>
We are in Test Mode
</g:if>


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

How to integrate CKEditor with grails?

For integrating CKEditor with Grails you have to do following :

1. Installation:

grails install-plugin ckeditor

2. Usage in GSP:

add following in head section of your GSP,

    <head>
       …
      <ckeditor:resources/>
      …
      </head>

and in your page add following,

     <ckeditor:editor name=”myeditor” height=”400px”  width=”80%”>
           ${initialValue}
    </ckeditor:editor>

3. Configurations:

You have to do some configuration for file manager in config.groovy file as shown below:

ckeditor {
               config = “/js/myckconfig.js”
               skipAllowedItemsCheck = false
               defaultFileBrowser = “ofm”
upload {
              basedir = “/uploads/”
             overwrite = false
link {
            browser = true
           upload = false
           allowed = []
           denied = ['html', 'htm', 'php', 'php2', 'php3', 'php4', 'php5',
                                 'phtml', 'pwml', 'inc', 'asp', 'aspx', 'ascx', 'jsp',
                                 'cfm', 'cfc', 'pl', 'bat', 'exe', 'com', 'dll', 'vbs', 'js', 'reg',
                                 'cgi', 'htaccess', 'asis', 'sh', 'shtml', 'shtm', 'phtm']
}
image {
           browser = true
           upload = true
          allowed = ['jpg', 'gif', 'jpeg', 'png']
          denied = []
}
flash {
          browser = false
          upload = false
          allowed = ['swf']
          denied = []
        }
   }
}

4. Advanced topics:

  • Internal URI’s customization:

It is possible to customize the URI’s used to invoke the plugin’s connectors,

ckeditor.connectors.prefix = “/my/app/ck/”

  • Custom upload types:

You can customize upload types add following in above code snippet,

 …

upload {
     …
          avatar {
                 browser = true
                 upload = true
                 allowed = ['gif', 'jpg']
                 denied = ['exe', 'sh', 'cgi']
            }

}

 


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

How to override mail address?

Situation may arise where we want to send mails to a different mail id in development and  production mode.For this  Grails provides option of overriding mail so that all mails are send to a common mail id.

In config.groovy do following:

environments {
development {
grails.logging.jul.usebridge = false
grails {
mail {
host = “smtp.gmail.com”
port = 465
username = “sent_from_mail_id”
password = “password”
props = ["mail.smtp.auth":"true",
"mail.smtp.socketFactory.port":"465",
"mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
"mail.smtp.socketFactory.fallback":"false"]
overrideAddress=”sent_to_mail_id”
}
}

}

production {
grails.logging.jul.usebridge = false
grails {
mail {
host = “smtp.gmail.com”
port = 465
username = “sent_from_mail_id”
password = “password”
props = ["mail.smtp.auth":"true",
"mail.smtp.socketFactory.port":"465",
"mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
"mail.smtp.socketFactory.fallback":"false"]
overrideAddress=”sent_to_mail_id”
}
}

}

}


 

ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

How to restrict Url access based on roles in Grails?

In Grails, you can restrict url access depending on role of user.

1. In Controller:

In controller, you can you can restrict access to methods (i.e. pages) by using @secured annotation as shown below:

import grails.plugin.springsecurity.annotation.Secured

@Secured(["ROLE_ADMIN"])
def index(Integer max) {
          …
}

In above example, only user having ROLE_ADMIN will be able to access index page.Likewise, you can give multiple roles also as shown below:

@Secured(["ROLE_ADMIN","ROLE_ORG_ADMIN"])

2. In View:

You can restrict access on view using SecurityTagLib as shown below:

<sec:ifAnyGranted roles=”ROLE_ADMIN,ROLE_ORG_ADMIN”>
<a href=”${createLink(controller:’leave’ ,action: ‘teamLeaveCalendar’)}”>Team Leave calender</a>
</sec:ifAnyGranted>

Like <sec:ifAnyGranted></sec:ifAnyGranted>, you can use  <sec:ifAllGranted></sec:ifAllGranted>, <sec:ifNotGranted></sec:ifNotGranted>


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

How to attach multiple attachments with mail in grails?

For sending mail you can use Asynchronous Mail Plugin.

1. Install Asynchronous Mail Plugin :

Dependency:  compile “:asynchronous-mail:1.2″

2. Usage :

Add following:

import grails.plugin.asyncmail.AsynchronousMailService

     AsynchronousMailService asynchronousMailService

3. In your method to add multiple attachment create map as shown below,

Map<String,ByteArrayOutputStream> attachments = new HashMap<String,ByteArrayOutputStream>();

ByteArrayOutputStream bytes0,bytes1,bytes2; // attachments

attachments.put(‘key0′,bytes0);

attachments.put(‘key1′,bytes1);

attachments.put(‘key2′,bytes2);

asynchronousMailService.sendMail {
multipart true
to emailID
subject emailSubject
html emailBodyContent
attachBytes “Approval”, “application/pdf”, attachments

}

attachBytes is used to attach attachments.


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

 

 

Connecting MySql to Grails

By default, Grails applications are configured to use an in-memory HSQLDB database.

Steps to connect to MySql database:

1. Create database to be used.

create database database_name

2. Create your application.

grails create-app app_name

3. After creating app, go to BuildConfig.groovy file and add following:

     dependencies {

         runtime ‘mysql:mysql-connector-java:5.1.24′

}

Uncomment maven repository if it is commented.

4. Now update datasource.groovy file.

 dataSource {
   pooled = true
driverClassName = “com.mysql.jdbc.Driver”
dialect = “org.hibernate.dialect.MySQL5InnoDBDialect”
//logSql=true
}

5. For environment specific settings:

      environments {
                     development {
                                  dataSource {
                                            dbCreate = “update” // one of ‘create’, ‘create-drop’, ‘update’, ‘validate’, ”
                                            url = “jdbc:mysql://localhost/database_name?                     useUnicode=yes&characterEncoding=UTF-8&autoReconnect=true”
                                            username = “XXX”
                                            password = “XXX”
                                                   }
                      }
test {
                     dataSource {
                               dbCreate = “update”
                                url = “jdbc:mysql://localhost/database_name?useUnicode=yes&characterEncoding=UTF-8&autoReconnect=true”
                               username = “XXX”
                               password = “XXX”
                      }
}
production {
                    dataSource {
                               dbCreate = “update”
                               url = “jdbc:mysql://localhost/database_name?useUnicode=yes&characterEncoding=UTF-8&autoReconnect=true”
                              username = “XXX”
                              password = “XXX”
                              pooled = true

                            }
             }
      }
}

 


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.

 

 

How Grails MVC works?

Grails is an MVC platform that’s used for developing MVC applications.

The architecture and different components used in the Grails MVC application is shown as below:

Grails MVC Architecure

 

It shows the request flow on a Grails MVC application.

  • Model:

Model is a Java object which stores the data that can be used by       the controllers and views. Grails provides you a binded mechanism that help you references your model from the grails UI components like g:each.

Grails provides an inline validation in the model. Grails domain class can express domain constraints simply by defining a public static property constraints that has a closure as a value.

  • Controller:

It is a servlet which handles all the request from the front end. In general, Grails servlet extends Spring’s DispatcherServlet to bootstrap the Grails environment (SimpleGrailsController) for handling the requests. SimpleGrailsController delegates to a class called SimpleGrailsControllerHelper that actually handles the request.

A proper name for your controller must be ended with the controller phrase, that would help Grails to discover the controllers conventionally.

  • View:

Groovy server pages is responsible for rendering the models. Grails uses GroovyPagesTemplateEngine for rendering of GSP views as those views support the concept of custom tag libraries. You can access the g tags directly within your GSP without any need of importing it. A lot of ready-made tags are provided for your use. Grails g library provides you ability of accessing data binded and domain class associations.


ProsperaSoft offers Grails development solutions. You can email at info@prosperasoft.com to get in touch with ProsperaSoft Grails experts and consultants.