powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Временные таблички и GlassFish
35 сообщений из 35, показаны все 2 страниц
Временные таблички и GlassFish
    #37824193
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема:
Обнаружили, что клиенты, которые вставляют свои данные во временные таблицы через GlassFish на Oracle при чтении этих данных видят данные, введённые другими пользователями.
Вопрос такой:
Как решить эту проблему?

Пояснение:
Есть множество соединений клиентов к серверу приложений GlassFish. А соединение Glassfish СУБД Oracle одно. И получается, что все клиенты работают как бы в одной сессии СУБД и видят данные других клиентов во временных табличках. На GlassFish тип соединения javax.sql.ConnectionPoolDataSource. Вроде, должно как бы новое соединение на каждого клинета создаваться, но не создаётся. Просто смысл временных таблиц теряется.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824224
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlassFish тут не при чем. Есть стандартная практика для повышения производительности использовать пул соединений. Пул позволяет пере-использовать физические соединения, т.к. создание нового достаточно трудоёмкая операция.

Естественно соединение работает в одной оракловой сессии.

А нельзя ли время жизни таблицы к транзакции привязать?
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824245
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделать их транзакционными, а не сессионными?
Скорее всего, нет.
При Commit табличка будет очищаться. А если длинные сессии будут? Наверное, не хорошо это. А если хранимая процедура Oracle должна во временную табличку что-то написать, а клиент забрать это?
А что нет нормально решения?
Кто-нибудь с этим сталкивался?
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824250
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем тогда пул соединений нужен, если все через одно соединение лезут?
Хотелось бы каждой сессии клиента по соединению сделать и всё. Можно так? Типа, подсоединился новый клиент - на соединение.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824258
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фактически, в моём случае временная табличка ничем не отличается от постоянной. Даже если клиент закрыть/открыть, то данные во временной табличке остаются, причём от всех пользователей.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824333
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000А зачем тогда пул соединений нужен, если все через одно соединение лезут?
Значит у вас нагрузка такая, что одного соединения достаточно.

Niky4000Хотелось бы каждой сессии клиента по соединению сделать и всё. Можно так? Типа, подсоединился новый клиент - на соединение.
Попробуйте вместо DataSource.getConnection() использовать DataSource.getConnection(login, password). Только пул должен позволять это делать. Не все реализации позволяют. Возможно стоит перейти на пул из драйвера для оракла.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824345
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EntityManager у меня ConteinerManaged.
Код: sql
1.
2.
    @PersistenceContext(unitName = "ServerPU")
    private EntityManager em;


Persistence Unit:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?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="ServerPU" transaction-type="JTA">
    <jta-data-source>medfin_con</jta-data-source>
    <class>com.imc.medfin.server.dao.factory.OracleFactory.bean.TempXmlDs</class>
...
...
    <class>com.imc.medfin.server.dao.factory.OracleFactory.bean.DebugTest</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>NONE</validation-mode>
    <properties>
    </properties>
  </persistence-unit>
</persistence>



Может быть проблема в ConteinerManaged EntityManager? Может быть надо сделать его BeanManaged и как-нибудь вручную получать новое соединение через EntityManagerFactory?
Это так... идеи пока...
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824355
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то типа такого
Код: java
1.
2.
3.
4.
Map properties = new HashMap();
properties.put("javax.persistence.jdbc.user", user);
properties.put("javax.persistence.jdbc.password", password);
EntityManager em = factory.createEntityManager(properties);
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824389
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас попробую.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824408
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сами говорите, что таблицы практически не отличаются от обычных - сделайте одну таблицу со всеми вашими полями + userId - показывайте, очищайте и т.д. с фильтрацией по каждому пользователю. Итого табличка одна, не надо думать как обойти стандартные механизмы, чтобы вставить непонятный костыль, но придется запросики править.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824437
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oneHalf Если сами говорите, что таблицы практически не отличаются от обычных - сделайте одну таблицу со всеми вашими полями + userId - показывайте, очищайте и т.д. с фильтрацией по каждому пользователю. Итого табличка одна, не надо думать как обойти стандартные механизмы, чтобы вставить непонятный костыль, но придется запросики править.
Мне кажется, это не очень хорошая идея. Можно конечно, но лучше бы как-то по-нормальному это сделать.

Blazkowicz
Вот такой код у меня:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    public void debug_new_em() {
        String gg="";
        
Map properties = new HashMap();
properties.put("javax.persistence.jdbc.user", "medfin");
properties.put("javax.persistence.jdbc.password", "medfin");
properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@pgserver1:1521:XE");
        
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("ServerPU");
        EntityManager em=emf.createEntityManager(properties);
        
        DebugTest dt=new DebugTest();
        dt.setId(Long.valueOf(Double.valueOf(Math.random()).longValue()));
        dt.setData("Hello!");
        em.persist(dt);
        
        
        String kk="";
          
    }




Валится на em.persist(dt);
Вот какое исключение:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:438)
	at org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:165)
Caused by: javax.ejb.EJBTransactionRolledbackException
	at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2314)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2096)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
	at $Proxy287.debug_new_em(Unknown Source)
	at com.imc.medfin.server.mediator.servermediator.ServerTitleMediator.read_from_debug_test_table(ServerTitleMediator.java:160)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
	at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
	at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
	at $Proxy283.read_from_debug_test_table(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
	at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
	at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
	at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
	at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
	at com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:5071)
	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4906)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)
	... 46 more
Caused by: java.lang.IllegalArgumentException: EntityManager properties conflict: javax.persistence.driver and/or javax.persistence.url require DefaultConnector, but persistence unit uses external transaction controller, therefore JNDIConnector is required.
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createConnectionPolicy(EntityManagerImpl.java:2011)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createConnectionPolicy(EntityManagerImpl.java:1890)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.getActivePersistenceContext(EntityManagerImpl.java:1674)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:440)
	at com.imc.medfin.server.dao.factory.OracleFactory.DebugSessionBean.debug_new_em(DebugSessionBean.java:115)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
	... 44 more
Java Result: 1
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37824454
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827339
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то не получается...
Если раскоментировать
//@PersistenceContext(unitName = "EMDebugPU")
//private EntityManager em;
И закоментировать init(), то всё работает - данные в таблице DebugTest появляются, а если через EntityManagerFactory, то не работает - данные читаются из базы, но в базу не пишутся.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
import Entity.DebugTest;
import Entity.Schet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;


@Stateless(name = "EMDebugSessionBean", mappedName = "EMDebugSessionBean")
public class EMDebugSessionBean implements EMDebugSessionBeanRemote {

    //@PersistenceContext(unitName = "EMDebugPU")
    //private EntityManager em;
    
    EntityManager em;
    
    private void init(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("EMDebugPU");
        //em=emf.createEntityManager();
        
        Map properties = new HashMap();
        properties.put("javax.persistence.jdbc.user", "medfin");
        properties.put("javax.persistence.jdbc.password", "medfin");
        //properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@pgserver1:1521:XE");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Transactional");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "true");
        //properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        //properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        em = emf.createEntityManager(properties);
        
    }
    
    @Override
    public String retHello() {
        

        init();
        
        DebugTest dt=new DebugTest();
        dt.setId(Long.valueOf(Double.valueOf(Math.random()*1000000).longValue()));
        dt.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt);
        
        
        List<Object> some=get(DebugTest.class);
        List<Object> some2=get(Schet.class);

        
        return "Hello from EMDebug Session Bean! "+some2.size();
    }

    
    private List<Object> get(Class table){
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(table);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
                
        TypedQuery<Object> typedQuery = em.createQuery(select);
        List<Object> some_ret = typedQuery.getResultList();
        return some_ret;
    }
    
    
    
    
}




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?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="EMDebugPU" transaction-type="JTA">
    <jta-data-source>medfin_con</jta-data-source>
    <class>Entity.DebugTest</class>
    <class>Entity.Schet</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>NONE</validation-mode>
    <properties/>
  </persistence-unit>
</persistence>
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827342
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причём никаких исключений не возникает.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827553
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробую вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
import Entity.DebugTest;
import Entity.Schet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;


@Stateless(name = "EMDebugSessionBean", mappedName = "EMDebugSessionBean")
public class EMDebugSessionBean implements EMDebugSessionBeanRemote {

    //@PersistenceContext(unitName = "EMDebugPU")
    //private EntityManager em;
    
    EntityManager em;
    
    private void init(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("EMDebugPU");
        //em=emf.createEntityManager();
        
        Map properties = new HashMap();
        properties.put("javax.persistence.jdbc.user", "medfin");
        properties.put("javax.persistence.jdbc.password", "medfin");
        //properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@pgserver1:1521:XE");
        //properties.put("eclipselink.jdbc.exclusive-connection.mode", "Transactional");
        //properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "true");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        em = emf.createEntityManager(properties);
        
    }
    
    @Override
    public String retHello() {
        

        init();
        
        DebugTest dt=new DebugTest();
        dt.setId(Long.valueOf(Double.valueOf(Math.random()*1000000).longValue()));
        dt.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt);
        
        
        List<Object> some=get(DebugTest.class);
        List<Object> some2=get(Schet.class);

        
        destroy_em();
        
        
        return "Hello from EMDebug Session Bean! "+some2.size();
    }

    
    private List<Object> get(Class table){
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(table);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
                
        TypedQuery<Object> typedQuery = em.createQuery(select);
        List<Object> some_ret = typedQuery.getResultList();
        return some_ret;
    }
    
    private void destroy_em(){
        em.close();
    }
    
    
}


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?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="EMDebugPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>medfin_con</jta-data-source>
    <class>Entity.DebugTest</class>
    <class>Entity.Schet</class>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>NONE</validation-mode>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@pgserver1:1521:XE"/>
      <property name="javax.persistence.jdbc.user" value="medfin"/>
      <property name="javax.persistence.jdbc.password" value="medfin"/>
      <property name="eclipselink.jdbc.connections.initial" value="0"/>
      <property name="eclipselink.jdbc.connections.min" value="0"/>
      <property name="eclipselink.jdbc.connections.max" value="8"/>
    </properties>
  </persistence-unit>
</persistence>


Поменял persistent unit. Пробовал RESOURSE_LOCAL и JTA.
Тоже ничего не выходит. Метод persist вызывается. Исключений нет. А в базе пусто!
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827595
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот так вот данные в БД попадают:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
import Entity.DebugTest;
import Entity.Schet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;


@Stateless(name = "EMDebugSessionBean", mappedName = "EMDebugSessionBean")
public class EMDebugSessionBean implements EMDebugSessionBeanRemote {

    @PersistenceContext(unitName = "EMDebugPU")
    private EntityManager em;
    
    //EntityManager em;
    
    private void init(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("EMDebugPU");
        //em=emf.createEntityManager();
        
        
        Map properties = new HashMap();
        properties.put("javax.persistence.jdbc.user", "medfin");
        properties.put("javax.persistence.jdbc.password", "medfin");
        //properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@pgserver1:1521:XE");
        //properties.put("eclipselink.jdbc.exclusive-connection.mode", "Transactional");
        //properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "true");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        em = emf.createEntityManager(properties);
        
        
        /*
        Map properties = new HashMap();
        properties.put("eclipselink.oracle.proxy-type", oracle.jdbc.OracleConnection.PROXYTYPE_USER_NAME);
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_NAME, "medfin");
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_PASSWORD, "medfin");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        EntityManager em = emf.createEntityManager(properties);
        */
    }
    
    @Override
    public String retHello() {
        

        //init();
        
        DebugTest dt=new DebugTest();
        dt.setId(Long.valueOf(Double.valueOf(Math.random()*1000000).longValue()));
        dt.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt);
        
        
        List<Object> some=get(DebugTest.class);
        List<Object> some2=get(Schet.class);

        
        //destroy_em();
        
        
        return "Hello from EMDebug Session Bean! "+some2.size();
    }

    
    private List<Object> get(Class table){
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(table);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
                
        TypedQuery<Object> typedQuery = em.createQuery(select);
        List<Object> some_ret = typedQuery.getResultList();
        return some_ret;
    }
    
    private void destroy_em(){
        em.close();
    }
    
    
}


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?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="EMDebugPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>medfin_con</jta-data-source>
    <class>Entity.DebugTest</class>
    <class>Entity.Schet</class>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>NONE</validation-mode>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@pgserver1:1521:XE"/>
      <property name="javax.persistence.jdbc.user" value="medfin"/>
      <property name="javax.persistence.jdbc.password" value="medfin"/>
      <property name="eclipselink.jdbc.connections.initial" value="0"/>
      <property name="eclipselink.jdbc.connections.min" value="0"/>
      <property name="eclipselink.jdbc.connections.max" value="8"/>
    </properties>
  </persistence-unit>
</persistence>


При Container Management может быть только JTA.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827605
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Niky4000,
попробуй добавить:

Код: java
1.
<property name="eclipselink.logging.level" value="FINE"/>


Niky4000Исключений нет.
Исключения где ловил? Дебагером из IDE? В логах на сервере точно ничего нет (<domain_path>\logs\server.log)?
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827686
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой! Кажется, я накосячил... Вот как надо:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
import Entity.DebugTest;
import Entity.Schet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;


@Stateless(name = "EMDebugSessionBean", mappedName = "EMDebugSessionBean")
public class EMDebugSessionBean implements EMDebugSessionBeanRemote {

    //@PersistenceContext(unitName = "EMDebugPU")
    //private EntityManager em;
    
    EntityManager em;
    
    private void init(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("EMDebugPU");
        //em=emf.createEntityManager();
        
        
        Map properties = new HashMap();
        properties.put("javax.persistence.jdbc.user", "medfin");
        properties.put("javax.persistence.jdbc.password", "medfin");
        //properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@pgserver1:1521:XE");
        //properties.put("eclipselink.jdbc.exclusive-connection.mode", "Transactional");
        //properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "true");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        em = emf.createEntityManager(properties);
        
        
        /*
        Map properties = new HashMap();
        properties.put("eclipselink.oracle.proxy-type", oracle.jdbc.OracleConnection.PROXYTYPE_USER_NAME);
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_NAME, "medfin");
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_PASSWORD, "medfin");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        EntityManager em = emf.createEntityManager(properties);
        */
        String gq="";
                
    }
    
    @Override
    public String retHello() {
        

        init();
        EntityTransaction et=em.getTransaction();
        et.begin();
        
        DebugTest dt=new DebugTest();
        dt.setId(Long.valueOf(Double.valueOf(Math.random()*1000000).longValue()));
        dt.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt);
        
        
        List<Object> some=get(DebugTest.class);
        List<Object> some2=get(Schet.class);

        et.commit();
        
        
        destroy_em();
        
        
        return "Hello from EMDebug Session Bean! "+some2.size();
    }

    
    private List<Object> get(Class table){
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(table);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
                
        TypedQuery<Object> typedQuery = em.createQuery(select);
        List<Object> some_ret = typedQuery.getResultList();
        return some_ret;
    }
    
    private void destroy_em(){
        em.close();
    }
    
    
}



Забыл добавить транзакции. Их же тут надо упоминать в явном виде...

А вот Log'и:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
[#|2012-06-06T14:13:28.555+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=118;_ThreadName=Thread-2;|[EL Fine]: 2012-06-06 14:13:28.555--ClientSession(15076455)--Connection(20471937)--Thread(Thread[p: thread-pool-1; w: 3,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [205030, Value 84]
|#]

[#|2012-06-06T14:13:28.555+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=118;_ThreadName=Thread-2;|[EL Fine]: 2012-06-06 14:13:28.555--ClientSession(15076455)--Connection(20471937)--Thread(Thread[p: thread-pool-1; w: 3,5,main])--SELECT ID, DATA FROM MEDFIN.DEBUG_TEST
|#]

[#|2012-06-06T14:13:28.556+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=118;_ThreadName=Thread-2;|[EL Fine]: 2012-06-06 14:13:28.556--ClientSession(15076455)--Connection(20471937)--Thread(Thread[p: thread-pool-1; w: 3,5,main])--SELECT ID_PAK, CODE_MO, COMENTS, CRC32, CREATED, DATA, DSCHET, FNAME, FROM_SUBJ, MONTH, NSCHET, TO_SUBJ, TYPEMESS, USER_ID, VERSION, YEAR FROM MEDFIN.SCHET
|#]




Теперь надо потестировать на предмет того будут ли разные клиенты с разных host'ов видеть чужие данные, которые записал во временную табличку другой клиент.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827734
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во блин! Дела! А разные клиенты с разных host'ов всё равно видят чужие данные!
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827735
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во временных табличках...
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827775
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Код: xml
1.
2.
3.
...
<property name="eclipselink.jdbc.connections.max" value="8"/> 
...



value="1" и тогда пула не будет и новое соединение на каждого клиента создаваться будет
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827785
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0FD, скорее все будут ждать пока соединение не освободится
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827797
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А...
Ну, я вот так сделал:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
import Entity.DebugTest;
import Entity.Schet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;


@Stateless(name = "EMDebugSessionBean", mappedName = "EMDebugSessionBean")
public class EMDebugSessionBean implements EMDebugSessionBeanRemote {

    //@PersistenceContext(unitName = "EMDebugPU")
    //private EntityManager em;
    EntityManagerFactory emf;
    EntityManager em;
    
    private void init(){
        emf = Persistence.createEntityManagerFactory("EMDebugPU");
        //em=emf.createEntityManager();
        
        
        
        Map properties = new HashMap();
        properties.put("javax.persistence.jdbc.user", "medfin");
        properties.put("javax.persistence.jdbc.password", "medfin");
        //properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@pgserver1:1521:XE");
        //properties.put("eclipselink.jdbc.exclusive-connection.mode", "Transactional");
        //properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "true");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        em = emf.createEntityManager(properties);
        
        
        /*
        Map properties = new HashMap();
        properties.put("eclipselink.oracle.proxy-type", oracle.jdbc.OracleConnection.PROXYTYPE_USER_NAME);
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_NAME, "medfin");
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_PASSWORD, "medfin");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        EntityManager em = emf.createEntityManager(properties);
        */
        String gq="";
                
    }
    
    @Override
    public String retHello() {
        

        init();
        EntityTransaction et=em.getTransaction();
        et.begin();
        //em.joinTransaction();
        
        
        DebugTest dt=new DebugTest();
        dt.setId(Long.valueOf(Double.valueOf(Math.random()*1000000+10).longValue()));
        dt.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt);

        et.commit();
        
        
        

        et.begin();
        DebugTest dt2=new DebugTest();
        dt2.setId(Long.valueOf(Double.valueOf(Math.random()*1000000+12).longValue()));
        dt2.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt2);
        
        et.commit();
        
        
        

        et.begin();
        DebugTest dt3=new DebugTest();
        dt3.setId(Long.valueOf(Double.valueOf(Math.random()*1000000).longValue()));
        dt3.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt3);
        
        et.commit();
        
        
        List<Object> some=get(DebugTest.class);
        List<Object> some2=get(Schet.class);
        
        
        destroy_em();
        
        
        return "Hello from EMDebug Session Bean! "+some.size();
    }

    
    private List<Object> get(Class table){
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(table);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
                
        TypedQuery<Object> typedQuery = em.createQuery(select);
        List<Object> some_ret = typedQuery.getResultList();
        return some_ret;
    }
    
    private void destroy_em(){
        em.close();
        emf.close();
    }
    
    
}


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?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="EMDebugPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>Entity.DebugTest</class>
    <class>Entity.Schet</class>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>NONE</validation-mode>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@pgserver1:1521:XE"/>
      <property name="javax.persistence.jdbc.user" value="medfin"/>
      <property name="javax.persistence.jdbc.password" value="medfin"/>
      <property name="eclipselink.jdbc.connections.initial" value="0"/>
      <property name="eclipselink.jdbc.connections.min" value="0"/>
      <property name="eclipselink.jdbc.connections.max" value="1"/>
      <property name="eclipselink.logging.level" value="FINE"/>
    </properties>
  </persistence-unit>
</persistence>



Вроде работает.
Выводится 3 в конце работы у разных клиентов.
Этот тест иллюстрирует то, что я вставил что-то во временную табличку, потом за'commit'ил, ещё записал и за'commit'ил и вывел количество записей. Другой клиент тоже самое сделал и у него получилось 3 записи, а не 6.
Вроде, работает.

А вопрос у меня:
А я сделал вот так:
private void destroy_em(){
em.close();
emf.close();
}
EntityManager, наверное, нужно закрывать.
А нужно ли закрывать EntityManagerFactory каждый раз или не нужно?
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827800
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferc0FD, скорее все будут ждать пока соединение не освободится
Да, кстати! А это же пул соединений, а действительно не будет ли такого?
Типа пул соединений - это количество возможных одновременных соединений, следовательно, если сделать:
<property name="eclipselink.jdbc.connections.max" value="1"/>
То будет 1 доступное соединение и все остальные будут просто ждать пока оно не освободиться.
Или не так?
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827804
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Niky4000, попробуй сделать кол-во клиентов побольше и посмотри долго ли они будут писать...
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827806
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Niky4000ferc0FD, скорее все будут ждать пока соединение не освободится
Да, кстати! А это же пул соединений, а действительно не будет ли такого?
Типа пул соединений - это количество возможных одновременных соединений, следовательно, если сделать:
<property name="eclipselink.jdbc.connections.max" value="1"/>
То будет 1 доступное соединение и все остальные будут просто ждать пока оно не освободиться.
Или не так?

по крайней мере так в websphere
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827819
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fercпо крайней мере так в websphere
Ну, наверное, аналогично и в GlassFish.
То есть надо ставить какое-то разумное число, а не 1.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827820
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Niky4000, в зависимости от возможного кол-ва клиентов
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827827
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferc, даже не так выразился... и от нагрузки.
т.е. сколько клиентов может обратиться одновременно за соединением.
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827828
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А динамически можно это свойство устанавливать? И каков предел?
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827831
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В доке ничего не сказано про то что 1 это какой-то особый случай в котором пул отсутствует. Скорее всего это пул в одно соединение. Если нужно избавится от пула, от проще пропихнуть туда его тривиальную реализацию. Типа DriverManagerDataSource в Spring
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827850
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Niky4000, про это ничего не скажу(
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827879
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,

Да, будет ждать. Можно так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Map<String, Object> props = new HashMap<String, Object>(2);
props.put(org.eclipse.persistence.config.EntityManagerProperties.NON_JTA_DATASOURCE,
              new DataSource(){
              ...
              @Override
	      public Connection getConnection() throws SQLException {
		   return где-то взять соединение(опять же из пула) ну а потом закрыть или очистить таблицу вернуть в другой пул;
	      } 
              ...    
});
props.put(org.eclipse.persistence.config.EntityManagerProperties.EXCLUSIVE_CONNECTION_MODE,org.eclipse.persistence.config.ExclusiveConnectionMode.Isolated);
em = emf.createEntityManager(props);
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827893
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда, точно - ждёт.
Увеличил нагрузку и посмотрел это в Log'ах.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SessionBeans;

import Entity.DebugTest;
import Entity.Schet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;


@Stateless(name = "EMDebugSessionBean", mappedName = "EMDebugSessionBean")
public class EMDebugSessionBean implements EMDebugSessionBeanRemote {

    //@PersistenceContext(unitName = "EMDebugPU")
    //private EntityManager em;
    EntityManagerFactory emf;
    EntityManager em;
    
    private void init(){
        emf = Persistence.createEntityManagerFactory("EMDebugPU");
        //em=emf.createEntityManager();
        
        
        
        Map properties = new HashMap();
        properties.put("javax.persistence.jdbc.user", "medfin");
        properties.put("javax.persistence.jdbc.password", "medfin");
        //properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@pgserver1:1521:XE");
        //properties.put("eclipselink.jdbc.exclusive-connection.mode", "Transactional");
        //properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "true");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        em = emf.createEntityManager(properties);
        
        
        /*
        Map properties = new HashMap();
        properties.put("eclipselink.oracle.proxy-type", oracle.jdbc.OracleConnection.PROXYTYPE_USER_NAME);
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_NAME, "medfin");
        properties.put(oracle.jdbc.OracleConnection.PROXY_USER_PASSWORD, "medfin");
        properties.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
        properties.put("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
        EntityManager em = emf.createEntityManager(properties);
        */
        String gq="";
                
    }
    
    @Override
    public String retHello() {
        

        init();
        
        /*
        EntityTransaction et=em.getTransaction();
        et.begin();
        //em.joinTransaction();
        
        
        DebugTest dt=new DebugTest();
        dt.setId(Long.valueOf(Double.valueOf(Math.random()*1000000+10).longValue()));
        dt.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        //em.persist(dt);

        et.commit();
        */
        
        for(int i=0;i<1000;i++){
        EntityTransaction et2=em.getTransaction();
        et2.begin();
        DebugTest dt2=new DebugTest();
        //dt2.setId(Long.valueOf(Double.valueOf(Math.random()*1000000+12).longValue()));
        dt2.setId(Long.valueOf(i+1));
        dt2.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt2);
        
        et2.commit();
        }
        
        /*
        EntityTransaction et3=em.getTransaction();
        et3.begin();
        DebugTest dt3=new DebugTest();
        dt3.setId(Long.valueOf(Double.valueOf(Math.random()*1000000).longValue()));
        dt3.setData("Value "+Long.valueOf(Double.valueOf(Math.random()*100).longValue()).toString());
        em.persist(dt3);
        
        et3.commit();
        */
        
        List<Object> some=get(DebugTest.class);
        List<Object> some2=get(Schet.class);
        
        
        destroy_em();
        
        
        return "Hello from EMDebug Session Bean! "+some.size();
    }

    
    private List<Object> get(Class table){
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(table);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
                
        TypedQuery<Object> typedQuery = em.createQuery(select);
        List<Object> some_ret = typedQuery.getResultList();
        return some_ret;
    }
    
    private void destroy_em(){
        em.close();
        emf.close();
    }
    
    
}




Это с пулом = 8.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
INFO: [EL Fine]: 2012-06-06 15:55:09.387--ClientSession(19243773)--Connection(17885606)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [564, Value 71]

INFO: [EL Fine]: 2012-06-06 15:55:09.392--ClientSession(9671587)--Connection(8656258)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [274, Value 86]

INFO: [EL Fine]: 2012-06-06 15:55:09.394--ClientSession(19243773)--Connection(17885606)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [565, Value 24]

INFO: [EL Fine]: 2012-06-06 15:55:09.399--ClientSession(9671587)--Connection(8656258)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [275, Value 83]

INFO: [EL Fine]: 2012-06-06 15:55:09.401--ClientSession(19243773)--Connection(17885606)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [566, Value 67]

INFO: [EL Fine]: 2012-06-06 15:55:09.406--ClientSession(9671587)--Connection(8656258)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [276, Value 11]




А это с пулом = 1.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
INFO: [EL Fine]: 2012-06-06 15:57:23.802--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [994, Value 12]

INFO: [EL Fine]: 2012-06-06 15:57:23.808--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [995, Value 97]

INFO: [EL Fine]: 2012-06-06 15:57:23.82--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [996, Value 55]

INFO: [EL Fine]: 2012-06-06 15:57:23.827--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [997, Value 26]

INFO: [EL Fine]: 2012-06-06 15:57:23.836--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [998, Value 64]

INFO: [EL Fine]: 2012-06-06 15:57:23.845--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [999, Value 16]

INFO: [EL Fine]: 2012-06-06 15:57:23.86--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [1000, Value 5]

INFO: [EL Fine]: 2012-06-06 15:57:23.905--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--SELECT ID, DATA FROM MEDFIN.DEBUG_TEST

INFO: [EL Fine]: 2012-06-06 15:57:24.075--ClientSession(25163859)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--SELECT ID_PAK, CODE_MO, COMENTS, CRC32, CREATED, DATA, DSCHET, FNAME, FROM_SUBJ, MONTH, NSCHET, TO_SUBJ, TYPEMESS, USER_ID, VERSION, YEAR FROM MEDFIN.SCHET

INFO: [EL Config]: 2012-06-06 15:57:24.083--ServerSession(4080117)--Connection(14438497)--Thread(Thread[p: thread-pool-1; w: 6,5,main])--disconnect

INFO: [EL Config]: 2012-06-06 15:57:24.087--ServerSession(4080117)--Connection(12902048)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--connecting(DatabaseLogin(
	platform=>OraclePlatform
	user name=> "medfin"
	datasource URL=> "jdbc:oracle:thin:@pgserver1:1521:XE"
))

INFO: [EL Config]: 2012-06-06 15:57:24.156--ServerSession(4080117)--Connection(33361211)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--Connected: jdbc:oracle:thin:@pgserver1:1521:XE
	User: MEDFIN
	Database: Oracle  Version: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
	Driver: Oracle JDBC driver  Version: 11.2.0.3.0

INFO: [EL Fine]: 2012-06-06 15:57:24.157--ClientSession(3855040)--Connection(33361211)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [1, Value 0]

INFO: [EL Fine]: 2012-06-06 15:57:24.162--ClientSession(3855040)--Connection(33361211)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [2, Value 75]

INFO: [EL Fine]: 2012-06-06 15:57:24.167--ClientSession(3855040)--Connection(33361211)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [3, Value 82]

INFO: [EL Fine]: 2012-06-06 15:57:24.171--ClientSession(3855040)--Connection(33361211)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [4, Value 35]

INFO: [EL Fine]: 2012-06-06 15:57:24.176--ClientSession(3855040)--Connection(33361211)--Thread(Thread[p: thread-pool-1; w: 4,5,main])--INSERT INTO MEDFIN.DEBUG_TEST (ID, DATA) VALUES (?, ?)
	bind => [5, Value 84]
...
Рейтинг: 0 / 0
Временные таблички и GlassFish
    #37827901
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как проверил? Запустил 2 клиента одновременно.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Временные таблички и GlassFish
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]