0 Replies Latest reply on Feb 20, 2006 5:14 PM by rsagare

    ClassCastException in getLocalHome when upgrading from 3.2.1

    rsagare

      We have been using middlegen to generate EJB for last 3 years for JBoss3.2.1 successfully and it has worked very well for us. Now we are trying to upgrade to JBoss4.0.4 and we are getting this error in the middlegen generated file when deployed,

      java.lang.ClassCastException

      at com.acs.erx.payload.interfaces.PayloadSessionBeanUtil.getLocalHome(PayloadSessionBeanUtil.java:145)
      at com.acs.erx.payload.batch.PostCashieringTask.run(PostCashieringTask.java:59)
      at java.util.TimerThread.mainLoop(Timer.java:432)
      at java.util.TimerThread.run(Timer.java:382)

      Please advice what we need to change to get it working. I have attached the generated file. It does work in JBoss 4.0.1sp1 but not in 4.0.4 We are using middlegen 2.1

      Thanks!

      The generated code is this,

      /*
      * Generated file - Do not edit!
      */

      /**
      * Utility class for PayloadSessionBean.
      */
      public class PayloadSessionBeanUtil
      {

      // Home interface lookup methods

      /**
      * Obtain remote home interface from default initial context
      * @return Home interface for PayloadSessionBean. Lookup using JNDI_NAME
      */
      public static com.acs.erx.payload.interfaces.PayloadSessionBeanHome getHome() throws NamingException
      {
      // Obtain initial context
      InitialContext initialContext = new InitialContext();
      try {
      java.lang.Object objRef = initialContext.lookup(com.acs.erx.payload.interfaces.PayloadSessionBeanHome.JNDI_NAME);
      return (com.acs.erx.payload.interfaces.PayloadSessionBeanHome) PortableRemoteObject.narrow(objRef, com.acs.erx.payload.interfaces.PayloadSessionBeanHome.class);
      } finally {
      initialContext.close();
      }
      }

      /**
      * Obtain remote home interface from parameterised initial context
      * @param environment Parameters to use for creating initial context
      * @return Home interface for PayloadSessionBean. Lookup using JNDI_NAME
      */
      public static com.acs.erx.payload.interfaces.PayloadSessionBeanHome getHome( Hashtable environment ) throws NamingException
      {
      // Obtain initial context
      InitialContext initialContext = new InitialContext(environment);
      try {
      java.lang.Object objRef = initialContext.lookup(com.acs.erx.payload.interfaces.PayloadSessionBeanHome.JNDI_NAME);
      return (com.acs.erx.payload.interfaces.PayloadSessionBeanHome) PortableRemoteObject.narrow(objRef, com.acs.erx.payload.interfaces.PayloadSessionBeanHome.class);
      } finally {
      initialContext.close();
      }
      }

      /**
      * Obtain local home interface from default initial context
      * @return Local home interface for PayloadSessionBean. Lookup using JNDI_NAME
      */
      public static com.acs.erx.payload.interfaces.PayloadSessionBeanLocalHome getLocalHome() throws NamingException
      {
      // Local homes shouldn't be narrowed, as there is no RMI involved.
      // Obtain initial context
      InitialContext initialContext = new InitialContext();
      try {
      return (com.acs.erx.payload.interfaces.PayloadSessionBeanLocalHome) initialContext.lookup(com.acs.erx.payload.interfaces.PayloadSessionBeanLocalHome.JNDI_NAME);
      } finally {
      initialContext.close();
      }
      }

      /** Cached per JVM server IP. */
      private static String hexServerIP = null;

      // initialise the secure random instance
      private static final SecureRandom seeder = new SecureRandom();

      /**
      * A 32 byte GUID generator (Globally Unique ID). These artificial keys SHOULD NOT be seen by the user,
      * not even touched by the DBA but with very rare exceptions, just manipulated by the database and the programs.
      *
      * Usage: Add an id field (type java.lang.String) to your EJB, and add setId(XXXUtil.generateGUID(this)); to the ejbCreate method.
      */
      public static final String generateGUID(Object o) {
      StringBuffer tmpBuffer = new StringBuffer(16);
      if (hexServerIP == null) {
      InetAddress localInetAddress = null;
      try {
      // get the inet address
      localInetAddress = InetAddress.getLocalHost();
      }
      catch (java.net.UnknownHostException uhe) {
      System.err.println("PayloadSessionBeanUtil: Could not get the local IP address using InetAddress.getLocalHost()!");
      // todo: find better way to get around this...
      uhe.printStackTrace();
      return null;
      }
      byte serverIP[] = localInetAddress.getAddress();
      hexServerIP = hexFormat(getInt(serverIP), 8);
      }
      String hashcode = hexFormat(System.identityHashCode(o), 8);
      tmpBuffer.append(hexServerIP);
      tmpBuffer.append(hashcode);

      long timeNow = System.currentTimeMillis();
      int timeLow = (int)timeNow & 0xFFFFFFFF;
      int node = seeder.nextInt();

      StringBuffer guid = new StringBuffer(32);
      guid.append(hexFormat(timeLow, 8));
      guid.append(tmpBuffer.toString());
      guid.append(hexFormat(node, 8));
      return guid.toString();
      }

      private static int getInt(byte bytes[]) {
      int i = 0;
      int j = 24;
      for (int k = 0; j >= 0; k++) {
      int l = bytes[k] & 0xff;
      i += l << j;
      j -= 8;
      }
      return i;
      }

      private static String hexFormat(int i, int j) {
      String s = Integer.toHexString(i);
      return padHex(s, j) + s;
      }

      private static String padHex(String s, int i) {
      StringBuffer tmpBuffer = new StringBuffer();
      if (s.length() < i) {
      for (int j = 0; j < i - s.length(); j++) {
      tmpBuffer.append('0');
      }
      }
      return tmpBuffer.toString();
      }
      }