Forgive me if this is covered in another spot.....I have searched
the forums, but did not find an article that covers this.

I'm trying to implement Brett McLaughlin's multiple-ejb 
database system, with his Office, User, Fund, etc beans, and
have tried implementing them one at a time.
Got Office to work, now trying to set up User access.

UserBean.java:
--------------------------------------------

package com.sample.ejb.user;

import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

import com.sample.ejb.util.EntityAdapter;

// Sequence Bean
import com.sample.ejb.sequence.SequenceException;
import com.sample.ejb.sequence.SequenceLocal;
import com.sample.ejb.sequence.SequenceLocalHome;

// Office Bean
import com.sample.ejb.office.Office;
import com.sample.ejb.office.OfficeHome;
import com.sample.ejb.office.OfficeInfo;
import com.sample.ejb.office.OfficeLocal;
import com.sample.ejb.office.OfficeLocalHome;

// UserType Bean
import com.sample.ejb.userType.UnknownUserTypeException;
import com.sample.ejb.userType.UserTypeLocal;
import com.sample.ejb.userType.UserTypeLocalHome;

public abstract class UserBean extends EntityAdapter {

    public Integer ejbCreate(String userDn, String type, 
                            String firstName, String lastName, Office office) 
        throws CreateException, UnknownUserTypeException {
            
        // Get the next primary key value
        try {            
            Context context = new InitialContext(System.getProperties());
            // Note that RMI-IIOP narrowing is not required
            SequenceLocalHome home = (SequenceLocalHome) 
                //context.lookup("java:comp/env/ejb/SequenceLocalHome");
                context.lookup("local/SequenceBean");
            SequenceLocal sequence = home.create();
            String userKey =
                (String)context.lookup("java:comp/env/constants/UserKey");
            Integer id = sequence.getNextValue(userKey);
            
            // Set values
            setId(id);
            setUserDn(userDn);
            setFirstName(firstName);
            setLastName(lastName);

            return null;
        } catch (NamingException e) {
            throw new CreateException("Could not obtain an " +
                "InitialContext: " + e.getMessage());
        } catch (SequenceException e) {
            throw new CreateException("Error getting primary key value: " +
                e.getMessage());
        }
    }

    public void ejbPostCreate(String userDn, String type, 
                              String firstName, String lastName, 
                              Office office) 
        throws CreateException, UnknownUserTypeException {
        
        // Handle CMP relationships
        setOffice(office);
        setType(type);
    }

    public UserInfo getInfo() throws RemoteException {
        OfficeInfo officeInfo = null;
        Office office = getOffice();
        if (office != null) {
            officeInfo = office.getInfo();
        }
        
        UserInfo userInfo = 
            new UserInfo(getId().intValue(), getUserDn(), 
                         getUserTypeLocal().getType(),
                         getFirstName(), getLastName(), 
                         officeInfo);

        return userInfo;
    }

    public void setInfo(UserInfo userInfo) throws UnknownUserTypeException {
        setUserDn(userInfo.getUserDn());
        setFirstName(userInfo.getFirstName());
        setLastName(userInfo.getLastName());
        setType(userInfo.getType());
    }
    
    public String getType() {
        return getUserTypeLocal().getType();
    }
    
    public void setType(String type) throws UnknownUserTypeException {
        try {
            Context context = new InitialContext();
            UserTypeLocalHome userTypeLocalHome =
                (UserTypeLocalHome)context.lookup(
                    "java:comp/env/ejb/UserTypeLocalHome");
            UserTypeLocal userTypeLocal =
                userTypeLocalHome.findByType(type);
            setUserTypeLocal(userTypeLocal);
        } catch (NamingException e) {
            throw new EJBException("Error looking up UserType bean: " +
                e.getMessage());
        } catch (FinderException e) {
            // Couldn't find supplied type
            throw new UnknownUserTypeException(type);
        }

    public Office getOffice() {
        OfficeLocal officeLocal = getOfficeLocal();
        if (officeLocal == null) {
            return null;
        }
        
        // Construct primary key for this office
        Integer officeID = getOfficeLocal().getId();
        
        try {
            // Find the remote interface for this office
            Context context = new InitialContext();
            OfficeHome officeHome = 
                (OfficeHome)context.lookup(
                    "java:comp/env/ejb/OfficeHome");
            Office office = officeHome.findByPrimaryKey(officeID);
            return office;
        } catch (NamingException e) {
            throw new EJBException("Error looking up Office bean: " +
                e.getMessage());
        } catch (RemoteException e) {
            throw new EJBException("Error looking up Office bean: " +
                e.getMessage());
        } catch (FinderException shouldNeverHappen) {
            // This should never happen; the ID from an office's remote
            //   interface should match an office's ID in a local interface
            throw new EJBException("Error matching remote Office to " +
                "local Office: " + shouldNeverHappen.getMessage());
        }
    }
    
    public void setOffice(Office office) {
        try {
            // Handle case where no office supplied
            if (office == null) {
                setOfficeLocal(null);
                return;
            }
            
            // Construct primary key for this office
            Integer officeID = office.getId();
        
            // Find the local interface for this office
            Context context = new InitialContext();
            OfficeLocalHome officeLocalHome = 
                (OfficeLocalHome)context.lookup(
                    "java:comp/env/ejb/OfficeLocalHome");
            OfficeLocal officeLocal = 
                officeLocalHome.findByPrimaryKey(officeID);
            setOfficeLocal(officeLocal);
        } catch (NamingException e) {
            throw new EJBException("Error looking up Office bean: " +
                e.getMessage());
        } catch (RemoteException e) {
            throw new EJBException("Error looking up Office bean: " +
                e.getMessage());
        } catch (FinderException shouldNeverHappen) {
            // This should never happen; the ID from an office's remote
            //   interface should match an office's ID in a local interface
            throw new EJBException("Error matching remote Office to " +
                "local Office: " + shouldNeverHappen.getMessage());
        }
    }
    
    public abstract Integer getId();
    public abstract void setId(Integer id);

    public abstract String getUserDn();
    public abstract void setUserDn(String userDn);
    
    public abstract UserTypeLocal getUserTypeLocal();
    public abstract void setUserTypeLocal(UserTypeLocal userTypeLocal);
    
    public abstract OfficeLocal getOfficeLocal();
    public abstract void setOfficeLocal(OfficeLocal officeLocal);

    public abstract String getFirstName();
    public abstract void setFirstName(String firstName);

    public abstract String getLastName();
    public abstract void setLastName(String lastName);

    }

}

--------------------------------

This will compile, but when I deploy the jar file, it tells me
that :

10:18:08,280 ERROR [EntityContainer] Starting failed jboss.j2ee:jndiName=OfficeB
ean,service=EJB
org.jboss.deployment.DeploymentException: No abstract accessors for field named
'type' found in entity class com.sample.ejb.user.UserBean
        at org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCCMPFieldMetaData.loadFiel
dType(JDBCCMPFieldMetaData.java:857)
        at org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCCMPFieldMetaData.(J
DBCCMPFieldMetaData.java:161)
        at org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCEntityMetaData.(JDB
CEntityMetaData.java:375)
........more.........

Don't the setType and getType methods belong in the bean if
they are going to actually do something ? I'm  still a bit 
confused in what belongs where,  and this seems strange
that you would need to define the methods as abstract in 
the bean but need to have them do work.

Thanks.....


View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3851948#3851948

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3851948


-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to