aspose file tools*
The moose likes JBoss/WildFly and the fly likes Can't deploy EJB to JBOSS after adding '@ejb.finder' clause Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Products » JBoss/WildFly
Bookmark "Can Watch "Can New topic
Author

Can't deploy EJB to JBOSS after adding '@ejb.finder' clause

Ivan
Greenhorn

Joined: Jul 25, 2005
Posts: 10
Hi. I use Eclipse to build CMP, I could deploy the applicaton to JBOSS previously, but encounter the following error message after adding the '@ejb.finder' clause in UserBean. Please help.

[Server.log]
2005-07-26 02:06:32,562 WARN [org.jboss.ejb.EJBDeployer.verifier] EJB spec violation:
Bean : User
Method : public abstract Collection listAll() throws FinderException, RemoteException
Section: 12.2.9
Warning: Each home method must match a method defined in the entity bean class.

2005-07-26 02:06:32,578 DEBUG [org.jboss.ejb.EJBDeployer.verifier] Bean checked: Fibo: Verified.
2005-07-26 02:06:32,578 ERROR [org.jboss.deployment.MainDeployer] Could not create deployment: file:/C:/jboss-4.0.3RC1/server/default/tmp/deploy/tmp55480FiboApp.ear-contents/FiboEJB.jar
org.jboss.deployment.DeploymentException: Verification of Enterprise Beans failed, see above for error messages.
at org.jboss.ejb.EJBDeployer.create(EJBDeployer.java:564)
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:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)



[UserBean]
.....
/**
* @ejb.bean name="User"
* display-name="Name for User"
* description="Description for User"
* jndi-name="ejb/User"
* type="CMP"
* cmp-version="2.x"
* view-type="both"
*
* @ejb.finder
* signature="java.util.Collection listAll()"
* query="SELECT OBJECT(c) FROM USER c"
*
* @jboss.query
* signature="java.util.Collection listAll()"
* query="SELECT OBJECT(c) FROM USER c"
*/
public abstract class UserBean implements EntityBean {

public UserBean() {
super();
// TODO Auto-generated constructor stub
}
......




[ejb-jar.xml]
.....
<!-- Entity Beans -->
<entity >
<description><![CDATA[Description for User]]></description>
<display-name>Name for User</display-name>

<ejb-name>User</ejb-name>

<home>tutorial.interfaces.UserHome</home>
<remote>tutorial.interfaces.User</remote>
<local-home>tutorial.interfaces.UserLocalHome</local-home>
<local>tutorial.interfaces.UserLocal</local>

<ejb-class>tutorial.ejb.UserCMP</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>tutorial.interfaces.UserPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>User</abstract-schema-name>
<cmp-field >
<description><![CDATA[Getter for CMP Field userid]]</description>
<field-name>userid</field-name>
</cmp-field>
<cmp-field >
<description><![CDATA[Getter for CMP Field password]]</description>
<field-name>password</field-name>
</cmp-field>
<cmp-field >
<description><![CDATA[Getter for CMP Field group]]></description>
<field-name>group</field-name>
</cmp-field>

<query>
<query-method>
<method-name>listAll</method-name>
<method-params>
</method-params>
</query-method>
<ejb-ql><![CDATA[SELECT OBJECT(c) FROM USER c]]></ejb-ql>
</query>
<!-- Write a file named ejb-finders-UserBean.xml if you want to define extra finders. -->
</entity>
.....



Ivan
norman richards
Author
Ranch Hand

Joined: Jul 21, 2003
Posts: 367
Finder methods must start with "find", so change your method name to "findAll".
Ivan
Greenhorn

Joined: Jul 25, 2005
Posts: 10
Thanks ! I can now deploy the application to Jboss successfully.
However, there is an exception when I can call the "findAll()" function in CMP thru' JSP.

11:20:09,734 ERROR [User#findAll] Find failed
java.sql.SQLException: Table 'irs.xuser' doesn't exist
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2978)

I haven't defined any sql setting like 'irs.xuser' and I don't know where it come from. Seems it is generated by xdoclet or EJBQL.
"irs" is the mySQL database name of my application and 'user' should be the valid table name of my bean

Below please find my program setting

[UserBean]
.....
import ....
/**
* @ejb.bean name="User"
* display-name="Name for User"
* description="Description for User"
* jndi-name="ejb/User"
* type="CMP"
* cmp-version="2.x"
* view-type="both"
*
* @ejb.persistence table-name = "user"
*
* @ejb.transaction type= "Required"
*
* @ejb.finder
* signature="java.util.Collection findAll()"
* query="SELECT OBJECT(u) FROM User AS u"
*
*/
public abstract class UserBean implements EntityBean {

private EntityContext _context;

public UserBean() {
super();
// TODO Auto-generated constructor stub
}
........


[ejb-jar]
.....
<!-- Entity Beans -->
<entity >
<description><![CDATA[Description for User]]></description>
<display-name>Name for User</display-name>

<ejb-name>User</ejb-name>

<home>tutorial.interfaces.UserHome</home>
<remote>tutorial.interfaces.User</remote>
<local-home>tutorial.interfaces.UserLocalHome</local-home>
<local>tutorial.interfaces.UserLocal</local>

<ejb-class>tutorial.ejb.UserCMP</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>tutorial.interfaces.UserPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>User</abstract-schema-name>
<cmp-field >
<description><![CDATA[Getter for CMP Field userid]]></description>
<field-name>userid</field-name>
</cmp-field>
<cmp-field >
<description><![CDATA[Getter for CMP Field password]]></description>
<field-name>password</field-name>
</cmp-field>
<cmp-field >
<description><![CDATA[Getter for CMP Field group]]></description>
<field-name>group</field-name>
</cmp-field>

<query>
<query-method>
<method-name>findAll</method-name>
<method-params>
</method-params>
</query-method>
<ejb-ql><![CDATA[SELECT OBJECT(c) FROM User AS c]]></ejb-ql>
</query>
<!-- Write a file named ejb-finders-UserBean.xml if you want to define extra finders. -->
</entity>
.......

[jbosscmp-jdbc.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">

<jbosscmp-jdbc>
<defaults>
<datasource>java:/MySqlDS</datasource>
<datasource-mapping>mySQL</datasource-mapping>
<create-table>false</create-table>
</defaults>
<enterprise-beans>
<!--
To add beans that you have deployment descriptor info for, add
a file to your XDoclet merge directory called jbosscmp-jdbc-beans.xml
that contains the <entity></entity> markup for those beans.
-->
<entity>
<ejb-name>User</ejb-name>
<cmp-field>
<field-name>userid</field-name>
<column-name>userid</column-name>
</cmp-field>
<cmp-field>
<field-name>password</field-name>
<column-name>password</column-name>
</cmp-field>
<cmp-field>
<field-name>group</field-name>
<column-name>group</column-name>
</cmp-field>
</entity>
</enterprise-beans>
</jbosscmp-jdbc>

Thanks
Ivan
 
Consider Paul's rocket mass heater.
 
subject: Can't deploy EJB to JBOSS after adding '@ejb.finder' clause