Configurar Conexão Com Banco no Projeto EJB

Olá pessoal, estou iniciando estudos de EJB 3.1
e estou tentando configurar a conexão com o banco de dados do projeto.
Porem não queria deixar a configuração do banco no datasource no servidor.
Estou tentando configurar a conexão no projeto mesmo, não encontrei nenhum exemplo assim na internet.
Com EJB isso é possivel ?

Estou tentando fazer isso, porem estou tomando o seguinte erro.

12:46:45,341 INFO [org.jboss.modules] JBoss Modules version 1.0.2.GA
12:46:45,622 INFO [org.jboss.msc] JBoss MSC version 1.0.1.GA
12:46:45,684 INFO [org.jboss.as] JBoss AS 7.0.2.Final "Arc" starting
12:46:46,683 WARN [org.jboss.as] No security realm defined for native management service, all access will be unrestricted.
12:46:46,698 INFO [org.jboss.as] creating http management service using network interface (management) port (9990)
12:46:46,762 WARN [org.jboss.as] No security realm defined for http management service, all access will be unrestricted.
12:46:46,777 INFO [org.jboss.as.logging] Removing bootstrap log handlers
12:46:46,808 INFO [org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying JDBC-compliant driver class org.h2.Driver (version 1.2)
12:46:46,824 INFO [org.jboss.as.clustering.infinispan.subsystem] (Controller Boot Thread) Activating Infinispan subsystem.
12:46:46,933 INFO [org.jboss.as.naming] (Controller Boot Thread) JBAS011800: Activating Naming Subsystem
12:46:46,964 INFO [org.jboss.as.osgi] (Controller Boot Thread) JBAS011910: Activating OSGi Subsystem
12:46:46,996 INFO [org.jboss.as.security] (Controller Boot Thread) Activating Security Subsystem
12:46:46,996 INFO [org.jboss.as.naming] (MSC service thread 1-4) JBAS011802: Starting Naming Service
12:46:47,011 INFO [org.jboss.remoting] (MSC service thread 1-4) JBoss Remoting version 3.2.0.Beta2
12:46:47,027 INFO [org.xnio] (MSC service thread 1-4) XNIO Version 3.0.0.Beta3
12:46:47,058 INFO [org.xnio.nio] (MSC service thread 1-4) XNIO NIO Implementation Version 3.0.0.Beta3
12:46:47,370 INFO [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-1) The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jre6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;native;C:/Program Files (x86)/Java/jre6/bin/client;C:/Program Files (x86)/Java/jre6/bin;C:/Program Files (x86)/Java/jre6/lib/i386;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_25\bin;C:\Program Files (x86)\Windows Live\Shared;D:\Instala?äes\Eclipse\eclipse-jee-juno;;.
12:46:47,401 INFO [org.jboss.as.ee] (Controller Boot Thread) Activating EE subsystem
12:46:48,212 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-1) Starting Coyote HTTP/1.1 on http-localhost-127.0.0.1-8080
12:46:48,291 INFO [org.jboss.as.connector] (MSC service thread 1-1) Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final)
12:46:48,338 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) Bound data source [java:jboss/datasources/ExampleDS]
12:46:48,369 INFO [org.jboss.as.jmx.JMXConnectorService] (MSC service thread 1-3) Starting remote JMX connector
12:46:48,401 INFO [org.jboss.as.remoting] (MSC service thread 1-4) Listening on /127.0.0.1:9999
12:46:48,494 INFO [org.jboss.as.deployment] (MSC service thread 1-4) Started FileSystemDeploymentService for directory D:\Jboss\standalone\deployments
12:46:48,510 INFO [org.jboss.as.deployment] (DeploymentScanner-threads - 1) Found AppTesteEAR.ear in deployment directory. To trigger deployment create a file called AppTesteEAR.ear.dodeploy
12:46:48,510 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.2.Final "Arc" started in 3465ms - Started 93 of 148 services (55 services are passive or on-demand)
12:46:48,525 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) Starting deployment of "AppTesteEAR.ear"
12:46:48,588 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) Starting deployment of "AppTesteWeb.war"
12:46:48,588 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "AppTesteEJB.jar"
12:46:48,947 INFO [org.jboss.jpa] (MSC service thread 1-4) read persistence.xml for apptesteejb
12:46:49,118 INFO [org.jboss.as.jpa] (MSC service thread 1-2) added javax.persistence.api, javaee.api, org.jboss.as.jpa, org.javassist dependencies to AppTesteEAR.ear
12:46:49,118 INFO [org.jboss.as.jpa] (MSC service thread 1-2) added (default provider) org.hibernate dependency to application deployment (since 1 PU(s) didn't specify jboss.as.jpa.providerModule)
12:46:49,118 INFO [org.jboss.as.jpa] (MSC service thread 1-2) added org.hibernate dependency to application deployment
12:46:49,118 INFO [org.jboss.as.jpa] (MSC service thread 1-2) added javax.persistence.api, javaee.api, org.jboss.as.jpa, org.javassist dependencies to AppTesteEJB.jar
12:46:49,118 INFO [org.jboss.as.jpa] (MSC service thread 1-2) added (default provider) org.hibernate dependency to application deployment (since 1 PU(s) didn't specify jboss.as.jpa.providerModule)
12:46:49,118 INFO [org.jboss.as.jpa] (MSC service thread 1-2) added org.hibernate dependency to application deployment
12:46:49,134 INFO [org.jboss.as.jpa] (MSC service thread 1-3) added javax.persistence.api, javaee.api, org.jboss.as.jpa, org.javassist dependencies to AppTesteWeb.war
12:46:49,212 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-4) JNDI bindings for session bean named Calculadora in deployment unit subdeployment "AppTesteEJB.jar" of deployment "AppTesteEAR.ear" are as follows:

java:global/AppTesteEAR/AppTesteEJB/Calculadora!sessionbeans.ICalculadora
java:app/AppTesteEJB/Calculadora!sessionbeans.ICalculadora
java:module/Calculadora!sessionbeans.ICalculadora
java:global/AppTesteEAR/AppTesteEJB/Calculadora
java:app/AppTesteEJB/Calculadora
java:module/Calculadora

12:46:49,212 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-4) JNDI bindings for session bean named Livro in deployment unit subdeployment "AppTesteEJB.jar" of deployment "AppTesteEAR.ear" are as follows:

java:global/AppTesteEAR/AppTesteEJB/Livro!br.com.ejb.model.ILivro
java:app/AppTesteEJB/Livro!br.com.ejb.model.ILivro
java:module/Livro!br.com.ejb.model.ILivro
java:global/AppTesteEAR/AppTesteEJB/Livro
java:app/AppTesteEJB/Livro
java:module/Livro

12:46:49,430 INFO [org.jboss.jpa] (MSC service thread 1-4) starting Persistence Unit Service 'AppTesteEAR.ear/AppTesteEJB.jar#apptesteejb' 
12:46:49,837 INFO [org.hibernate.annotations.common.Version] (MSC service thread 1-4) HCANN000001: Hibernate Commons Annotations {4.0.0.CR2}
12:46:49,852 INFO [org.hibernate.Version] (MSC service thread 1-4) HHH00412:Hibernate Core {4.0.0.CR2}
12:46:49,852 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-4) HHH00206:hibernate.properties not found
12:46:49,852 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-4) HHH00021:Bytecode provider name : javassist
12:46:49,899 INFO [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-4) HHH00204:Processing PersistenceUnitInfo [
name: apptesteejb
...]
12:46:49,993 WARN [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-4) HHH00022:c3p0 properties were encountered, but the org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider provider class was not found on the classpath; these properties are going to be ignored.
12:46:50,008 INFO [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] (MSC service thread 1-4) HHH00402:Using Hibernate built-in connection pool (not for production use!)
12:46:50,008 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.persistenceunit."AppTesteEAR.ear/AppTesteEJB.jar#apptesteejb": org.jboss.msc.service.StartException in service jboss.persistenceunit."AppTesteEAR.ear/AppTesteEJB.jar#apptesteejb": Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1780) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [:1.6.0_37]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [:1.6.0_37]
at java.lang.Thread.run(Unknown Source) [:1.6.0_37]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: apptesteejb] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:908)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:884)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
at org.jboss.as.jpa.service.PersistenceUnitService.createContainerEntityManagerFactory(PersistenceUnitService.java:143)
at org.jboss.as.jpa.service.PersistenceUnitService.start(PersistenceUnitService.java:77)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
... 3 more
Caused by: org.hibernate.HibernateException: Specified JDBC Driver org.postgresql.Driver class not found
at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:102)
at org.hibernate.service.internal.BasicServiceRegistryImpl.configureService(BasicServiceRegistryImpl.java:80)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:145)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:118)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:208)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:85)
at org.hibernate.service.internal.BasicServiceRegistryImpl.configureService(BasicServiceRegistryImpl.java:80)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:145)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:118)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:70)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2253)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2249)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1720)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:76)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899)
... 9 more
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver from [Module "org.hibernate:main" from local module loader @7a84e4 (roots: D:\Jboss\modules)]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:361)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:333)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:310)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:103)
at java.lang.Class.forName0(Native Method) [:1.6.0_37]
at java.lang.Class.forName(Unknown Source) [:1.6.0_37]
at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:191)
at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:99)
... 23 more

12:46:50,180 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-3) Inicializando Mojarra 2.1.3 (SNAPSHOT 20110825) para o contexto '/AppTesteWeb'
12:46:50,227 INFO [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] (Finalizer) HHH00030:Cleaning up connection pool [null]
12:46:51,334 INFO [org.hibernate.validator.util.Version] (MSC service thread 1-3) Hibernate Validator 4.2.0.Final
12:46:51,403 AVISO [javax.enterprise.resource.webcontainer.jsf.managedbean] (MSC service thread 1-3) JSF1074: O bean gerenciado denominado 'calculadoraManagedBean' já foi registrado. Substituindo o tipo de classe do bean gerenciado managedbean.CalculadoraManagedBean por managedbean.CalculadoraManagedBean.
12:46:51,840 INFO [org.primefaces.webapp.PostConstructApplicationEventListener] (MSC service thread 1-3) Running on PrimeFaces 3.3.1
12:46:51,902 INFO [org.jboss.web] (MSC service thread 1-3) registering web context: /AppTesteWeb
12:46:52,120 INFO [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployment of "AppTesteEAR.ear" was rolled back with failure message {"Failed services" => {"jboss.persistenceunit.\"AppTesteEAR.ear/AppTesteEJB.jar#apptesteejb\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"AppTesteEAR.ear/AppTesteEJB.jar#apptesteejb\": Failed to start service"}}
12:46:52,136 INFO [org.jboss.as.server.deployment] (MSC service thread 1-3) Stopped deployment AppTesteEJB.jar in 22ms
12:46:52,136 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) Stopped deployment AppTesteWeb.war in 25ms
12:46:52,136 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) Stopped deployment AppTesteEAR.ear in 26ms
12:46:52,136 ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 1) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Failed services" => {"jboss.persistenceunit.\"AppTesteEAR.ear/AppTesteEJB.jar#apptesteejb\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"AppTesteEAR.ear/AppTesteEJB.jar#apptesteejb\": Failed to start service"}}}}

e meu persistence.xml está assim

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">

<persistence-unit name="apptesteejb" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/apptesteejb"/>
<property name="hibernate.connection.username" value="postgres" />
<property name="hibernate.connection.password" value="postgres" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.c3p0.acquireIncrement" value="50"/>
<property name="hibernate.c3p0.idleConnectionTestPeriod" value="60"/> 
<property name="hibernate.c3p0.maxPoolSize" value="100"/> 
<property name="hibernate.c3p0.minPoolSize" value="10"/> 
<property name="hibernate.c3p0.maxStatements" value="200"/> 
<property name="hibernate.c3p0.unreturnedConnectionTimeout" value="60"/> 
</properties>
</persistence-unit>
</persistence>

O erro pelo que entendi, mostra que o driver não foi encontrado.
Porem criei uma pasta LIB dentro do META-INF do projeto EJB.
e adicionei o driver nos jars do projeto.

Isso eu estou fazendo errado ?

Como referencio o driver pro projeto EJB achar o mesmo ?

Você está usando JBoss 7?

Se sim, você vai precisar usar modules.

Sim.
Estou usando Jboss 7.

Onde configuro esses modules ?
No aplication.xml ?
Terias como postar um exemplo ?

Obrigado pela rápida resposta.

Aqui mostra: Aplicação Web Completa JSF EJB JPA JAAS

C não me engano, na página 5 ou 6.

Cara, se nao estou enganado, voce tem que trocar “JTA” por “RESOURCE_LOCAL” no seu persistence.xml. Faz tempo que me deparei com a necessidade de configurar e nao me lembro dos detalhes!!!

Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver .... Caused by: org.hibernate.HibernateException: Specified JDBC Driver org.postgresql.Driver class not found
Cade o Driver do PostgreSQL?

Hebert Coelho.
No exemplo passado, é configurado um module dentro do servidor de aplicação certo ?
Pelo menos foi o que entendi com essa frase

“Vamos criar um módulo (module) do Postgres. Dentro do servidor do Jboss 7 crie o seguinte diretório: ?SEU_JBOSS/modules/org/postgresql/main?.”

Poren preciso que essa configuração fique no meu projeto EJB.
Isso é possivel ??

Vini Fernandes
Já fiz isso, pois varios exemplo que li, estavam desta maneira e o erro persistiu

jweibe
O driver eu coloquei dentro de uma pasta lib no meu projeto EJB,
ou seja, dentro do diretorio ejbmudule/META-INF/lib
depois fui nas configurações do projeto e adicionei o jar.
Essa é justamente a minha duvida, como adicionar jar esternos no meu projeto EJB com Jboss 7 ??

So por medida de teste, tente colocar o .jar do seu Driver na biblioteca do servidor. Sei que isso possa soar estranho, mas servira de teste para identificar se voce inseriur as dependencias do seu .ear no lugar correto.

Eu não estudei essa possibilidade.

Repare que você está colocando apenas o driver fora da aplicação, qual o problema disso?

Hebert Coelho
Perdão, realmente não reparei isso.
Irei testar.
Obrigado

Hebert Coelho

Atraves do link, consegui resolver o problema.
Mas por favor, me esclareça mais uma duvida.
No seu tutorial configurei um datasource em ?SEU_JBOSS/standalone/configuration/standalone.xml?.
porem quando isso for para produção, terei que configurar isso no standalone.xml do Jboss do servidor de hospedagem?

[quote=Deverling]Hebert Coelho

Atraves do link, consegui resolver o problema.
Mas por favor, me esclareça mais uma duvida.
No seu tutorial configurei um datasource em ?SEU_JBOSS/standalone/configuration/standalone.xml?.
porem quando isso for para produção, terei que configurar isso no standalone.xml do Jboss do servidor de hospedagem?

[/quote]uhum

Vini Fernandes
Coloquei o driver dentro da pasta lib conforme abaixo.

obs.: Estou usando o Jboss 7.0.2

Hebert Coelho
Perdão pela pergunta, mas isso não seria arriscado ?
E qual servidor de hospedagem voce recomenda ?

[quote=Deverling]Hebert Coelho
Perdão pela pergunta, mas isso não seria arriscado ?
E qual servidor de hospedagem voce recomenda ?[/quote]Por que você acha que seria?
Eu utilizo o Integrator e é um serviço bom.

Um parceiro meu está utilizando a Amazon WS e tá falando que é um trem bom.

Te pergunto isso porque em outras aplicações web java eu desenvolvi utilizando Spring.
A configuração ficava na aplicação, isso me da a sensação de ser mais seguro, porem é uma sensação.

Minha dúvida é como eu configuraria isso no servidor de hospedagem, por exemplo,
em PHP existem varios servidores compartilhados qua ao acessar o FTP, voce consegue ver as outras aplicações
que estão no mesmo servidor,porem não tem permissão de acesso, logo minha dúvida seria, nesta hospegagem eu teria uma VM, onde somente eu
enxergaria aquele standalone.xml, porque se o standalone fosse compartilhado, outros desenvolvedores iriam enxergar essas configurações.

Sei que é uma dúvida bem básica, mas fico mto agradecido pela ajuda.

[quote=Deverling]Te pergunto isso porque em outras aplicações web java eu desenvolvi utilizando Spring.
A configuração ficava na aplicação, isso me da a sensação de ser mais seguro, porem é uma sensação.

Minha dúvida é como eu configuraria isso no servidor de hospedagem, por exemplo,
em PHP existem varios servidores compartilhados qua ao acessar o FTP, voce consegue ver as outras aplicações
que estão no mesmo servidor,porem não tem permissão de acesso, logo minha dúvida seria, nesta hospegagem eu teria uma VM, onde somente eu
enxergaria aquele standalone.xml, porque se o standalone fosse compartilhado, outros desenvolvedores iriam enxergar essas configurações.

Sei que é uma dúvida bem básica, mas fico mto agradecido pela ajuda.

[/quote]Tranquilo. Mas é só a sensação mesmo. A pessoa pode ter acesso ao arquivo standalone.xml ou então ao war/ear em que se encontra sua aplicação. Com isso a pessoa poderia abrir teu war/ear e pegar os dados do mesmo modo. ^^

Na amazon você tem uma máquina só sua na cloud. Não vê nada de ninguém. [=

Integrator você chega a ver no DB (dependendo do seu plano) mas sem acesso.

Uhm, me corrige se eu estiver errado.
Então, quando eu gerar meu war/ear o standalone.xml, irá junto neste “pacote” ?

[quote=Deverling]Uhm, me corrige se eu estiver errado.
Então, quando eu gerar meu war/ear o standalone.xml, irá junto neste “pacote” ?
[/quote]Quando você fez localmente, onde estava seu arquivo?

Está na pasta onde desconpactei o Jboss 7.0.2
em \Jboss\standalone\configuration\standalone.xml
neste arquivo xml coloquei a configuração do datasouce.
como dizia seu exemplo na pagina 5 ou 6.
Att