Discussions

EJB programming & troubleshooting: EJB QL generation using XDoclet

  1. EJB QL generation using XDoclet (2 messages)

    I am using jboss 3.0.
    I am 'new to' using xdoclet for code generation.
    I have a finder method in my entity bean.
    I want to specify the query for this method using xdoclet.
    Table to query - user_table
    Fields - username, password

    My query in 'pure sql' is -
     select username from user_table where username like '%user%'

    I am not able to write this in EJB QL using Xdoclet.

    Please help.
    Janarthan S
  2. EJB QL generation using XDoclet[ Go to top ]

    Check the AccountBean code in xdoclet samples (assuming you are running the stable version, having used the beta) for specifying a JBoss finder. You specify just the where clause (minus the keyword -where-) if I remember correctly.

    You'll have a problem with "like", though. EJB QL is not SQL.
  3. HI,

    I am 2 week old to EJB.
    I am using jboss 3.0 as container.
    I am using xdoclet for auto generation of code.
    I have written an EntityBean "AccountBean.java" which reads as -

    package helloworld;

    import java.util.Collection;
    import javax.ejb.SessionBean;
    import javax.ejb.EntityContext;

    /**
     * @ejb.bean type="CMP"
     * jndi-name="helloworld/Account"
     * view-type="both"
     * @ejb.finder signature="Collection findAllAccounts()"
     * @ejb.pk
     * @jboss:table-name "user_profile"
     * @ejb:transaction type="Required"
     *
     */

     

    public abstract class AccountBean implements javax.ejb.EntityBean {

    /**
    * Create Account.
    *
    * @ejb.create-method
    */
    public Object ejbCreate() throws javax.ejb.CreateException {
    System.out.println("In ejbCreate()");
    return new AccountPK();
    // return null;
    }

    /**
    * Create Account with parameters.
    *
    * @ejb.create-method
    */
    public Object ejbCreate(String vUserIdentity,
    String vFirstName,
    double vPinCode
    ) throws javax.ejb.CreateException {
    System.out.println("In ejbCreate() parametrised");
    setUserIdentity(vUserIdentity);
    setFirstName(vFirstName);
    setPinCode(vPinCode);

    System.out.println("returning AccountPK with acount NO " + vUserIdentity);
    return new AccountPK(vUserIdentity);
    // return null;
    }

    public void ejbPostCreate(String vUserIdentity,
    String vFirstName,
    double vPinCode
    ) throws javax.ejb.CreateException {
    System.out.println("In ejbPostCreate() parametrised");
    }

    public void ejbPostCreate() throws javax.ejb.CreateException {
    System.out.println("In ejbPostCreate()");
    }


    /**
     * @ejb.pk-field
     * @ejb.persistent-field
     * @ejb.interface-method
     * @jboss:column-name user_identity
     */

    public abstract String getUserIdentity();
    public abstract void setUserIdentity(String vUserIdentity);

    /**
     * @ejb.persistent-field
     * @ejb.interface-method
     * @jboss:column-name pin_code
     */
    public abstract double getPinCode();
    public abstract void setPinCode(double vPinCode);

    /**
     * @ejb.persistent-field
     * @ejb.interface-method
     * @jboss:column-name first_name
     */
    public abstract String getFirstName();
    public abstract void setFirstName(String vFirstName);

    /**
     * @ejb.interface-method
     */

    public String accountInfo() {
    return "Your account(change to pincode) has Rs. " + getPinCode() + " as balance";
    }


    }


    Now to test this Entitybean, i wrote a class named "AccountClient.java" which reads as -

    package helloworld;

    import javax.ejb.*;
    import javax.naming.*;
    import java.rmi.*;
    import java.util.Properties;
    import java.util.Vector;

    class AccountClient
    {
       public static void main(String[] args)
       {
          System.out.println("\nBegin AccountClient ..\n");

          try
          {
             // Create an Authentication object, in the server
    Context ctx = new InitialContext();
    System.out.println("context = " + ctx);
    System.out.println("received context - now looking up \n");
    Object obj = ctx.lookup("helloworld/Account");

    AccountHome mAccountHome = (AccountHome) javax.rmi.PortableRemoteObject.narrow(obj, AccountHome.class) ;

    System.out.println("before creating Account\n");
    mAccountHome.create("user_001", "janarthan", 10500);
    //mAccountHome.create("janarthan", 10500);
    // mAccountHome.create();
    System.out.println("after creating Account\n");

    // Here is the call that executes the method on home objects find method
    Vector mResult = (Vector)mAccountHome.findAllAccounts();
    System.out.println("The result is " + mResult);
          }
          catch (Exception e)
          {
             System.out.println(":::::::::::::: Error :::::::::::::::::");
             e.printStackTrace();
          }
          System.out.println("\nEnd Account...\n");
       }

    }


    I compile and deploy the appln.Everthings OK.

    I now run the AccountClient.java.

    I get an exception as -
         [java]
         [java] Begin AccountClient ..
         [java]
         [java] context = javax.naming.InitialContext@888759
         [java] received context - now looking up
         [java]
         [java] before creating Account
         [java]
           [java] :::::::::::::: Error :::::::::::::::::
      [java] javax.ejb.CreateException: Error checking if entity exists:java.sql.SQLEx
    ception: Column not found: USER_IDENTITY in statement [SELECT COUNT(*) FROM USER_P
    ROFILE WHERE user_identity='user_001']
         [java] at org.jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityCommand.entityEx
    ists(JDBCCreateEntityCommand.java:166)
         [java] at org.jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityCommand.execute(
    JDBCCreateEntityCommand.java:127)
         [java] at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.createEntity(JD
    BCStoreManager.java:450)
         [java] at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPer
    sistenceManager.java:253)
         [java] at org.jboss.resource.connectionmanager.CachedConnectionIntercepto
    r.createEntity(CachedConnectionInterceptor.java:270)
         [java] at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:7
    28)
         [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso
    rImpl.java:39)
         [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
    dAccessorImpl.java:25)
         [java] at java.lang.reflect.Method.invoke(Method.java:324)
         [java] at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(E
    ntityContainer.java:1116)
         [java] at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractIn
    terceptor.java:73)
         [java] at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHo
    me(EntitySynchronizationInterceptor.java:257)
         [java] at org.jboss.resource.connectionmanager.CachedConnectionIntercepto
    r.invokeHome(CachedConnectionInterceptor.java:215)
         [java] at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(Enti
    tyInstanceInterceptor.java:134)
         [java] at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLo
    ckInterceptor.java:79)
         [java] at org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(Enti
    tyCreationInterceptor.java:44)
         [java] at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(Abstract
    TxInterceptor.java:98)
         [java] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxIn
    terceptorCMT.java:167)
         [java] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptor
    CMT.java:52)
         [java] at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityIn
    terceptor.java:104)
         [java] at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.
    java:109)
         [java] at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:4
    87)
         [java] at org.jboss.ejb.Container.invoke(Container.java:726)
         [java] at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:1055)

         [java] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java
    :491)
         [java] at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker
    .java:362)
         [java] at sun.reflect.GeneratedMethodAccessor131.invoke(Unknown Source)
         [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
    dAccessorImpl.java:25)
         [java] at java.lang.reflect.Method.invoke(Method.java:324)
         [java] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:
    261)
         [java] at sun.rmi.transport.Transport$1.run(Transport.java:148)
         [java] at java.security.AccessController.doPrivileged(Native Method)
         [java] at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
         [java] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.
    java:460)
         [java] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTra
    nsport.java:701)
         [java] at java.lang.Thread.run(Thread.java:536)
         [java] at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(
    StreamRemoteCall.java:247)
         [java] at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall
    .java:223)
         [java] at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:133)
         [java] at org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknow
    n Source)
         [java] at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JR
    MPInvokerProxy.java:128)
         [java] at org.jboss.invocation.InvokerInterceptor.invoke(InvokerIntercept
    or.java:108)
         [java] at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterc
    eptor.java:73)
         [java] at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.
    java:76)
          [java]
            [java] at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeIntercep
    tor.java:185)
    [java] End Account...
         [java] at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76)

         [java] at $Proxy0.create(Unknown Source)
         [java]
         [java] at helloworld.AccountClient.main(Unknown Source)



    Please help me get out of this. I have not figured why this exception comes. The table that i am referring does contain 'USER_IDENTITY' as its field.

    I have fought this for 2 days. Please help me !!!