Pessoal,
Estou lendo o livro EJB 3.0 da O’Rielly e não estou conseguindo completar o exercício do capítulo 4.
Gostaria muito de contar com a ajuda de vcs, até mesmo de quem já estudou este livro.
No momento em que inicializo o servidor JBoss 5.0 ele acusa o seguinte:
*** CONTEXTS MISSING DEPENDENCIES: Name -> Dependency{Required State:Actual State}
jboss.j2ee:jar=Cap4.jar,name=TravelAgentBean,service=EJB3
-> <UNKNOWN>{Described:** UNRESOLVED Demands 'persistence.units:unitName=titan **}
E quando executo o exemplo ele não realiza a tarefa do exercício que é persistir os registros na tabela Cabin e imprimir os registros depois.
Abaixo segue a estrutura do meu projeto e as respectivas classes, e arquivos de configuração.
Gostaria muito da ajuda de vcs e agradeço antecipadamente.
Interface Remota - TravelAgentRemote
package dev.com.titan.travelagent;
import javax.ejb.Remote;
import dev.com.titan.domain.Cabin;
@Remote
public interface TravelAgentRemote{
public void createCabin(Cabin cabin);
public Cabin findCabin(int pKey);
}
Classe Bean - TravelAgentBean
package dev.com.titan.travelagent;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import dev.com.titan.domain.Cabin;
@Stateless
public class TravelAgentBean implements TravelAgentRemote{
@PersistenceContext(unitName="titan") private EntityManager manager;
public void createCabin(Cabin cabin){
manager.persist(cabin);
}
public Cabin findCabin(int pKey){
return manager.find(Cabin.class, pKey);
}
}
Entidade - Cabin
package dev.com.titan.domain;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Id;
@Entity
@Table(name="CABIN")
public class Cabin implements java.io.Serializable
{
private int id;
private String name;
private int deckLevel;
private int shipId;
private int bedCount;
@Id
@Column(name="ID")
public int getId()
{
return id;
}
public void setId(int pk)
{
id = pk;
}
@Column(name="NAME")
public String getName()
{
return name;
}
public void setName(String str)
{
name = str;
}
@Column(name="DECK_LEVEL")
public int getDeckLevel()
{
return deckLevel;
}
public void setDeckLevel(int level)
{
deckLevel = level;
}
@Column(name="SHIP_ID")
public int getShipId()
{
return shipId;
}
public void setShipId(int sid)
{
shipId = sid;
}
@Column(name="BED_COUNT")
public int getBedCount()
{
return bedCount;
}
public void setBedCount(int bed)
{
bedCount = bed;
}
}
Classe Cliente - Client
package dev.com.titan.clients;
import dev.com.titan.travelagent.TravelAgentRemote;
import dev.com.titan.domain.Cabin;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
public class Client{
public static void main(String [] args){
try{
Context jndiContext = getInitialContext();
Object ref = jndiContext.lookup("TravelAgentBean/remote");
TravelAgentRemote dao = (TravelAgentRemote)ref;
Cabin cabin_1 = new Cabin();
cabin_1.setId(1);
cabin_1.setName("Master Suite");
cabin_1.setDeckLevel(1);
cabin_1.setShipId(1);
cabin_1.setBedCount(3);
dao.createCabin(cabin_1);
Cabin cabin_2 = dao.findCabin(1);
System.out.println(cabin_2.getName());
System.out.println(cabin_2.getDeckLevel());
System.out.println(cabin_2.getShipId());
System.out.println(cabin_2.getBedCount());
}
catch (javax.naming.NamingException ne){
ne.printStackTrace();
}
}
public static Context getInitialContext() throws javax.naming.NamingException{
return new javax.naming.InitialContext();
}
}
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="titan" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/TitanDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
titandb-ds.xml
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>TitanDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/titandb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>igor</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>