diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/Cable.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/Cable.java new file mode 100644 index 0000000000..e5cef2daab --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/Cable.java @@ -0,0 +1,43 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +import org.hibernate.annotations.GenericGenerator; + +/** + * @author Emmanuel Bernard + */ +@Entity +public class Cable { + @Id @GeneratedValue(generator = "fnk") + @GenericGenerator( name = "fnk", strategy = "funky") + public Integer getId() { return id; } + public void setId(Integer id) { this.id = id; } + private Integer id; + + public String getName() { return name; } + public void setName(String name) { this.name = name; } + private String name; +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyException.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyException.java new file mode 100644 index 0000000000..06ca0a9f1e --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyException.java @@ -0,0 +1,27 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +/** + * @author Emmanuel Bernard + */ +public class FunkyException extends RuntimeException { +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdGenerator.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdGenerator.java new file mode 100644 index 0000000000..7efbe525c4 --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdGenerator.java @@ -0,0 +1,37 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import java.io.Serializable; + +import org.hibernate.HibernateException; +import org.hibernate.engine.SessionImplementor; +import org.hibernate.id.IdentifierGenerator; +import org.hibernate.mapping.IdGenerator; + +/** + * @author Emmanuel Bernard + */ +public class FunkyIdGenerator implements IdentifierGenerator { + public Serializable generate(SessionImplementor session, Object object) throws HibernateException { + throw new FunkyException(); + } +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdentifierGeneratorProvider.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdentifierGeneratorProvider.java new file mode 100644 index 0000000000..a37856bca6 --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdentifierGeneratorProvider.java @@ -0,0 +1,37 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import java.util.HashMap; +import java.util.Map; + +import org.hibernate.ejb.cfg.spi.IdentifierGeneratorStrategyProvider; + +/** + * @author Emmanuel Bernard + */ +public class FunkyIdentifierGeneratorProvider implements IdentifierGeneratorStrategyProvider { + public Map> getStrategies() { + final HashMap> result = new HashMap>( 1 ); + result.put( "funky", FunkyIdGenerator.class ); + return result; + } +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/IdentifierGeneratorStrategyProviderTest.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/IdentifierGeneratorStrategyProviderTest.java new file mode 100644 index 0000000000..38394138aa --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/IdentifierGeneratorStrategyProviderTest.java @@ -0,0 +1,53 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; + +import junit.framework.TestCase; + +import org.hibernate.ejb.AvailableSettings; +import org.hibernate.ejb.Ejb3Configuration; + +/** + * @author Emmanuel Bernard + */ +public class IdentifierGeneratorStrategyProviderTest extends TestCase { + public void testIdentifierGeneratorStrategyProvider() { + Ejb3Configuration conf = new Ejb3Configuration(); + conf.setProperty( + AvailableSettings.IDENTIFIER_GENERATOR_STRATEGY_PROVIDER, + FunkyIdentifierGeneratorProvider.class.getName() ); + conf.addAnnotatedClass( Cable.class ); + final EntityManagerFactory entityManagerFactory = conf.buildEntityManagerFactory(); + final EntityManager entityManager = entityManagerFactory.createEntityManager(); + try { + entityManager.persist( new Cable() ); + entityManager.flush(); + fail("FunkyException should have been thrown when the id is generated"); + } + catch ( FunkyException e ) { + entityManager.close(); + entityManagerFactory.close(); + } + } +}