1 22 package org.jboss.ejb.plugins.cmp.jdbc.keygen; 23 24 import javax.ejb.CreateException ; 25 import javax.naming.InitialContext ; 26 import javax.naming.NamingException ; 27 28 import org.jboss.deployment.DeploymentException; 29 import org.jboss.ejb.EntityEnterpriseContext; 30 import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge; 31 import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCEntityCommandMetaData; 32 import org.jboss.ejb.plugins.cmp.jdbc.JDBCInsertPKCreateCommand; 33 import org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager; 34 import org.jboss.ejb.plugins.keygenerator.KeyGenerator; 35 import org.jboss.ejb.plugins.keygenerator.KeyGeneratorFactory; 36 37 46 public class JDBCKeyGeneratorCreateCommand extends JDBCInsertPKCreateCommand 47 { 48 protected KeyGenerator keyGenerator; 49 protected JDBCCMPFieldBridge pkField; 50 51 public void init(JDBCStoreManager manager) throws DeploymentException 52 { 53 super.init(manager); 54 pkField = getGeneratedPKField(); 55 } 56 57 protected void initEntityCommand(JDBCEntityCommandMetaData entityCommand) throws DeploymentException 58 { 59 super.initEntityCommand(entityCommand); 60 61 String factoryName = entityCommand.getAttribute("key-generator-factory"); 62 if(factoryName == null) 63 { 64 throw new DeploymentException("key-generator-factory attribute must be set for entity " + entity.getEntityName()); 65 } 66 67 try 68 { 69 KeyGeneratorFactory keyGeneratorFactory = (KeyGeneratorFactory) new InitialContext ().lookup(factoryName); 70 keyGenerator = keyGeneratorFactory.getKeyGenerator(); 71 } 72 catch(NamingException e) 73 { 74 throw new DeploymentException("Error: can't find key generator factory: " + factoryName, e); 75 } 76 catch(Exception e) 77 { 78 throw new DeploymentException("Error: can't create key generator instance; key generator factory: " + factoryName, e); 79 } 80 } 81 82 protected void generateFields(EntityEnterpriseContext ctx) throws CreateException 83 { 84 super.generateFields(ctx); 85 86 Object pk = keyGenerator.generateKey(); 87 log.debug("Generated new pk: " + pk); 88 pkField.setInstanceValue(ctx, pk); 89 } 90 } 91 | Popular Tags |