Tuesday, June 14, 2011

java.net.BindException: Permission denied on Mac OSX

problem:
running any java app that listens to a port

Caused by: java.net.BindException: Permission denied

at java.net.PlainSocketImpl.socketBind(Native Method)

at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)

at java.net.ServerSocket.bind(ServerSocket.java:328)

at java.net.ServerSocket.(ServerSocket.java:194)

at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:170)

at org.apache.activemq.transport.tcp.TcpTransportServer.bind(TcpTransportServer.java:135)

... 44 more


solution:
1. use sudo
or
2. listen to a port that is outside of 0 to 1023

Thursday, June 9, 2011

Hibernate + PostgreSQL + Table Partitioning

Problem: using Hibernate to insert a new entry into a partitioned table on PostgreSQL would get the following exception:


2011-06-08 16:37:07,725 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] -

org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1


Solution:

use a @SQLInsert(sql = "insert into table (col_1, col_2) values (?, ?)", check=ResultCheckStyle.NONE)


more solutions provided here:

http://www.redhat.com/f/pdf/jbw/jmlodgenski_940_scaling_hibernate.pdf

Wednesday, June 8, 2011

Hibernate (Annotation) + PostgreSQL + Sequence Generator

Problem: The java class generated by Hibernate Code Generator does not know anything about the sequence defined on PostgreSQL.

Solution: use the combination of @javax.persistence.GeneratedValue & @org.hibernate.annotation.GenericGenerator

@Id

@Column(name = "id", unique = true, nullable = false, insertable=false)

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "IdSeqGeneratorName")

@org.hibernate.annotations.GenericGenerator(name = "IdSeqGeneratorName", strategy = "sequence", parameters = { @Parameter(name = "sequence", value = "the_postgres_seq") })

public long getId() {

return this.id;

}



or

@Id

@Column(name = "id", unique = true, nullable = false, insertable=false)

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tcp_audit_seq_name")

@SequenceGenerator(name = "tcp_audit_seq_name", sequenceName = "tcp_audit_seq", allocationSize = 1)

public long getId() {

return this.id;

}

Monday, November 15, 2010

Waiting for changelog lock.... at SpringSource Tool Suite 2.5.1

problem: Starting up tc Server hangs at "Initializing Spring root WebApplicationContext" and "Waiting for changelog lock...."

solution: Downgrade from STS 2.5.1 to 2.5.0. Unfortunately I don't have time to pinpoint exactly what causes the problem, but at least I can keep writing code.

Friday, November 12, 2010

problem:


using Quartz + Spring + PostreSQL


55028 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource

55029 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] ERROR org.quartz.core.ErrorLogger - An error occured while scanning for the next trigger to fire.

org.quartz.JobPersistenceException: Couldn't acquire next trigger: Couldn't retrieve trigger: Bad value for type long : [See nested exception: org.quartz.JobPersistenceException: Couldn't retrieve trigger: Bad value for type long : [See nested exception: org.postgresql.util.PSQLException: Bad value for type long : ]]

at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2789)

at org.quartz.impl.jdbcjobstore.JobStoreSupport$36.execute(JobStoreSupport.java:2732)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3763)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2728)

at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:264)

Caused by: org.quartz.JobPersistenceException: Couldn't retrieve trigger: Bad value for type long : [See nested exception: org.postgresql.util.PSQLException: Bad value for type long : ]

at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveTrigger(JobStoreSupport.java:1571)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveTrigger(JobStoreSupport.java:1547)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2767)

... 4 more

Caused by: org.postgresql.util.PSQLException: Bad value for type long :

at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSet.java:2736)

at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:2032)

at org.postgresql.jdbc2.Jdbc2ResultSet.getBlob(Jdbc2ResultSet.java:52)

at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBlob(AbstractJdbc2ResultSet.java:337)

at org.apache.commons.dbcp.DelegatingResultSet.getBlob(DelegatingResultSet.java:565)

at org.apache.commons.dbcp.DelegatingResultSet.getBlob(DelegatingResultSet.java:565)

at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.getObjectFromBlob(StdJDBCDelegate.java:3462)

at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectTrigger(StdJDBCDelegate.java:2132)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveTrigger(JobStoreSupport.java:1553)

... 6 more


Solution:

Use the PostgresSQL driver delegate class


Replace:


org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate


with


org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

Wednesday, November 10, 2010

Configure memory settings of SpringSource Tool Suite (STS) on Mac OSX

springsource.2.5.0.RELEASE/sts-2.5.0.RELEASE/STS.app/Contents/MacOS/STS.ini

-startup
../../../plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.1.R36x_v20100810
-product
com.springsource.sts.ide
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms768m
-Xmx2048m
-XX:MaxPermSize=512m
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts

Wednesday, October 27, 2010

Using SpringSource Tool Suite (STS) Template

1. Go to New -> Other


2. Under SpringSource Tool Suite -> Spring Template Project

3. enter Project name, top-level package

4. choose the type of project needed


5. download the template if it is executed for the first time

6. project skeleton generated


7. basic definition of Hibernate related beans