2012-04-17 153 views
1

我收到以下错误查找非JTA的数据源/ JTA数据源时,我的web服务调用:如何通过web服务

org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property. 

WebService类是bascially试图使用JPA如下所示

<persistence-unit name="TEST_P" transaction-type="RESOURCE_LOCAL"> 
     <provider> 
     com.ibm.websphere.persistence.PersistenceProviderImpl 
     </provider> 
     <non-jta-data-source>java:comp/env/jdbc/DATA</non-jta-data-source> 
     <class>jpa.WSTGHandler</class> 
      <properties> 

     </properties> 
    </persistence-unit> 

我还定义在web.xml数据源条目:基于似乎EntityManager的不能访问的数据源输入上述错误消息中插入数据,并且如下所示

 <resource-ref> 
     <res-ref-name>java:comp/env/jdbc/DATA</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
     <res-sharing-scope>Shareable</res-sharing-scope> 
    </resource-ref> 

在In Servlet中嵌入JPA代码可以很好地定位数据源。我怎样才能让Webservice以相同的方式工作?

PS:我使用的Websphere 7,JPA 1.2版本,和JAX-WS

按照要求,follwing类调用INT他Webservice的方法即的BeginTransaction()

public class EntityManagerHelper { 

    private static final EntityManagerFactory emf; 
    private static final ThreadLocal<EntityManager> threadLocal; 
    private static final Logger logger; 

    static { 
     emf = Persistence.createEntityManagerFactory("TEST_P");   
     threadLocal = new ThreadLocal<EntityManager>(); 
     logger = Logger.getLogger("TEST_P"); 
     logger.setLevel(Level.FINE); 
    } 

    public static EntityManager getEntityManager() { 
     EntityManager manager = threadLocal.get();  
     if (manager == null || !manager.isOpen()) { 
      manager = emf.createEntityManager(); 
      threadLocal.set(manager); 
     } 
     return manager; 
    } 

    public static void closeEntityManager() { 
     EntityManager em = threadLocal.get(); 
     threadLocal.set(null); 
     if (em != null) em.close(); 
    } 

    public static void beginTransaction() { 
     getEntityManager().getTransaction().begin(); 
    } 

    public static void commit() { 
     getEntityManager().getTransaction().commit(); 
    } 

    public static void rollback() { 
     getEntityManager().getTransaction().rollback(); 
    } 

    public static Query createQuery(String query) { 
     return getEntityManager().createQuery(query); 
    } 

    public static void log(String info, Level level, Throwable ex) { 
     logger.log(level, info, ex); 
    } 

} 
+0

您可以添加JPA代码以进行数据插入,从那里发生异常 – 2012-04-17 10:56:29

回答

0

解决的问题。它只是在res-ref-name中的一个错字:)