Problema no deploy de EntityBean CMP

3 respostas
Cocota

Olá novamente,

Já faz uns três dias que eu tento fazer o deploy de um EntityBean simples no JBoss 4.0.0 e não consigo.
Vejam o erro:

14:42:50,791 INFO  [EjbModule] Deploying PequenoBean
14:43:04,577 ERROR [EntityContainer] Starting failed jboss.j2ee:jndiName=PequenoBean,service=EJB
org.jboss.deployment.DeploymentException: Error while creating table 
pequenos; - nested throwable: (org.postgresql.util.PSQLException: ERRO: 
erro de sintaxe em ou próximo a ")")
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCStartCommand.createTable(JDBCStartCommand.java:540)
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCStartCommand.execute(JDBCStartCommand.java:196)
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.startStoreManager(JDBCStoreManager.java:484)
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.start(JDBCStoreManager.java:381)
        at org.jboss.ejb.plugins.CMPPersistenceManager.start(CMPPersistenceManager.java:157)

(...o catatau de erro segue...)

O que pode ser?
Vejam meu ejb-jar.xml que está na pasta META-INF da aplicação

cabeçalho bla bla bla...
<enterprise-beans>
        
        <entity>
            <display-name>PequenoEB</display-name>
            <ejb-name>PequenoBean</ejb-name>
            <home>pequeno.PequenoRemoteHome</home>
            <remote>pequeno.PequenoRemote</remote>
            <ejb-class>pequeno.PequenoBean</ejb-class>
            <persistence-type>Container</persistence-type>
            <prim-key-class>pequeno.PequenoPK</prim-key-class>
            <reentrant>false</reentrant>
            <cmp-version>2.x</cmp-version>
            <abstract-schema-name>pequenos</abstract-schema-name>
            <cmp-field>
                <field-name>name</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>codigo</field-name>
            </cmp-field>            
        </entity>
        
        </enterprise-beans>

Meu jbosscmp-jdbc.xml que está na pasta META-INF da aplicação

cabeçalho bla bla bla...
<jbosscmp-jdbc>
   <defaults>
             <datasource>java:/PostgresDS</datasource>
             <datasource-mapping>PostgreSQL 7.2</datasource-mapping>
   </defaults>
   <enterprise-beans>
   <entity>
      <ejb-name>PequenoBean</ejb-name>
      <table-name>pequenos</table-name>
      <cmp-field>
        <field-name>name</field-name>
        <column-name>name</column-name>
      </cmp-field>
      <cmp-field>
        <field-name>codigo</field-name>
        <column-name>codigo</column-name>
      </cmp-field>
    </entity>
   </enterprise-beans>
</jbosscmp-jdbc>

Meu postgres-ds.xml que está na pasta /server/default/deploy

<datasources>
  <local-tx-datasource>
    <jndi-name>PostgresDS</jndi-name>
    <connection-url>jdbc:postgresql://localhost:5432/pequeno</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <user-name>postgres</user-name>
    <password>postgres</password>
      <metadata>
         <type-mapping>PostgreSQL 7.2</type-mapping>
      </metadata>
  </local-tx-datasource>

</datasources>

O Driver do banco está na pasta /server/default/lib

Não consegui entender o que ele quer dizer com 'erro de sintaxe próximo do “(”'
Não sou eu quem gerencio essa porra!!
AEHUaeH
obrigado antes de tudo.

3 Respostas

N

Tem um jeito de contornar isso se você já tiver o banco montado tudo direitinho, tabelas, campos iguais aos dos VOs.

No arquivo jbosscmp-jdbc.xml, você pode definir para ele não criar as tabelas. Veja:

&lt;jbosscmp-jdbc&gt;
    &lt;defaults&gt;
              &lt;datasource&gt;java:/PostgresDS&lt;/datasource&gt;
              &lt;datasource-mapping&gt;PostgreSQL 7.2&lt;/datasource-mapping&gt;
              &lt;create-table&gt;false&lt;/create-table&gt;
              &lt;remove-table&gt;false&lt;/remove-table&gt;
    &lt;/defaults&gt;

    .... segue ....

&lt;/jbosscmp-jdbc&gt;

:lol:

Cocota

Ótima idéia.
Consegui fazer o deploy.
Agora vou tentar usá-lo.

t+

Cocota

Pessoal, terminei descobrindo a besteira.
Isso que eu fiz, com os conselhos do colega é uma gambiarra. E no fim das contas ao tentar rodar um cliente nesse Entity vai gerar erro.

A bronca era que:

  • O atributo que usei como chave primária tem que ser o mesmo em TODOS OS LUGARES, inclusive na classe de chave primária.

Não tentem entender baseado no erro. Esse erro é louco!

14:42:50,791 INFO  [EjbModule] Deploying PequenoBean
 14:43:04,577 ERROR [EntityContainer] Starting failed jboss.j2ee:jndiName=PequenoBean,service=EJB
 org.jboss.deployment.DeploymentException: Error while creating table 
 pequenos; - nested throwable: (org.postgresql.util.PSQLException: ERRO: 
 erro de sintaxe em ou próximo a ")")

Na classe PequenoPK eu usava um nome diferente do PequenoBean. Não imaginava nunca que pudesse ser isso. Posto que no ejb-jar.xml eu mapeio apenas o nome da classe de chave primária e o nome do cmp-field baseado no método acessador abstrato.

No ejb-jar.xml

...
             <cmp-field>
                 <field-name>codigo</field-name>
             </cmp-field>       
...

no jbosscmp-jdbc.xml

...
       <cmp-field>
         <field-name>codigo</field-name>
         <column-name>codigo</column-name>
       </cmp-field>
...

na classe PequenoPK

public class PequenoPK implements java.io.Serializable{
    
    public String codigo;    
    
    public PequenoPK() {
    }
...

na classe PequenoBean

import javax.ejb.*;

public abstract class PequenoBean implements EntityBean {
    private EntityContext context;
    
    public PequenoBean(){}
    public abstract java.lang.String getCodigo();
    public abstract void setCodigo(java.lang.String codigo);
...

Assim, o básico do CMP vai funcionar, quem quiser ir mais a fundo… pode mergulhar. Tem EJB-QL até umas hora!

Criado 19 de agosto de 2006
Ultima resposta 22 de ago. de 2006
Respostas 3
Participantes 2