2012-04-17 4 views
1

я получаю следующее сообщение об ошибке, когда моя Webservice вызывается:Как для поиска не-JTA-данных источника/JTA,-источника данных с помощью веб-сервиса

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

Класс Webservice является Bascially пытается использовать JPA для вставки данных, и на основе вышеприведенного сообщения об ошибке, что кажется EntityManager наклоняет доступ к записи источника данных, как показано ниже:

<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, как показано ниже:

 <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> 

Внедрение JPA-кода в In Servlet позволяет найти источник данных. как я могу заставить 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-код для вставки данных, откуда происходит исключение –

ответ

0

Устранена. это была просто опечатка в res-ref-name :)

Смежные вопросы