Problemas com Toplink (JPA) no OracleAS 10.1.3.1 / OC4J 10.1.3.2

Olá.

Instalei o OracleAS 10.1.3.0 e apliquei o patch 5906151 para atualizar para o OAS 10.1.3.1 e OC4J 10.1.3.2, ambos em Windows e AIX.

Fiz o deploy de uma app JEE (EJB-JAR e EAR/WAR separados) nos dois ambientes. Minha aplicação roda bem no Windows, mas tem problemas no AIX.

Para que pudesse rodar minha aplicação com EJB 3.0 / JPA / Toplink, eu tive de copiar o toplink-essentials.jar para o diretório $ORACLE_HOME/j2ee/home/applib/.

NO AIX eu estava tendo o seguinte erro:

exception occurred during method invocation: javax.ejb.EJBException: java.lang.RuntimeException: javax.ejb.EJBException: oracle.toplink.essentials.exceptions.ValidationException Exception Description: Error encountered when building the @NamedQuery [MyClass.findAll] from entity class [class oracle.toplink.essentials.internal.ejb.cmp3.metadata.queries.MetadataNamedQuery]. Internal Exception: java.lang.IllegalStateException: ClassLoader "myApp.root:0.0.1" (from in /oracle/product/10.1.3.0/j2ee/OC4J_1/applications/myApp/): This loader has been closed and should not be in use.;

Encontrei um problema conhecido no Metalink da Oracle [Note:427650.1] (bug 5928776) - https://metalink.oracle.com/metalink/plsql/f?p=130:14:11405609768040641618::::p14_database_id,p14_docid,p14_show_header,p14_show_help,p14_black_frame,p14_font:NOT,427650.1,1,1,1,helvetica

Seguindo a resolução do erro no Metalink, eu troquei o toplink-essentials.jar e toplink-essentials-agent.jar no diretório $ORACLE_HOME/toplink/jlib/, e para o diretório $ORACLE_HOME/j2ee/home/appplib/, como descrito, para a versão 2 build 41, e testei. Depois troquei para o build 58.

Mas ainda enfrentou um outro problema:

[code]Exception [TOPLINK-46] (Oracle TopLink Essentials - 2.0 (Build b58-rc1 (08/05/2007))): oracle.toplink.essentials.exceptions.DescriptorException
Exception Description: There should be one non-read-only mapping defined for the primary key field [MY_TABLE.MY_FIELD].
Descriptor: RelationalDescriptor(xyz.MyClass --&gt [DatabaseTable(MY_TABLE)])

Runtime Exceptions:

; nested exception is: javax.persistence.PersistenceException: Exception [TOPLINK-0] (Oracle TopLink Essentials - 2.0 (Build b58-rc1 (08/05/2007))): oracle.toplink.essentials.exceptions.IntegrityException
Descriptor Exceptions:
---------------------------------------------------------[/code]

Alguém já passou por algum problema semelhante?

Falae Daniel beleza?

Seguinte, acredito que você precise colocar esse campo que está acusando no log como READ-ONLY

Ou seja

@Column(name="XXXXX", nullable = false, insertable=false, updatable=false)
// pode ser um JoinColumn também
@JoinColumn(name="XXXXX", referencedColumnName="YYYY", nullable = false, insertable=false, updatable=false)

Mas por via das dúvidas, posta o código das tuas classes aqui, de ambos os beans pra ver o que a gente consegue fazer

Isso é bug, pois funciona normalmente no Windows.

E eu já tentei esse configuração e não deu certo, mas assim:

@Id @Column(name="XXXXX", nullable = false, insertable=true, updatable=true) private Logn cod;

E outra, nenhuma das minhas classes possui relacionamento. São todos mapeamentos 1:1 com a tabela do banco.

que estranho

o nosso ambiente é linux + oc4j e funciona certinho

você tá usando annotations ou xml?

Olhou ali no meu código? Annotations!

Constatei a seguinte versão do java rodando:

Coisas (bugs) que só a Oracle faz por vc…

já tentou abrir um chamado pro suporte pra ver se eles sabem de algo?

Olha Daniel

A versão que estou utilizando do Toplink é a que vem no JDeveloper 10.1.3.2

Tu já testou essa versão do Toplink?

Ps.: estou utilizando junto ao Spring

Eu abri um chamado já. Vamos ver.

O [nada] engraçado é que funciona normal no Windows, mas no AIX não.

Parece mesmo que é um bug, segundo confirmou o suporte da Oracle no chamado que eu abri.

[quote]Your issue seems to be related to bug 5594702 - Abstract: EJB30 ENTITY BEAN WITH @ID AND @COLUMN ANNOTATION FAILS TO DEPLOY ON AIX.
There is an issue with the IBM JDK/JRE 1.5’s processing of annotations.
Links:
http://www.theserverside.com/discussions/thread.tss?thread_id=37764
http://www-128.ibm.com/developerworks/forums/dw_thread.jsp?forum=367&thread=112543&cat=10

When processing annotations it returns boolean values as false.

Work-around:
Fully specify the @Column annotation’s boolean values. If insertable and updatable are set to false (which will happen due to this bug) then TopLink sets the PK mapping to read-only and the exception seen is expected.
Note: nullable attribute of the @Colmun is not used in the EJB3/JPA preview of 10.1.3.0 If the customer MUST override the default column name then they should use: @Column(name=“column-name”, insertable=true, updatable=true)
If they do not wish to override the default column name then simply do not use an @Column annotation. It can be deleted or commented out in the JDev generated code.
There are two reported annotation processing issues with the AIX JVM. One was fixed in SR1 and the other is fixed in SR3 (due out Oc 11 - today). Upgrading to these more recent JVM releases may also address this issue.

RECOMMENDED SOLUTIONS:

  1. Upgrade the IBM AIX JVM to SR3.
    OR
  2. Fix all generated @Column annotations as described above[/quote]

O workaround sugerido não funcionou. Continuou dando o mesmo erro.
Agora vamos ver se conseguimos atualizar a JVM para ver se corrige o problema.
Mas, de qualquer forma, fizemos uma implementação com Toplink puro (sem JPA e Toplink Essentials) e funcionou na boa, o que prova que o problema está com JPA e/ou Toplink Essentials.

Atualizamos a versão do JDK da IBM para a SR3 e tudo funcionou normal (por enquanto).