We are evaluating GORM as a replacement out hibernate code in backend, my messages.properties file is not getting loaded...... what am i doing wrong?
Here is my script and output :
$cat GORM_TEST.groovy**
import grails.orm.bootstrap.*
import grails.persistence.*
import org.springframework.jdbc.datasource.DriverManagerDataSource
import org.h2.Driver
init = new HibernateDatastoreSpringInitializer(Person)
def dataSource = new DriverManagerDataSource(Driver.name,
"jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE", 'sa', '')
init.configureForDataSource(dataSource)
Person p1 = new Person();
p1.name = "Vinay"
p1.save();
Person p2 = new Person();
p2.name = ""
if (! p2.validate() ) {
p2.errors.allErrors.each {
println it.dump()
}
}
p2.save();
println "Total people = " + Person.list()`
$cat messages.properties
person.name.blank=BLANK VALUE PROVIDED?????
person.name.blank.name=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
I added following dependencies to CLASSPATH dependencies to CLASSPATH
org.grails:grails-datastore-gorm-hibernate4:3.1.0.RELEASE
org.grails:grails-spring:2.4.0
$groovy GORM_TEST2.groovy
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Hibernate: insert into person (id, version, name) values (null, ?, ?)
<org.springframework.validation.FieldError@71be79f5 field=name rejectedValue=
bindingFailure=false objectName=Person codes=[Person.name.blank.error.Person.name,
Person.name.blank.error.name, Person.name.blank.error.java.lang.String,
Person.name.blank.error, person.name.blank.error.Person.name,
person.name.blank.error.name, person.name.blank.error.java.lang.String,
person.name.blank.error, Person.name.blank.Person.name, Person.name.blank.name,
Person.name.blank.java.lang.String, Person.name.blank, person.name.blank.Person.name,
person.name.blank.name, person.name.blank.java.lang.String, person.name.blank,
blank.Person.name, blank.name, blank.java.lang.String, blank] arguments=[name, class
Person] defaultMessage=Property [{0}] of class [{1}] cannot be blank>
Hibernate: select this_.id as id1_0_0_, this_.version as version2_0_0_, this_.name as
name3_0_0_ from person this_
Total people = [Person(Vinay), Person(Vinay), Person(Vinay), Person(Vinay),
Person(Vinay), Person(Vinay), Person(Vinay), Person(Vinay), Person(Vinay),
Person(Vinay)]
I tried putting messages.properties in ./grails-app/i18n/ as well as ./i18n but no help....
GORM uses Spring's MessageSource
concept for loading messages. When used standalone no MessageSource
is configured. It is up to you to provide one. You can do this by overriding the getBeanDefinitions
method:
init = new HibernateDatastoreSpringInitializer(Person) {
Closure getBeanDefinitions(BeanDefinitionRegistry beanDefinitionRegistry) {
def parentDefinitions = super.getBeanDefinitions(beanDefinitionRegistry)
return {
parentDefinitions.delegate = delegate
parentDefinitions.call()
messageSource(ResourceBundleMessageSource) {
basenames = ['file:messages']
}
}
}
}