Oracle-sequence

3 respostas
N

Pessoal,

Alguém tem um exemplo de um EJB CMP funcionando no JBoss com chave gerada por sequence no Oracle ?

Estou querendo algo para o JBoss 3.2.3 ou superior.

Eu já fiz funcionar com MySQL, mas Oracle tá me retornando umas exceções muito “bizarras”, algo como NullPointerException.

[]'s

3 Respostas

T

Google de “oracle sequence jboss cmp” fornece, entre outros links:

http://forum.java.sun.com/thread.jsp?thread=478783&forum=13&message=2229806

N

Valeu a tentativa, eu já tinha obtido esse link também :slight_smile:

Estou tentando fazer algo parecido com:

<unknown-pk>
		<unknown-pk-class>java.lang.Long</unknown-pk-class>
		<field-name>id</field-name>
		<column-name>coun_id</column-name>
		<jdbc-type>INTEGER</jdbc-type>
		<sql-type>NUMBER(9)</sql-type>
		<auto-increment/>
	</unknown-pk>
	<entity-command name="bi_counter_sq" class="org.jboss.ejb.plugins.cmp.jdbc.keygen.JDBCOracleCreateCommand">
		<attribute name="sequence">bi_counter_sq</attribute>
	</entity-command>

Observando o código do JBoss, o erro de NullPointer ocorre no seguinte trecho:

public JDBCCreateCommand createCreateEntityCommand()
      throws DeploymentException
   {

      JDBCCreateCommand cec;
      try
      {
         cec = (JDBCCreateCommand)manager.getMetaData().
            getEntityCommand().getCommandClass().newInstance();
         cec.init(manager);
      }
      catch(DeploymentException de)
      {
         throw de;
      }
      catch(Exception e)
      {
         throw new DeploymentException("Couldn't create entity command: ", e);
      }

      if(log.isDebugEnabled())
         log.debug("entity-command: " + manager.getMetaData().getEntityCommand());

      return cec;
   }

O código para no primeiro catch.

...
13:16:42,616 ERROR [EntityContainer] Starting failed jboss.j2ee:jndiName=entity/
CounterLocal,service=EJB
org.jboss.deployment.DeploymentException: Couldn't create entity command: ; - ne
sted throwable: (java.lang.NullPointerException)
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCCommandFactory.createCreateEntityC
ommand(JDBCCommandFactory.java:159)
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.startStoreManager(JDB
CStoreManager.java:474)
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.start(JDBCStoreManage
...

Aparentemente ele dá nullpointer pq não consegue achar o EntityCommand, ou a própria descrição do entity (…manager.getMetaData()), ou o nome da classe. A classe está no package adequado no arquivo jboss.jar.

Alguém dá mais ?

C
<?xml version="1.0" ?> 
  <!DOCTYPE ejb-jar (View Source for full doctype...)> 
- <ejb-jar>
- <enterprise-beans>
- <entity>
  <ejb-name>Sequence</ejb-name> 
  <local-home>examples.sequencegenerator.SequenceLocalHome</local-home> 
  <local>examples.sequencegenerator.Sequence</local> 
  <ejb-class>examples.sequencegenerator.SequenceBean</ejb-class> 
  <persistence-type>Container</persistence-type> 
  <prim-key-class>java.lang.String</prim-key-class> 
  <reentrant>False</reentrant> 
  <cmp-version>2.x</cmp-version> 
  <abstract-schema-name>SequenceBean</abstract-schema-name> 
- <cmp-field>
  <field-name>index</field-name> 
  </cmp-field>
- <cmp-field>
  <field-name>name</field-name> 
  </cmp-field>
  <primkey-field>name</primkey-field> 
- <env-entry>
  <env-entry-name>datasourceName</env-entry-name> 
  <env-entry-type>java.lang.String</env-entry-type> 
  <env-entry-value>bookPool</env-entry-value> 
  </env-entry>
- <resource-ref>
  <res-ref-name>jdbc/bookPool</res-ref-name> 
  <res-type>javax.sql.DataSource</res-type> 
  <res-auth>Container</res-auth> 
  </resource-ref>
  </entity>
- <session>
  <ejb-name>SequenceSession</ejb-name> 
  <home>examples.sequencegenerator.SequenceSessionHome</home> 
  <remote>examples.sequencegenerator.SequenceSession</remote> 
  <local-home>examples.sequencegenerator.SequenceSessionLocalHome</local-home> 
  <local>examples.sequencegenerator.SequenceSessionLocal</local> 
  <ejb-class>examples.sequencegenerator.SequenceSessionBean</ejb-class> 
  <session-type>Stateless</session-type> 
  <transaction-type>Container</transaction-type> 
- <env-entry>
  <description /> 
  <env-entry-name>retryCount</env-entry-name> 
  <env-entry-type>java.lang.Integer</env-entry-type> 
  <env-entry-value>5</env-entry-value> 
  </env-entry>
- <env-entry>
  <description /> 
  <env-entry-name>blockSize</env-entry-name> 
  <env-entry-type>java.lang.Integer</env-entry-type> 
  <env-entry-value>10</env-entry-value> 
  </env-entry>
  </session>
- <session>
  <ejb-name>TestSession</ejb-name> 
  <home>examples.sequencegenerator.TestSessionHome</home> 
  <remote>examples.sequencegenerator.TestSession</remote> 
  <ejb-class>examples.sequencegenerator.TestSessionBean</ejb-class> 
  <session-type>Stateless</session-type> 
  <transaction-type>Container</transaction-type> 
  </session>
  </enterprise-beans>
- <assembly-descriptor>
- <container-transaction>
- <method>
  <ejb-name>Sequence</ejb-name> 
  <method-name>getValueAfterIncrementingBy</method-name> 
  </method>
  <trans-attribute>RequiresNew</trans-attribute> 
  </container-transaction>
- <container-transaction>
- <method>
  <ejb-name>SequenceSession</ejb-name> 
  <method-name>*</method-name> 
  </method>
  <trans-attribute>Required</trans-attribute> 
  </container-transaction>
- <container-transaction>
- <method>
  <ejb-name>TestSession</ejb-name> 
  <method-name>*</method-name> 
  </method>
  <trans-attribute>Required</trans-attribute> 
  </container-transaction>
  </assembly-descriptor>
  </ejb-jar>

tirado do livro Padroes de Projeto EJB , Floyd Marinescu.

Criado 15 de outubro de 2004
Ultima resposta 15 de out. de 2004
Respostas 3
Participantes 3