February 15th, 2010

For those using MYSQL and have either updated to grails version 2 or starting with grails 2 and have run into this exception then this solution works perfectly well for me.

The problem is releated to Grails running out of connections to MySQL over time, & not freeing stale connections.  I believe it happens when there hasn’t been activity for over 8 hours, which in my case happened everyday due to the overnight period.

So what we should be doing is managing our own database connection pool.   I use Tomcat 6 on my production servers so the following solution is specifically for tomcat 6.

What we need to do is first change our application configuration so it sets up a database connection pool through tomcat.  And secondly we need to tweak the configuration so that we validate the connection is present periodically and removed stale connections.

The first thing then is to define the connection pool in <your application dir>/web-app/META-INF/context.xml

A typical context.xml would be :

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/MyApplication">
<Resource
 auth="Container"
 driverClassName="com.mysql.jdbc.Driver"
 maxActive="20"
 maxIdle="10"
 maxWait="-1"
 removeAbandoned="true"
 name="jdbc/myAppsPool"
 type="javax.sql.DataSource"
 url="jdbc:mysql://localhost:3306/Database_Name"
 username="user"
 password="password"
 validationQuery="SELECT '1'"
 removeAbandonedTimeout="60"
 logAbandoned="true"/>
</Context>

This alone will create the necessary database connection pool when you application is deployed.

All thats left to do now is to change your datasource configuration to refer to the connection pool so in your DataSource.groovy file, locate the production section and alter it to refer to the new pool, e.g :

production {
  dataSource {
    pooled = false
    dbCreate = "update"
    jndiName = "java:comp/env/jdbc/myAppsPool"
  }
}

That should solve any of those DataAccessResourceFailureExceptions from now on.[

October 23rd, 2009

Below are regex patterns to match against valid latitude and longitude.

Both formats are based on Decimal coordinates.

Latitude range is from -90 to +90

Longitude from -180 to +180

For Latitude the regex pattern is

(-?[0-8]?[0-9](\.\d*)?)|-?90(\.[0]*)?

For Longitude use

(-?([1]?[0-7][1-9]|[1-9]?[0-9])?(\.\d*)?)|-?180(\.[0]*)?

This will also restrict the decimal values being > 0 for both +- 90′ and +- 180

October 30th, 2008

The Scenario:

You have an application that uses Simple MAPI (from Outlook) to send Faxes.  The I.T. department then introduce SBS / Exchange Server into the company to manage users email accounts. Now Faxing no longer works.You get a NDR everytime you try and send.   Strange though as you can still send directly through outlook so your software gets the blame.

Sample Non Delivery Report:

  Your message did not reach some or all of the intended recipients.

Subject:  E-MAIL FROM XXXXXXXX
       Sent:     10/25/2008 10:21

The
following recipient(s) could not be reached:

       '0XXXXXXXXXXXX' on
10/25/2008 10:21
The message could not be delivered because the
recipient's
destination email system is unknown or invalid. Please check the
address
and try again, or contact your system administrator to
verify
connectivity to the email system of the recipient.

<sbs.domain #5.1.2>

The Solution:

The problem is due to Exchange attempting to send the fax BEFORE the Fax transport gets a chance to.

To fix this, you need to make a registry modification on each workstation affected.

So in REGEDIT navigate to HKEY_CURRENT_USER\Software\Microsoft\Office\Common\MailSettings

and ADD a new DWORD key named StrictAccountOrder   

Set the value to 1

You may have to restart Outlook for the change to take affect but that should solve the problem.  Outlook will correctly identify the Fax transport before trying to send the Fax via Exchange.

Further reading can be found here http://support.microsoft.com/kb/319820


About Me

Welcome to my blog. Here you'll find mainly work related content, a suppository for all my notes which otherwise would end up on a post it note.