4 Replies Latest reply on Nov 19, 2002 4:23 AM by eric138

    Unknown Exception : EJBQL ParseException ???

    eric138

      Hello,

      Would you please to tell me what did I make mistake?
      When I deploy an EAR to JBoss3.0.4, some exception encountered as following:
      ================================================
      2002-11-19 12:46:49,380 WARN [org.jboss.system.ServiceController] Problem starting service jboss.j2ee:jndiName=eric/foodsunion/local/FoodMenu,service=EJB
      org.jboss.deployment.DeploymentException: Error compiling ejbql; - nested throwable: (org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "1" at line 1, column 61.
      Was expecting one of:
      <VALUE_CLASS_VALUED_PARAMETER> ...
      <VALUE_CLASS_VALUED_PATH> ...
      )
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCJBossQLQuery.(JDBCJBossQLQuery.java:46)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCCommandFactory.createJBossQLQuery(JDBCCommandFactory.java:54)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCQueryManager.start(JDBCQueryManager.java:203)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.startStoreManager(JDBCStoreManager.java:463)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.start(JDBCStoreManager.java:369)
      at org.jboss.ejb.plugins.CMPPersistenceManager.start(CMPPersistenceManager.java:198)
      at org.jboss.ejb.EntityContainer.start(EntityContainer.java:376)
      at org.jboss.ejb.Container.invoke(Container.java:756)
      at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:1058)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
      at $Proxy5.start(Unknown Source)
      at org.jboss.system.ServiceController.start(ServiceController.java:398)
      at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
      at $Proxy21.start(Unknown Source)
      at org.jboss.ejb.EjbModule.startService(EjbModule.java:430)
      at org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:165)
      at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
      at $Proxy5.start(Unknown Source)
      at org.jboss.system.ServiceController.start(ServiceController.java:398)
      at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
      at $Proxy11.start(Unknown Source)
      at org.jboss.ejb.EJBDeployer.start(EJBDeployer.java:395)
      at org.jboss.deployment.MainDeployer.start(MainDeployer.java:807)
      at org.jboss.deployment.MainDeployer.start(MainDeployer.java:799)
      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:621)
      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:585)
      at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
      at $Proxy4.deploy(Unknown Source)
      at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:435)
      at org.jboss.deployment.scanner.URLDeploymentScanner.scanDirectory(URLDeploymentScanner.java:656)
      at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:507)
      at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:261)
      at org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:165)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
      at $Proxy0.start(Unknown Source)
      at org.jboss.system.ServiceController.start(ServiceController.java:398)
      at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
      at $Proxy3.start(Unknown Source)
      at org.jboss.deployment.SARDeployer.start(SARDeployer.java:249)
      at org.jboss.deployment.MainDeployer.start(MainDeployer.java:807)
      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:621)
      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:585)
      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:569)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
      at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:324)
      at org.jboss.system.server.ServerImpl.start(ServerImpl.java:221)
      at org.jboss.Main.boot(Main.java:148)
      at org.jboss.Main$1.run(Main.java:381)
      at java.lang.Thread.run(Thread.java:536)
      Caused by: org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "1" at line 1, column 61.
      Was expecting one of:
      <VALUE_CLASS_VALUED_PARAMETER> ...
      <VALUE_CLASS_VALUED_PATH> ...

      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.generateParseException(JBossQLParser.java:4803)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.jj_consume_token(JBossQLParser.java:4684)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ValueClassValue(JBossQLParser.java:1879)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ValueClassExpression(JBossQLParser.java:1885)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ComparisonExpression(JBossQLParser.java:1337)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.SimpleCondExpression(JBossQLParser.java:725)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ConditionalPrimary(JBossQLParser.java:671)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ConditionalTest(JBossQLParser.java:639)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ConditionalFactor(JBossQLParser.java:616)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ConditionalTerm(JBossQLParser.java:566)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.ConditionalExpression(JBossQLParser.java:526)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.WhereClause(JBossQLParser.java:495)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.EJBQL(JBossQLParser.java:108)
      at org.jboss.ejb.plugins.cmp.ejbql.JBossQLParser.parse(JBossQLParser.java:65)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLCompiler.compileJBossQL(JDBCEJBQLCompiler.java:179)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCJBossQLQuery.(JDBCJBossQLQuery.java:40)
      ... 85 more
      ==================================================

      And the following is my ejb-jar.xml an jbosscmp-jdbc.xml


      ejb-jar.xml
      =====================================
      <?xml version="1.0"?>

      <!DOCTYPE ejb-jar PUBLIC
      "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
      "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

      <ejb-jar>
      <display-name>FoodsUnion System</display-name>


      <enterprise-beans>

      Restaurant EJB
      <ejb-name>RestaurantEJB</ejb-name>

      <local-home>eric.foodsunion.interfaces.RestaurantLocalHome</local-home>
      eric.foodsunion.interfaces.RestaurantLocal
      <ejb-class>eric.foodsunion.ejb.RestaurantEJB</ejb-class>

      <persistence-type>Container</persistence-type>
      <prim-key-class>eric.foodsunion.pk.RestaurantPK</prim-key-class>
      False
      <cmp-version>2.x</cmp-version>
      <abstract-schema-name>restaurant</abstract-schema-name>

      <cmp-field><field-name>restaurantID</field-name></cmp-field>
      <cmp-field><field-name>restaurantName</field-name></cmp-field>


      <query-method>
      <method-name>findByRestaurantName</method-name>
      <method-params>
      <method-param>java.lang.String</method-param>
      </method-params>
      </query-method>

      <ejb-ql>
      <![CDATA[
      SELECT OBJECT(a) FROM restaurant a WHERE a.restaurantName = ?1
      ]]>
      </ejb-ql>




      Food Menu EJB
      <ejb-name>MenuEJB</ejb-name>

      <local-home>eric.foodsunion.interfaces.MenuLocalHome</local-home>
      eric.foodsunion.interfaces.MenuLocal
      <ejb-class>eric.foodsunion.ejb.MenuEJB</ejb-class>

      <persistence-type>Container</persistence-type>
      <prim-key-class>eric.foodsunion.pk.MenuPK</prim-key-class>
      False
      <cmp-version>2.x</cmp-version>
      <abstract-schema-name>foodmenu</abstract-schema-name>

      <cmp-field><field-name>menuID</field-name></cmp-field>




      <ejb-relation>
      <ejb-relation-name>Restaurant-Menu</ejb-relation-name>

      <ejb-relationship-role>
      <ejb-relationship-role-name>restaurant-has-menu</ejb-relationship-role-name>

      One

      <relationship-role-source>
      restaurant
      <ejb-name>RestaurantEJB</ejb-name>
      </relationship-role-source>

      <cmr-field>
      menu
      <cmr-field-name>menu</cmr-field-name>
      </cmr-field>
      </ejb-relationship-role>

      <ejb-relationship-role>
      <ejb-relationship-role-name>menu-belongs-to-restaurants</ejb-relationship-role-name>

      Many
      <cascade-delete/>

      <relationship-role-source>
      <ejb-name>MenuEJB</ejb-name>
      </relationship-role-source>

      <cmr-field>
      <cmr-field-name>restaurants</cmr-field-name>
      <cmr-field-type>java.util.Set</cmr-field-type>
      </cmr-field>
      </ejb-relationship-role>
      </ejb-relation>



      <assembly-descriptor>
      <container-transaction>

      <ejb-name>RestaurantEJB</ejb-name>
      <method-intf>Local</method-intf>
      <method-name>*</method-name>



      <ejb-name>MenuEJB</ejb-name>
      <method-intf>Local</method-intf>
      <method-name>*</method-name>


      <trans-attribute>Required</trans-attribute>
      </container-transaction>
      </assembly-descriptor>
      </ejb-jar>

      ======================================================




      jbosscmp-jdbc.xml
      ========================================================
      <?xml version="1.0" encoding="UTF-8"?>

      <jbosscmp-jdbc>

      java:/MySqlDS
      <datasource-mapping>mySQL</datasource-mapping>

      <create-table>true</create-table>
      <remove-table>false</remove-table>
      <read-only>false</read-only>
      <time-out>300</time-out>
      <pk-constraint>true</pk-constraint>
      <fk-constraint>false</fk-constraint>
      <row-locking>false</row-locking>
      <preferred-relation-mapping>foreign-key</preferred-relation-mapping>
      <read-ahead>
      on-load
      <page-size>1000</page-size>
      <eager-load-group>*</eager-load-group>
      </read-ahead>
      <list-cache-max>1000</list-cache-max>



      <enterprise-beans>

      <ejb-name>RestaurantEJB</ejb-name>
      <row-locking>true</row-locking>
      <table-name>restaurant</table-name>

      <cmp-field>
      <field-name>restaurantID</field-name>
      <column-name>restaurant_id</column-name>
      <not-null/>
      </cmp-field>
      <cmp-field>
      <field-name>restaurantName</field-name>
      <column-name>restaurant_name</column-name>
      <jdbc-type>BLOB</jdbc-type>
      <sql-type>BLOB</sql-type>
      <not-null/>
      </cmp-field>


      <query-method>
      <method-name>findByRestaurantName</method-name>
      <method-params>
      <method-param>java.lang.String</method-param>
      </method-params>
      </query-method>

      <jboss-ql>
      <![CDATA[
      SELECT OBJECT(a) FROM restaurant a WHERE a.restaurantName = ?1
      ]]>
      </jboss-ql>





      <ejb-name>MenuEJB</ejb-name>
      <row-locking>true</row-locking>
      <table-name>foodmenu</table-name>

      <cmp-field>
      <field-name>menuID</field-name>
      <column-name>menu_id</column-name>
      <not-null/>
      </cmp-field>



      </enterprise-beans>



      <ejb-relation>
      <ejb-relation-name>Restaurant-Menu</ejb-relation-name>
      <foreign-key-mapping/>

      <ejb-relationship-role>
      <ejb-relationship-role-name>restaurant-has-menu</ejb-relationship-role-name>
      <key-fields>
      <key-field>
      <field-name>restaurantID</field-name>
      <column-name>restaurant_id</column-name>
      </key-field>
      </key-fields>
      </ejb-relationship-role>

      <ejb-relationship-role>
      <ejb-relationship-role-name>menu-belongs-to-restaurants</ejb-relationship-role-name>
      <key-fields/>
      </ejb-relationship-role>
      </ejb-relation>



      </jbosscmp-jdbc>

      ========================================================


      Please help me !!

      Eric

        • 1. Re: Unknown Exception : EJBQL ParseException ???
          jboynes

          I believe because you have declared restaurantName as a BLOB which is not a valid comparison in EJB-QL. Try changing it to a varchar and see if that fixes it.

          • 2. Re: Unknown Exception : EJBQL ParseException ???
            eric138

            If that field must be BLOB, how can I do ???

            Bets regards,
            Eric

            • 3. Re: Unknown Exception : EJBQL ParseException ???
              jboynes

              In your other post you indicate restaurantName is a byte[] in Java. I don't think you can do this comparison with EJB-QL, but it might work if you use declared-sql. You may need to change the finder to take a byte[] as well or conversions in the driver may bite you.

              • 4. Re: Unknown Exception : EJBQL ParseException ???
                eric138

                Thanks for your teaching.

                But it is very strange, the exception is something strange.

                2002-11-19 12:46:49,380 WARN [org.jboss.system.ServiceController] Problem starting service jboss.j2ee:jndiName=eric/foodsunion/local/FoodMenu,service=EJB
                org.jboss.deployment.DeploymentException: Error compiling ejbql; - nested throwable: (org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "1" at line 1, column 61.
                Was expecting one of:
                <VALUE_CLASS_VALUED_PARAMETER> ...
                <VALUE_CLASS_VALUED_PATH> ...
                )



                It showed that the error starting from FoodMenu, but I did not declare any EJB-QL for the FoodMenu EJB.


                Eric