JBoss: Como obter um bean "Many" em um Relacioname

0 respostas
Rafael_Afonso

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,

Criado 5 de dezembro de 2002
Respostas 0
Participantes 1