Что такое лучший способ использовать JPA в веб-сервисах? - PullRequest
0 голосов
/ 17 августа 2011

Я создаю веб-сервис с использованием стороннего wsdl, который помогает мне получать своего рода уведомление. Теперь я должен сохранить это уведомление в БД и выполнить несколько других операций, связанных с базой данных. в My persistence.xml есть две единицы постоянства:

    <persistence-unit name="PU1" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/vsDS</jta-data-source>
    <class>com.Response</class>
    <class>com.Request</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.logging.level" value="INFO"/>
    </properties>
</persistence-unit>


<persistence-unit name="PU2" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/vdDS</jta-data-source>
    <class>com.LogRequest</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.logging.level" value="INFO"/>
    </properties>
</persistence-unit>

пока я не создал класс с именем Service.java, который имеет все функции, которые мне нужно выполнять в БД, следующим образом:

public class Service {

private static Logger logger = Logger.getLogger(Service.class);

private EntityManagerFactory PU1;
private EntityManagerFactory PU2;


public Service(){
    System.out.println("in service's constructer");
    PU1=Persistence.createEntityManagerFactory("PU1");
    PU2=Persistence.createEntityManagerFactory("PU2");
}
public void logSubRequest(String msg){
    EntityManager em= PU1.createEntityManager();
    try{
        em.getTransaction().begin();
        Request req=new Request();
        req.setMessage(msg);
        req.setStatus("Y");
        em.persist(req);

        em.getTransaction().commit();
    }catch(Exception e){
        logger.error("In logSubRequest="+e.getMessage()); 
        e.printStackTrace();
    }finally{
        if(em.isOpen()){
            em.close();
        }
    }
}
   // there are several other methods of such kind that either persist entities or executeUpdate
   }

Мой вопрос: я собираюсь использовать стандартный подход для реализации JPA с веб-сервисом или мне следует использовать какую-то другую технологию / метод. любезно предложите и проведите, если я делаю что-то нестандартное.

1 Ответ

0 голосов
/ 17 августа 2011

Часто используется комбинация веб-сервисов и JPA, я не вижу причин выбирать какой-либо другой механизм персистентности.Я бы порекомендовал придерживаться вашего текущего проекта, пока ваши требования не станут более сложными.

Большие приложения, в которых эквивалент вашего объекта Request является более сложным, и в результате более сложная бизнес-логика добавит больше слоев объектов, чтобыуправлять структурой и разрешать повторное использование.

Я склонен думать так: интерфейс веб-службы - это только один из возможных «путей» к моей бизнес-логике.Так что у меня также может быть RESTful-сервис или интерфейс JMS.Поэтому я склонен помещать свою бизнес-логику в EJB, в простых случаях EJB «без интерфейса».Я сосредотачиваюсь на EJB как на многократно используемой части бизнес-логики, которую я могу тестировать отдельно.Это сделает всю работу JPA.Тогда мой веб-сервис просто использует этот EJB для своей работы.EJB следит за транзакциями, поэтому мне не нужно писать код управления транзакциями, который у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...