0 Replies Latest reply on Nov 14, 2005 3:57 PM by David

    Remote acces on an Entity

    David Newbie

      I use a client to connect to JBoss 4.0.3SP1 using sun jdk 1.5.

      I retrieve a stateless bean and it's ok (stateless is a jboss proxy) but when

      I try to create an entity using this bean manager, a ClassNotFoundException is thrown because the returned object is not a proxy, it's the entity bean class, not the remote interface.

      The interfaces :

      @Remote
      public interface ICityManager extends IDataManager<ICity> {
       public ICity create(String name, String code, String country) throws RemoteException;
      }
      
      @Remote
      public interface ICity extends INamed {
       public String getCode() throws RemoteException;
       public void setCode(String s) throws RemoteException;
       public String getCountry() throws RemoteException;
       public void setCountry(String o) throws RemoteException;
      }


      The concrete classes :

      @Stateless
      @Remote(ICityManager.class)
      public class CityManagerBean extends AbstractManagerBean<ICity> implements ICityManager {
      ...
       public ICity create(String name, String code, String country) throws RemoteException {
       ICity o = new City();
       o.setName(name);
       o.setCode(code);
       o.setCountry(country);
       manager.persist(o);
      
       return o;
      }
      
      @Entity(access = AccessType.PROPERTY)
      @Table(name = "CITIES", uniqueConstraints = { @UniqueConstraint( columnNames = { INamed.NAME, ICity.CODE, ICity.COUNTRY }
      ) } )
      @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
      @Remote(ICity.class)
      public class City extends AbstractNamedEntity implements ICity {
       private String code;
       private String country;
      
       public City() { }
      ...
       @Id(generate = GeneratorType.IDENTITY)
       @Column(name = ID, nullable = false, unique = true)
       public long getPrimaryKey() { return id; }
      ...
      }


      The client :

      public static void main(String[] args) {
       try {
       if (System.getSecurityManager() == null) {
       System.setSecurityManager(new AllPermissionsManager());
       }
      
       DataManagerFactory factory = DataManagerFactory.getInstance();
       ICityManager cityManager = factory.get(ICityManager.class);
       cityManager.removeAll();
      
       System.out.print("city creation =>");
       System.out.println(cityManager.getClass().getName());
       System.out.println("cities : " + cityManager.size());
       ICity city = cityManager.create("Paris", "75000", "fra"); //ClassNotFoundException appears here
      ...
      }


      I don't understand, I need to put my concrete entity class on the class path of the client or it's not necessary (proxy or not) ?