ERROR EJB connecting DB throw datasource
claudia.pt Oct 7, 2005 12:06 PMHello people!
I need help :(
I have a sateless session bean and i want access a database.
For that i already did:
1) Create a new datasource
Copied jar files from JDBC (SQL Server) Driver to C:\jboss-4.0.2\server\default\lib
Create mssql-ds.xml in the folder C:\jboss-4.0.2\server\default\deploy
<?xml version="1.0" encoding="UTF-8"?>
<local-tx-datasource>
<jndi-name>MSSQLDS</jndi-name>
<connection-url>jdbc:microsoft:sqlserver://192.168.193.52:1433;DatabaseName=aveiro_aguas_2</connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name>sa</user-name>
<type-mapping>MS SQLSERVER2000</type-mapping>
</local-tx-datasource>
In file C:\jboss-4.0.2\server\default\conf\standardjaws.xml i configured the following elements:
java:/MSSQLDS
<type-mapping>MS SQLServer2000</type-mapping>
2) I tested my datasource with a jsp and it is working fine!!!
3) For my EJB access the same database i wrote the following bean:
package comtwo;
import java.util.*;
import javax.ejb.*;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.*;
/**
*
* <!-- begin-user-doc -->
* A generated session bean
* <!-- end-user-doc -->
* *
* <!-- begin-xdoclet-definition -->
* @ejb.bean name="My2"
* description="A session bean named My2"
* display-name="My2"
* jndi-name="My2"
* type="Stateless"
* transaction-type="Container"
*
* <!-- end-xdoclet-definition -->
* @generated
*/
public abstract class My2Bean implements javax.ejb.SessionBean {
/**
*
* <!-- begin-xdoclet-definition -->
* @ejb.create-method view-type="remote"
* <!-- end-xdoclet-definition -->
* @generated
*
* //TODO: Must provide implementation for bean create stub
*/
public void ejbCreate() throws CreateException{
try {
makeConnection();
} catch (Exception ex) {
throw new CreateException(ex.getMessage());
}
}
/**
*
* <!-- begin-xdoclet-definition -->
* @ejb.create-method view-type="remote"
* <!-- end-xdoclet-definition -->
* @generated
*
* //TODO: Must provide implementation for bean create stub
*/
public void ejbRemove() {
try {
con.close();
} catch (SQLException ex) {
throw new EJBException(ex.getMessage());
}
}
/**
*
* <!-- begin-xdoclet-definition -->
* @ejb.interface-method view-type="remote"
* <!-- end-xdoclet-definition -->
* @generated
*
* //TODO: Must provide implementation for bean method stub
*/
public String say2() {
return "TWO";
}
/**
*
* <!-- begin-xdoclet-definition -->
* @ejb.create-method view-type="remote"
* <!-- end-xdoclet-definition -->
* @generated
*
* //TODO: Must provide implementation for bean create stub
*/
public My2Bean() {}
//DataBase related Routines
DataSource ds = null;
Connection con = null;
// PreparedStatement pr = null;
Statement st = null;
String dsJNDI = "java:/MSSQLDS";
InitialContext ic;
/**
*
* <!-- begin-xdoclet-definition -->
* @ejb.create-method view-type="remote"
* <!-- end-xdoclet-definition -->
* @generated
*
* //TODO: Must provide implementation for bean create stub
*/
private void makeConnection()throws NamingException, SQLException {
ic = new InitialContext();
ds = (DataSource) ic.lookup(dsJNDI);
con = ds.getConnection();
}
}
4) My deployment descriptor is
<?xml version="1.0" encoding="UTF-8"?>
<!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 >
<![CDATA[MyEJBTest2 generated by eclipse wtp xdoclet extension.]]>
<display-name>MyEJBTest2</display-name>
<enterprise-beans>
<!-- Session Beans -->
<![CDATA[A session bean named My2]]>
<display-name>My2</display-name>
<ejb-name>My2</ejb-name>
comtwo.My2Home
comtwo.My2
<local-home>comtwo.My2LocalHome</local-home>
comtwo.My2Local
<ejb-class>comtwo.My2Session</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</enterprise-beans>
<ejb-client-jar>MyEJBTest2Client.jar</ejb-client-jar>
</ejb-jar>
5) I create a new file named jboss.xml in META-INF
<?xml version="1.0" encoding="UTF-8"?>
<enterprise-beans>
<ejb-name>My2</ejb-name>
<jndi-name>My2</jndi-name>
<resource-ref>
<res-ref-name>jdbc/MSSQLDS</res-ref-name>
<jndi-name>java:/MSSQLDS</jndi-name>
</resource-ref>
</enterprise-beans>
6) When i made depoly i get ERROR!!!
6:17:10,523 ERROR [MainDeployer] could not create deployment: file:/C:/jboss-4.0.2/server/default/tmp/deploy/tmp43901MyEJBTest2EAR.ear-contents/MyEJBTest2.jar
org.jboss.deployment.DeploymentException: Error in jboss.xml for Bean null: expected one ejb-name tag
Please help me...
What it is wrong???
I'm using JBoss4.0.2 + WTP + XDoclet1.2.3 + Eclipse3.1
Thankxx
CLÁUDIA