The user must supply a JDBC connection

Pessoal, esta dando o erro abaixo na linha.
Obs. : Estou usando o jboss-4.2.3.GA.

   List result = criteria.list();
public class main {
	public static void main(String[] args) {
	    System.out.println("inicio");
 	    EntityManagerFactory factory= Persistence.createEntityManagerFactory("teste");
	    EntityManager manager= factory.createEntityManager();
  	    Session session = (Session) manager.getDelegate();  
  	    Criteria criteria = session.createCriteria(PrecoPorMetodo.class);	    	   
	    criteria.setProjection(Projections.rowCount()); 	    	            	        
	    List result = criteria.list();
	    System.out.println("No. of rows: "+result);        
	   	   
         	System.out.println("fim");	
	}
}

persistence.xml
<?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="teste" transaction-type="RESOURCE_LOCAL">
	<provider>org.hibernate.ejb.HibernatePersistence</provider>  	
	           <class>modelo.PrecoPorMetodo</class>
	          
	   <properties>
			<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://xxxxxxxxxxxxxx/cqa_limsTESTE" />
			<property name="javax.persistence.jdbc.user" value="xxxxxxxx" />
			<property name="javax.persistence.jdbc.password" value="xxxxx" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
			<property name="hibernate.connection.shutdown" value="true" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="false"/>
		</properties>
	</persistence-unit>
</persistence>

Fiz um pequenos projeto utilizando o main , que esta dando o erro abaixo :

erro :

Exception in thread “main” java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at modelo.main.main(main.java:40)

Olá Evandro. Vou tentar ajudar, mas preciso fazer algumas perguntas:

Quando você diz que está usando o JBoss, quer dizer que está fazendo o deploy de um web app nele?
Nesse caso, o método main que você publicou seria para reproduzir o problema?
Se for isso, tanto a aplicação do JBoss quanto o método main retornam a mesma pilha de erro?
Há alguma outra pilha de erro antes dessa no log?
O persistence.xml está em que diretório no web app? E em qual diretório quando você executa a classe com o método main?

Amigo,

Criei um projeto do zero, pois estou testando o JBOSS 4.2, para verificar algumas funcionalidades do JBOSS.

Há alguma outra pilha de erro antes dessa no log?
Exception in thread “main” java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at modelo.main.main(main.java:40)

O persistence.xml está em que diretório no web app? E em qual diretório quando você executa a classe com o método main?
Meu persistense esta no src/meta-inf.

o que pode ser ??

obrigado.

Evandro, não se ofenda com a pergunta, mas… você sabe a diferença entre um aplicativo java desktop e um aplicativo web (web application) executando num servidor de aplicação?
Qual IDE você está usando? Eclipse, Netbeans? Qual a opção de menu ou comando usado para executar esse teste que resulta no erro?

vamo ver se consigo explicar o meu caso.

Fiz uma pequena aplicacacao no main mesmo …para contar a quantidade de registro na tabela, e contou normalmente, porem estou utilizando o servidor TOMCAT 7, e estou dando manutenção em um sistema JAVA EE, e coloquei essa mesma rotina neste sistema e esta me retornando como NULO sendo que na minha aplicacao “HELLO WORLD (main do tomcat 7)”, esta me trazendo o resultado como 7, por exemplo

A minha ideia .é criar um outro projeto e colocar esse mesmo servidor que estou dando manutencao.

Obs. estou utilizando a mesma base de dados .

Estou utilizando o ECLIPSE INDIGO…e estou rodando o projeto normal , a maneira de rodar o projeto interfere alguma coisa ??

Eu questionei a forma de execução e a IDE porque o erro pode ser causado por questões de configuração. Por exemplo, o persistence.xml pode não estar sendo copiado no local adequado. Não parece ser esse o caso.

Você diz que o código funcionou executando o método main, provavelmente pela opção "Run As… > Java Application". Se for isso, significa que não existe mesmo nenhum erro no código e no persistence.xml do projeto em questão para a execução em um aplicativo convencional.

Entretanto, tratando-se de servidores de aplicação como tomcat 7 ou jboss a coisa muda. Primeiro que o projeto precisa ser do tipo adequado no eclipse.
Aí na hora de executar você provavelmente usa a opção "Run As… > Run on Server" para iniciar o tomcat. Depois acessaria uma URL que executar o código e retorna NULL.
Se entendi é isso que você está fazendo.

Entretanto, é preciso considerar que o driver de banco de dados precisa estar disponível para o tomcat e as vezes ocorrem problemas de classloader. No meu caso, eu tive que copiar o jar do driver para o diretório lib do tomcat. Não parece ser esse o caso, mas é bom verificar.

Outra coisa é que a configuração de conexões em web apps geralmente fica a cargo do container. No caso do tomcat, no context.xml

Eu tenho um exemplo funcional testado em Tomcat 6:

persistence.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;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"&gt; &lt;persistence-unit name="AgendaVisitas" transaction-type="RESOURCE_LOCAL"&gt; &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt; &lt;non-jta-data-source&gt;java:/comp/env/jdbc/AgendaVisitas&lt;/non-jta-data-source&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.Analista&lt;/class&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.Anexo&lt;/class&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.AnexoTemporario&lt;/class&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.Cliente&lt;/class&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.Configuracao&lt;/class&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.Entrada&lt;/class&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.LogAcao&lt;/class&gt; &lt;class&gt;br.com.autbank.abutils.agendavisitas.models.Usuario&lt;/class&gt; &lt;properties&gt; &lt;property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/&gt; &lt;/properties&gt; &lt;/persistence-unit&gt; &lt;/persistence&gt;

context.xml

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<Context cookies=“true” debug=“0” docBase=“agendavisitas” path="/agendavisitas" reloadable=“false” antiJARLocking=“false” antiResourceLocking=“false”>

&lt;Resource 
	  auth="Container" 
      description="Agenda de Visitas" 
      name="jdbc/AgendaVisitas" 
      type="javax.sql.DataSource" 
      factory="org.apache.commons.dbcp.BasicDataSourceFactory"
      driverClassName="net.sourceforge.jtds.jdbc.Driver" 
      url="jdbc:jtds:sqlserver://x.x.x.x/AGENDAVISITAS;instance=sqlexpress;useCursors=true;sendStringParametersAsUnicode=false;wsid=agendavisitas"
      username=""
      password=""
      checkLevelObject="2" 
      maxSize="10" /&gt;
      
&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="agendavisitas." suffix=".txt" timestamp="true"/&gt;

</Context>
[/code]

Talvez seja esse o problema, tente configurar o tomcat.

Suas propriedades estão com valores errados. Se não me engano esses valores ‘javax.****’ só estão padronizados no JPA 2.

Mude de:

<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://xxxxxxxxxxxxxx/cqa_limsTESTE" /> <property name="javax.persistence.jdbc.user" value="xxxxxxxx" /> <property name="javax.persistence.jdbc.password" value="xxxxx" />

Para:

<property name=hibernate.connection.driver_class" value="org.postgresql.Driver" /> <property name=hibernate.connection.url" value="jdbc:postgresql://xxxxxxxxxxxxxx/cqa_limsTESTE" /> <property name=hibernate.connection.username" value="xxxxxxxx" /> <property name=hibernate.connection.password" value="xxxxx" />

[quote=lsjunior]Suas propriedades estão com valores errados. Se não me engano esses valores ‘javax.****’ só estão padronizados no JPA 2.

Mude de:

<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://xxxxxxxxxxxxxx/cqa_limsTESTE" /> <property name="javax.persistence.jdbc.user" value="xxxxxxxx" /> <property name="javax.persistence.jdbc.password" value="xxxxx" />

Para:

<property name=hibernate.connection.driver_class" value="org.postgresql.Driver" /> <property name=hibernate.connection.url" value="jdbc:postgresql://xxxxxxxxxxxxxx/cqa_limsTESTE" /> <property name=hibernate.connection.username" value="xxxxxxxx" /> <property name=hibernate.connection.password" value="xxxxx" />[/quote]

Realmente é bom verificar qual é a versão do Hibernate, vi alguns fóruns em que isso causou problemas.
No projeto que usei como modelo para o código que postei anteriormente, tenho o Hibernate 3.6.10.Final que, graças ao maven, já inclui a api para o jpa 2, então nesse caso as configurações funcionam.