Olá:
Estou num projeto usando JBoss, Oracle e JBuilder 7. Nele tenho um bean chamado Country, cuja chave primária é um BigDecimal chamado countryId. Há um outro bean chamado CountryState que possui como chave estrangeira chamada countryId. Como pode se imaginar posso ter vários countryState’s com o mesmo countryId.
O relacionamento é bidirecional. Quando criei o Relacionamento no JBuilder, os beans foram alterados da seguinte forma: Country passou a ter uma Collection chamada countryStates e CountryStates passou a ter Country chmado country :roll:, ambos de acesso local, não remoto.
Foram criados dois documentos XML. O primeiro é o ejb-jar.xml. Nele o relacionamento é representado da seguinte forma:
<relationships>
<ejb-relation>
<ejb-relation-name>country-countryStates</ejb-relation-name>
<ejb-relationship-role>
<description>country</description>
<ejb-relationship-role-name>CountryRelationshipRole</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<description>country</description>
<ejb-name>Country</ejb-name>
</relationship-role-source>
<cmr-field>
<description>countryState</description>
<cmr-field-name>countryStates</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<description>countryState</description>
<ejb-relationship-role-name>CountryStateRelationshipRole</ejb-relationship-role-name>
<multiplicity>Many</multiplicity>
<relationship-role-source>
<description>countryState</description>
<ejb-name>CountryState</ejb-name>
</relationship-role-source>
<cmr-field>
<description>country</description>
<cmr-field-name>country</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
</relationships>
O outro foi o jbosscmp-jdbc.xml, cujo relacionamento está representado assim:
<relationships>
<ejb-relation>
<ejb-relation-name>country-countryStates</ejb-relation-name>
<foreign-key-mapping />
<ejb-relationship-role>
<ejb-relationship-role-name>CountryRelationshipRole</ejb-relationship-role-name>
<key-fields>
<key-field>
<field-name>countryId</field-name>
<column-name>country_id</column-name>
</key-field>
</key-fields>
<ejb-designer-id>Country</ejb-designer-id>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>CountryStateRelationshipRole</ejb-relationship-role-name>
</ejb-relationship-role>
</ejb-relation>
</relationships>
Como countryStates de Country não pode ser acessado remotamente, criei no bean um método chamado getStates que retorna a Collection. Depois de fazer o deployment, rodo o cliente de teste para obter countryStates. Entretanto, obtive a seguinte mensagem de erro:
java.lang.reflect.UndeclaredThrowableException: java.io.NotSerializableException: org.jboss.ejb.plugins.cmp.jdbc.bridge.RelationSet
Aqui vão minhas perguntas:
[list]:?: Como corrigo este problema?
:?: Melhor, como deveria fazer para acessar countryStates?
:?: Por que os relacionamentos devem ser sempre locais? (não adianta dizer que é porque a Sun disse que assim deveria ser. :? Quero saber a justificativa)
:?: Sendo os relacionamentos locais, como faço para obtê-los. Ou seja - no meu caso - se tiver um CountryStateRemote, como faço para obter seu respectivo CountryRemote?[/list]
Grato,