Merge pull request #102 from remast/master
* pull102: polishing Add exception translator for EclipseLink exceptions
This commit is contained in:
		
						commit
						e246010df7
					
				| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.orm.eclipselink;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.persistence.exceptions.EclipseLinkException;
 | 
			
		||||
import org.springframework.dao.DataAccessException;
 | 
			
		||||
import org.springframework.dao.support.PersistenceExceptionTranslator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * {@link PersistenceExceptionTranslator} capable of translating {@link EclipseLinkException}
 | 
			
		||||
 * instances to Spring's {@link DataAccessException} hierarchy.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Jan Stamer
 | 
			
		||||
 * @since 4.1
 | 
			
		||||
 * @see org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor
 | 
			
		||||
 */
 | 
			
		||||
public class EclipseLinkExceptionTranslator implements PersistenceExceptionTranslator {
 | 
			
		||||
 | 
			
		||||
	public DataAccessException translateExceptionIfPossible(RuntimeException ex) {
 | 
			
		||||
		if (ex instanceof EclipseLinkException) {
 | 
			
		||||
			return convertEclipseLinkAccessException((EclipseLinkException) ex);
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Convert the given EclipseLinkException to an appropriate exception from
 | 
			
		||||
	 * the {@code org.springframework.dao} hierarchy.
 | 
			
		||||
	 * @param ex EclipseLinkException that occurred
 | 
			
		||||
	 * @return a corresponding DataAccessException
 | 
			
		||||
	 * @see EclipseLinkUtils#convertEclipseLinkAccessException
 | 
			
		||||
	 */
 | 
			
		||||
	protected DataAccessException convertEclipseLinkAccessException(EclipseLinkException ex) {
 | 
			
		||||
		return EclipseLinkUtils.convertEclipseLinkAccessException(ex);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.orm.eclipselink;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.persistence.exceptions.EclipseLinkException;
 | 
			
		||||
import org.springframework.dao.UncategorizedDataAccessException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EclipseLink-specific subclass of UncategorizedDataAccessException, for
 | 
			
		||||
 * EclipseLink system errors that do not match any concrete
 | 
			
		||||
 * <code>org.springframework.dao</code> exceptions.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Jan Stamer
 | 
			
		||||
 * @since 4.1
 | 
			
		||||
 * @see EclipseLinkUtils#convertEclipseLinkAccessException(EclipseLinkException)
 | 
			
		||||
 */
 | 
			
		||||
@SuppressWarnings("serial")
 | 
			
		||||
public class EclipseLinkSystemException extends UncategorizedDataAccessException {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Create a new HibernateSystemException, wrapping an arbitrary
 | 
			
		||||
	 * {@link EclipseLinkException}.
 | 
			
		||||
	 * @param cause the HibernateException thrown
 | 
			
		||||
	 */
 | 
			
		||||
	public EclipseLinkSystemException(EclipseLinkException cause) {
 | 
			
		||||
		super(cause != null ? cause.getMessage() : null, cause);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.orm.eclipselink;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.persistence.exceptions.EclipseLinkException;
 | 
			
		||||
import org.springframework.dao.DataAccessException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper class featuring methods for Eclipse Link. Also provides support for
 | 
			
		||||
 * exception translation.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Jan Stamer
 | 
			
		||||
 * @since 3.2
 | 
			
		||||
 */
 | 
			
		||||
public abstract class EclipseLinkUtils {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Convert the given EclipseLinkException to an appropriate exception from
 | 
			
		||||
	 * the <code>org.springframework.dao</code> hierarchy.
 | 
			
		||||
	 * @param ex EclipseLinkException that occurred
 | 
			
		||||
	 * @return the corresponding DataAccessException instance
 | 
			
		||||
	 * @see EclipseLinkExceptionTranslator#convertEclipseLinkAccessException(EclipseLinkException)
 | 
			
		||||
	 */
 | 
			
		||||
	public static DataAccessException convertEclipseLinkAccessException(EclipseLinkException ex) {
 | 
			
		||||
		return new EclipseLinkSystemException(ex);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.orm.eclipselink;
 | 
			
		||||
 | 
			
		||||
import static org.junit.Assert.*;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.persistence.exceptions.DatabaseException;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Jan Stamer
 | 
			
		||||
 */
 | 
			
		||||
public class EclipseLinkExceptionTranslatorTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void wrongException() {
 | 
			
		||||
		EclipseLinkExceptionTranslator exceptionTranslator = new EclipseLinkExceptionTranslator();
 | 
			
		||||
		assertNull(exceptionTranslator.translateExceptionIfPossible(new IllegalArgumentException()));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
 | 
			
		||||
	@Test
 | 
			
		||||
	public void eclipseLinkException() {
 | 
			
		||||
		EclipseLinkExceptionTranslator exceptionTranslator = new EclipseLinkExceptionTranslator();
 | 
			
		||||
		assertNotNull(exceptionTranslator.translateExceptionIfPossible(DatabaseException.databaseAccessorNotConnected()));
 | 
			
		||||
		assertNotNull(exceptionTranslator.translateExceptionIfPossible(
 | 
			
		||||
				DatabaseException.databaseAccessorNotConnected()));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.orm.eclipselink;
 | 
			
		||||
 | 
			
		||||
import static org.junit.Assert.*;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.persistence.exceptions.DatabaseException;
 | 
			
		||||
import org.hibernate.HibernateException;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Jan Stamer
 | 
			
		||||
 */
 | 
			
		||||
@SuppressWarnings("serial")
 | 
			
		||||
public class EclipseLinkSystemExceptionTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void withNull() {
 | 
			
		||||
		EclipseLinkSystemException exception = new EclipseLinkSystemException(null);
 | 
			
		||||
		assertNull(exception.getCause());
 | 
			
		||||
		assertNull(exception.getMessage());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void createWithCause() {
 | 
			
		||||
		DatabaseException dbExceptionWithCause = new DatabaseException("my custom exception cause") {
 | 
			
		||||
		};
 | 
			
		||||
		EclipseLinkSystemException elSystemException = new EclipseLinkSystemException(dbExceptionWithCause);
 | 
			
		||||
		assertEquals(dbExceptionWithCause, elSystemException.getCause());
 | 
			
		||||
		assertTrue(elSystemException.getMessage().contains("my custom exception cause"));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void createWithNullCause() throws HibernateException {
 | 
			
		||||
		DatabaseException dbExceptionWithCause = new DatabaseException((String) null) {
 | 
			
		||||
		};
 | 
			
		||||
		EclipseLinkSystemException elSystemException = new EclipseLinkSystemException(dbExceptionWithCause);
 | 
			
		||||
		assertEquals(dbExceptionWithCause, elSystemException.getCause());
 | 
			
		||||
		assertTrue(elSystemException.getMessage().contains("null"));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.orm.eclipselink;
 | 
			
		||||
 | 
			
		||||
import static org.junit.Assert.*;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.persistence.exceptions.DatabaseException;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Jan Stamer
 | 
			
		||||
 */
 | 
			
		||||
public class EclipseLinkUtilsTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void withNull() {
 | 
			
		||||
		assertNotNull(EclipseLinkUtils.convertEclipseLinkAccessException(null));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testWithEclipseLinkException() {
 | 
			
		||||
		assertNotNull(EclipseLinkUtils.convertEclipseLinkAccessException(
 | 
			
		||||
				DatabaseException.databaseAccessorNotConnected()));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue