Datasource no Jetty

12 respostas
G

Olá pessoal!

Estou com um problema para configurar o datasource no Jetty, abaixo segue as configs…

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="PUSACCTB" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>java:comp/env/jdbc/SACCTBDS</non-jta-data-source>
        <class>......</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.connection.lc_ctype" value="ISO8859_1"/>
            <property name="hibernate.default_schema" value="public"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="use_sql_comments" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

web.xml

<resource-ref>
        <description>SACCTB Data Source</description>
        <res-ref-name>jdbc/SACCTBDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/SACCTB" reloadable="true" debug="0">
    <Resource name="jdbc/SACCTBDS"
              auth="Container"
              type="javax.sql.DataSource"
              maxActive="100"
              maxIdle="20"
              maxWait="5000"
              username="***"
              password="***"
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://localhost:5432/SACCTB">
    </Resource>
</Context>

<Configure id='SACCTB' class="org.mortbay.jetty.webapp.WebAppContext">
   <New id="SACCTBDS" class="org.mortbay.jetty.plus.naming.Resource">
      <Arg></Arg>
      <Arg>jdbc/SACCTBDS</Arg>
      <Arg>
         <New class="org.postgresql.ds.PGSimpleDataSource">
                 <Set name="User">***</Set>
                 <Set name="Password">***</Set>
                 <Set name="DatabaseName">SACCTB</Set>
                 <Set name="ServerName">localhost</Set>
                 <Set name="PortNumber">5432</Set>
         </New>
      </Arg>
   </New>
</Configure>

Acima esta o datasource que utilizo no tomcat e funciona sem problemas agora no jetty lança a excetion:

Caused by: javax.naming.NameNotFoundException; remaining name 'env/jdbc/SACCTBDS'
        at org.mortbay.naming.NamingContext.lookup(NamingContext.java:634)
        at org.mortbay.naming.NamingContext.lookup(NamingContext.java:665)
        at org.mortbay.naming.NamingContext.lookup(NamingContext.java:680)
        at org.mortbay.naming.java.javaRootURLContext.lookup(javaRootURLContext.java:112)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)

Alguem fez algo parecido no Jetty utilizando JPA(Hibernate) com datasorce e deu certo poste por favor :lol:

Desde já muito obrigado.

12 Respostas

A

Olá!

Estou enfrentando o mesmo problema com um Banco Firebird. Você conseguiu resolver?

Obrigado,

Adriano

G

Olá, boa tarde!

Consegui sim, depois de muito procurar na documentação do Jetty acabei encontrando, fiz quase tudo certo só faltava mesmo habilitar nas configurações umas coisas e configurar o contexto que é diferente do tomcat.
Segue abaixo como fiz:

Habilitar no jetty.xml o JNDI:
procure as seguintes configurações:

<Call name="addLifeCycle">
  <Arg>
    <New class="org.mortbay.jetty.deployer.WebAppDeployer">
      <Set name="contexts"><Ref id="Contexts"/></Set>
      <Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set>
      <Set name="parentLoaderPriority">false</Set>
      <Set name="extract">true</Set>
      <Set name="allowDuplicates">false</Set>
      <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
    </New>
  </Arg>
</Call>

modifique para:

<Array id="plusConfig" type="java.lang.String">
	  <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item>
	  <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item>
	  <Item>org.mortbay.jetty.plus.webapp.Configuration</Item>
	  <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item>
	  <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item>
	</Array>

    <Call name="addLifeCycle">
      <Arg>
        <New class="org.mortbay.jetty.deployer.WebAppDeployer">
          <Set name="contexts"><Ref id="Contexts"/></Set>
          <Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set>
		  <Set name="parentLoaderPriority">false</Set>
		  <Set name="extract">true</Set>
		  <Set name="allowDuplicates">false</Set>
          <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
		  <Set name="configurationClasses"><Ref id="plusConfig"/></Set>
        </New>
      </Arg>
    </Call>

A única coisa que muda é o array antes e essa linha dentro do call <Set name=“configurationClasses”><Ref id=“plusConfig”/></Set>. Tem também o aquivo jetty-plus.xml que já tem essas configurações mas tem que descomentar mudar a pasta de onde esta a aplicação e tal ou fazer um arquivo de contexto e colocar na pasta contexts, bom deixando isso pra depois :smiley: basta configurar o datasource igual ao que criei acima só que no tomcat fica no context.xml (META-INF) no jetty é jetty-env.xml (WEB-INF).

jetty-env.xml

&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"&gt;

 &lt;Configure id='SACCTB' class="org.mortbay.jetty.webapp.WebAppContext"&gt;  
    &lt;New id="SACCTBDS" class="org.mortbay.jetty.plus.naming.Resource"&gt;  
       &lt;Arg&gt;&lt;/Arg&gt;  
       &lt;Arg&gt;jdbc/SACCTBDS&lt;/Arg&gt;  
       &lt;Arg&gt;  
          &lt;New class="org.postgresql.ds.PGSimpleDataSource"&gt;  
                  &lt;Set name="User"&gt;***&lt;/Set&gt;  
                  &lt;Set name="Password"&gt;***&lt;/Set&gt;  
                  &lt;Set name="DatabaseName"&gt;SACCTB&lt;/Set&gt;  
                  &lt;Set name="ServerName"&gt;localhost&lt;/Set&gt;  
                  &lt;Set name="PortNumber"&gt;5432&lt;/Set&gt;  
          &lt;/New&gt;  
       &lt;/Arg&gt;  
    &lt;/New&gt;  
 &lt;/Configure&gt;

Pronto é só startar :smiley:
Links:
http://docs.codehaus.org/display/JETTY/JNDI
http://docs.codehaus.org/display/BTM/Jetty13
aqui tem uns exemplos: http://docs.codehaus.org/display/JETTY/DataSource+Examples

espero ter ajudado-o, abraços!

R

to pegando nullpointerexception para o entitymanager. Pode dar u help colega?

G

Olá!

Poste seu codigo aqui assim fica mais fácil de ver onde esta o problema!

Até!

R

Bom estou usando o Jersey que é um framework Restful webservices, e preciso integrar meu projeto com Jetty + Maven + Hibernate/JPA

Segue meu código:

@Path("/myresource")
public class MyResource {
    
//	@PersistenceUnit(name = "ctsp-jpa")
//	private EntityManagerFactory emf;

	@PersistenceContext(unitName = "ctsp-jpa")
	private EntityManager em;
    /** Method processing HTTP GET requests, producing "text/plain" MIME media
     * type.
     * @return String that will be send back as a response of type "text/plain".
     * @throws NamingException 
     */
    @GET 
    @Produces("text/plain")
    public String getIt() throws RuntimeException {  


//    	         EntityManager em = emf.createEntityManager();
               // O Null Pointer Exception está dando nessa linha abaixo
		Query query = em.createQuery("select c from Country c where c.id = :id");
		query.setParameter("id", 1);
		List<?> results = query.getResultList();
		
		Iterator<?> it = results.iterator();
		Country c = null;
		if(it.hasNext()){
			c = (Country) it.next();
		}
				

		
		return "Hello there";
       
    }

Agora meus arquivos de configuração:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence 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" 
             version="1.0">
       
       
    <persistence-unit name="ctsp-jpa">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <non-jta-data-source>java:comp/env/jdbc/citespace-jpaDatasource</non-jta-data-source> 
      <!--   <jta-data-source>java:/citespace-jpaDatasource</jta-data-source>-->
      <!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
      <!--
      <jar-file>../../vehicles.jar</jar-file>
      -->
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>         
         <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
        <!-- <property name="hibernate.connection.url" value="jdbc:mysql://localhost/citespace_article"/>
		 <property name="hibernate.connection.username" value="user"/>
		 <property name="hibernate.connection.password" value="password"/>
		 <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>-->
		 <!-- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"/>-->
      </properties>
      
   </persistence-unit>         
       
</persistence>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>org.citespace.rest.api</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>  
    <resource-ref>
	    <description>MySQL DataSource</description>
	    <res-ref-name>jdbc/citespace-jpaDatasource</res-ref-name>
	    <res-type>javax.sql.DataSource</res-type>
	    <res-auth>Container</res-auth>
	</resource-ref>
          
</web-app>

jetty-env.xml

<?xml version="1.0"?>  
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">  
     
 
  <Configure id='citespace-jpaDatasource' class="org.mortbay.jetty.webapp.WebAppContext"> 
       <New id="citespace-jpaDatasource" class="org.mortbay.jetty.plus.naming.Resource">    
          <Arg></Arg>    
          <Arg>jdbc/citespace-jpaDatasource</Arg>    
          <Arg>    
             <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">    
                     <Set name="Url">jdbc:mysql://localhost:3306/database</Set>
                     <Set name="User">user</Set>    
                     <Set name="Password">password</Set>    
                    <!-- <Set name="DatabaseName">database</Set>    
                     <Set name="ServerName">localhost</Set>    
                     <Set name="PortNumber">3306</Set>    -->
             </New>    
          </Arg>    
       </New>    
  </Configure>
G

Olá!

Nesta linha deve especificar o nome do contexto da sua app não o nome do DS…

&lt;Configure id='citespace-jpaDatasource' class="org.mortbay.jetty.webapp.WebAppContext"&gt;

Outra coisa você modificou jetty.xml (caso esteja subindo o jetty com a config default) ou o arquivo de configuração que usa pra subir para habilitar o JNDI? Para habilitar veja mais acima no tópico como fazer…

Tire a injeção do EntityManager e faça na mão pegando o EM pela factory Persistence.createEntityManagerFactory(“seu_unit_name”) e veja se da certo…

Até

R

cara o jetty.xml está na webapps META-INF mas não sei se ele ta usando esse ou o padra do plugin como faço para saber? E qual contexto que devo colocar? Se for o padrão qual será?

R

Eu tenho o context.xml e o jetty.xml mas como faço para saber se ta usando ele ou do plugin ao Run as do build do Jetty no Maven?

jetty-env.xml

<?xml version="1.0"?>  
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">  
     
 
  <Configure id='citespace-jpa' class="org.mortbay.jetty.webapp.WebAppContext"> 
       <New id="citespace-jpaDatasource" class="org.mortbay.jetty.plus.naming.Resource">    
          <Arg></Arg>    
          <Arg>jdbc/citespace-jpaDatasource</Arg>    
          <Arg>    
             <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">    
                     <Set name="Url">jdbc:mysql://localhost:3306/citespace_article</Set>
                     <Set name="User">root</Set>    
                     <Set name="Password">spacecite</Set>    
                    <!-- <Set name="DatabaseName">citespace_article</Set>    
                     <Set name="ServerName">localhost</Set>    
                     <Set name="PortNumber">3306</Set>    -->
             </New>    
          </Arg>    
       </New>    
  </Configure>

classe java

@PersistenceUnit(name = "ctsp-jpa")
	private EntityManagerFactory emf;

//	@PersistenceContext(unitName = "ctsp-jpa")
//	private EntityManager em;
    /** Method processing HTTP GET requests, producing "text/plain" MIME media
     * type.
     * @return String that will be send back as a response of type "text/plain".
     * @throws NamingException 
     */
    @GET 
    @Produces("text/plain")
    public String getIt() throws RuntimeException {  


    	EntityManager em = emf.createEntityManager();
		Query query = em.createQuery("select c from Country c where c.id = :id");
		query.setParameter("id", 1);
		List<?> results = query.getResultList();
		
		Iterator<?> it = results.iterator();
		Country c = null;
		if(it.hasNext()){
			c = (Country) it.next();
		}
				
//		return "NOME: "+c.getName();
		
		return "Hello there";
       
    }

o web.xml e persistence.xml continuam o mesm o contexto coloquei um nome da minha cabeça, ou tem q ser baseado em algo?

G

Quando sobe o jetty assim java -jar start.jar ele utiliza o jetty.xml que fica em $JETTY_HOME/etc/, é neste arquivo que deve modificar para habilitar o JNDI, é so setar algumas configurações que esta neste tópico…
Outra coisa o jetty.xml não é pra ficar dentro de META-INF, e o jetty-env.xml deve ficar em WEB-INF, este arquivo neste diretorio é o que configura os resources JNDI para sua app.
Sobre coloca o nome do context não influencia muito não mas troca só para a identificação do contexto não ficar igual ao do datasource. (o nome do contexto é o nome de sua app exemplo: http://localhost:8080/NOMECONTEXTO).

&lt;Configure id="NOMECONTEXTO" class="org.mortbay.jetty.webapp.WebAppContext"&gt;

E faz como te falei acima, tira a injeção do EnityManager e faz “na mão” pegando pela factory.

Até

EDIT: Esqueci que esta usando o Maven, mas tanto faz ele utiliza o jetty.xml quando sobe com mvn jetty:run

R

vou trocar amanha, estou em casa agora e te respondo amanha para ver o q houve, sobre o jetty.xml nao tenho como ter acesso ao JETTY_HOME/etc uma vez que rodo pelo maven o jetty ou seja nao tenho jetty em minha maquina é apenas um plugin

R

cara ainda estou pegando null pointer exception e agora é nessa parte aqui

EntityManager em = emf.createEntityManager();
@PersistenceUnit(name = "ctsp-jpa")
	private EntityManagerFactory emf;

    /** Method processing HTTP GET requests, producing "text/plain" MIME media
     * type.
     * @return String that will be send back as a response of type "text/plain".
     * @throws NamingException 
     */
    @GET 
    @Produces("text/plain")
    public String getIt() throws RuntimeException {  


    	   EntityManager em = emf.createEntityManager();
		Query query = em.createQuery("select c from Country c where c.id = :id");
		query.setParameter("id", 1);
		List<?> results = query.getResultList();
		
		Iterator<?> it = results.iterator();
		Country c = null;
		if(it.hasNext()){
			c = (Country) it.next();
		}
				
		
		return "Hello there";
       
    }

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>org.citespace.rest.api</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>  
    <resource-ref>
	    <description>MySQL DataSource</description>
	    <res-ref-name>jdbc/citespace-jpaDatasource</res-ref-name>
	    <res-type>javax.sql.DataSource</res-type>
	    <res-auth>Container</res-auth>
	</resource-ref>
          
</web-app>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence 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" 
             version="1.0">
       
       
    <persistence-unit name="ctsp-jpa">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <non-jta-data-source>java:comp/env/jdbc/citespace-jpaDatasource</non-jta-data-source> 
      <!--   <jta-data-source>java:/citespace-jpaDatasource</jta-data-source>-->
      <!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
      <!--
      <jar-file>../../vehicles.jar</jar-file>
      -->
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>         
         <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
        <!-- <property name="hibernate.connection.url" value="jdbc:mysql://localhost/citespace_article"/>
		 <property name="hibernate.connection.username" value="****"/>
		 <property name="hibernate.connection.password" value="****"/>
		 <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>-->
		 <!-- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"/>-->
      </properties>
      
   </persistence-unit>

jetty-env.xml

<?xml version="1.0"?>  
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">  
     
 
  <Configure id='citespace-rest-api' class="org.mortbay.jetty.webapp.WebAppContext"> 
       <New id="citespace-jpaDatasource" class="org.mortbay.jetty.plus.naming.Resource">    
          <Arg></Arg>    
          <Arg>jdbc/citespace-jpaDatasource</Arg>    
          <Arg>    
             <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">    
                     <Set name="Url">jdbc:mysql://localhost:3306/citespace_article</Set>
                     <Set name="User">****</Set>    
                     <Set name="Password">***</Set>    
                    <!-- <Set name="DatabaseName">citespace_article</Set>    
                     <Set name="ServerName">localhost</Set>    
                     <Set name="PortNumber">3306</Set>    -->
             </New>    
          </Arg>    
       </New>    
  </Configure>
P
roanbrasil:
cara ainda estou pegando null pointer exception e agora é nessa parte aqui
EntityManager em = emf.createEntityManager();
@PersistenceUnit(name = "ctsp-jpa")
	private EntityManagerFactory emf;

    /** Method processing HTTP GET requests, producing "text/plain" MIME media
     * type.
     * @return String that will be send back as a response of type "text/plain".
     * @throws NamingException 
     */
    @GET 
    @Produces("text/plain")
    public String getIt() throws RuntimeException {  


    	   EntityManager em = emf.createEntityManager();
		Query query = em.createQuery("select c from Country c where c.id = :id");
		query.setParameter("id", 1);
		List<?> results = query.getResultList();
		
		Iterator<?> it = results.iterator();
		Country c = null;
		if(it.hasNext()){
			c = (Country) it.next();
		}
				
		
		return "Hello there";
       
    }

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>org.citespace.rest.api</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>  
    <resource-ref>
	    <description>MySQL DataSource</description>
	    <res-ref-name>jdbc/citespace-jpaDatasource</res-ref-name>
	    <res-type>javax.sql.DataSource</res-type>
	    <res-auth>Container</res-auth>
	</resource-ref>
          
</web-app>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence 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" 
             version="1.0">
       
       
    <persistence-unit name="ctsp-jpa">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <non-jta-data-source>java:comp/env/jdbc/citespace-jpaDatasource</non-jta-data-source> 
      <!--   <jta-data-source>java:/citespace-jpaDatasource</jta-data-source>-->
      <!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
      <!--
      <jar-file>../../vehicles.jar</jar-file>
      -->
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>         
         <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
        <!-- <property name="hibernate.connection.url" value="jdbc:mysql://localhost/citespace_article"/>
		 <property name="hibernate.connection.username" value="****"/>
		 <property name="hibernate.connection.password" value="****"/>
		 <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>-->
		 <!-- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"/>-->
      </properties>
      
   </persistence-unit>

jetty-env.xml

<?xml version="1.0"?>  
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">  
     
 
  <Configure id='citespace-rest-api' class="org.mortbay.jetty.webapp.WebAppContext"> 
       <New id="citespace-jpaDatasource" class="org.mortbay.jetty.plus.naming.Resource">    
          <Arg></Arg>    
          <Arg>jdbc/citespace-jpaDatasource</Arg>    
          <Arg>    
             <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">    
                     <Set name="Url">jdbc:mysql://localhost:3306/citespace_article</Set>
                     <Set name="User">****</Set>    
                     <Set name="Password">***</Set>    
                    <!-- <Set name="DatabaseName">citespace_article</Set>    
                     <Set name="ServerName">localhost</Set>    
                     <Set name="PortNumber">3306</Set>    -->
             </New>    
          </Arg>    
       </New>    
  </Configure>
roanbrasil:
cara ainda estou pegando null pointer exception e agora é nessa parte aqui
EntityManager em = emf.createEntityManager();
@PersistenceUnit(name = "ctsp-jpa")
	private EntityManagerFactory emf;

    /** Method processing HTTP GET requests, producing "text/plain" MIME media
     * type.
     * @return String that will be send back as a response of type "text/plain".
     * @throws NamingException 
     */
    @GET 
    @Produces("text/plain")
    public String getIt() throws RuntimeException {  


    	   EntityManager em = emf.createEntityManager();
		Query query = em.createQuery("select c from Country c where c.id = :id");
		query.setParameter("id", 1);
		List<?> results = query.getResultList();
		
		Iterator<?> it = results.iterator();
		Country c = null;
		if(it.hasNext()){
			c = (Country) it.next();
		}
				
		
		return "Hello there";
       
    }

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>org.citespace.rest.api</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>  
    <resource-ref>
	    <description>MySQL DataSource</description>
	    <res-ref-name>jdbc/citespace-jpaDatasource</res-ref-name>
	    <res-type>javax.sql.DataSource</res-type>
	    <res-auth>Container</res-auth>
	</resource-ref>
          
</web-app>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence 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" 
             version="1.0">
       
       
    <persistence-unit name="ctsp-jpa">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <non-jta-data-source>java:comp/env/jdbc/citespace-jpaDatasource</non-jta-data-source> 
      <!--   <jta-data-source>java:/citespace-jpaDatasource</jta-data-source>-->
      <!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
      <!--
      <jar-file>../../vehicles.jar</jar-file>
      -->
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>         
         <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
        <!-- <property name="hibernate.connection.url" value="jdbc:mysql://localhost/citespace_article"/>
		 <property name="hibernate.connection.username" value="****"/>
		 <property name="hibernate.connection.password" value="****"/>
		 <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>-->
		 <!-- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"/>-->
      </properties>
      
   </persistence-unit>

jetty-env.xml

<?xml version="1.0"?>  
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">  
     
 
  <Configure id='citespace-rest-api' class="org.mortbay.jetty.webapp.WebAppContext"> 
       <New id="citespace-jpaDatasource" class="org.mortbay.jetty.plus.naming.Resource">    
          <Arg></Arg>    
          <Arg>jdbc/citespace-jpaDatasource</Arg>    
          <Arg>    
             <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">    
                     <Set name="Url">jdbc:mysql://localhost:3306/citespace_article</Set>
                     <Set name="User">****</Set>    
                     <Set name="Password">***</Set>    
                    <!-- <Set name="DatabaseName">citespace_article</Set>    
                     <Set name="ServerName">localhost</Set>    
                     <Set name="PortNumber">3306</Set>    -->
             </New>    
          </Arg>    
       </New>    
  </Configure>

Boa tarde!!!

Galera, alguém conseguiu ou já passou pela situação acima?
Estou com o mesmo problema, sendo que, a unica coisa que muda é que estou usando JPA (eclipse link) como persistência, Jersey e Glassfish V3
Quando coloco o annotation @PersistenceUnit no EntityManagerFactory como acima o mesmo sempre vem null.
Segue abaixo meu web.xml.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
        
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
            <param-value>br.com.grupocriar.scp.ScpRequestFilter</param-value>
        </init-param>
        
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
            <param-value>br.com.grupocriar.scp.ScpRequestFilter</param-value>
        </init-param>
        
        <init-param>
            <param-name>com.sun.jersey.config.feature.Redirect</param-name>
            <param-value>true</param-value>
        </init-param>
        
        <init-param>
            <param-name>unit:scpPU</param-name>
            <param-value>persistence</param-value>
        </init-param>
        
        <load-on-startup>1</load-on-startup>
        
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
    <persistence-unit-ref>
        <persistence-unit-ref-name>persistence</persistence-unit-ref-name>
        <persistence-unit-name>scpPU</persistence-unit-name>
    </persistence-unit-ref>
    
    <resource-ref>
        <res-ref-name>UserTransaction</res-ref-name>
        <res-type>javax.transaction.UserTransaction</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    
    <persistence-context-ref>
        <persistence-context-ref-name>persistence</persistence-context-ref-name>
        <persistence-unit-name>scpPU</persistence-unit-name>
    </persistence-context-ref>
    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>
E uma classe que criei para testar
package br.com.grupocriar.scp.codigos.controller;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceUnit;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/defaultContext")
public class DefaultContext {

    @PersistenceUnit(unitName="scpPU")
    protected EntityManagerFactory emf;
    protected  EntityManager em;

    public DefaultContext() {
        try {
            em = emf.createEntityManager();
            em.isOpen();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   
   @GET
   public String get() {
      return "Teste";
   }
}
Criado 17 de dezembro de 2008
Ultima resposta 27 de ago. de 2010
Respostas 12
Participantes 4