Hi, thanks for the suggestion, but we are aware of that, and we have turned
it off on EclipseLink to even the playingfield.

Today we found a new problem with OpenJPA. When running the following method
we get a similar type of performance hit and an Exception after the first
run. Note: This exception is the same one we get when running the ManyToMany
test in a loop.

The method:

        public void insertDeliveryCompany(int iterations) throws Exception{
                log.setMethod(iterations);

                for (int i = 0; i < 10; i++) {
                        
                        // DeliveryCompany med contactinfo, adress, areacode og 
country
                        IDeliveryCompanyDAO dcDao = 
daoFactory.getDeliveryCompanyDAO();
                        DeliveryCompany deliveryCompany;
                        ArrayList<DeliveryCompany> deliveryCompanies = new
ArrayList<DeliveryCompany>();

                        // Fyller DeliveryCompany listen
                        for(int interval = 0; interval < iterations; 
interval++){
                                // Region
                                Region region = new Region();
                                region.setRegion("insertDeliveryCompanyRegion");
                                
                                // Country
                                Country country = new Country();
                                
country.setCountry("insertDeliveryCompanyCountry");
                                country.setRegion(region);

                                // AreaCode
                                AreaCode areaCode = new AreaCode();
                                
areaCode.setArea("insertDeliveryCompanyAreaCode");
                                areaCode.setCountry(country);

                                // Address
                                Address address = new Address();
                                
address.setAddress("insertDeliveryCompanyAddress");
                                address.setAreaCode(areaCode);

                                // ContactInfo
                                ContactInfo contactInfo = new ContactInfo();
                                contactInfo.setAddress(address);
                                
contactInfo.setEmail("insertDeliveryCompanyEmail");
                                
contactInfo.setPhoneNr("insertDeliveryCompanyPhoneNr");

                                // Fyller DeliveryCompany listen
                                deliveryCompany = new DeliveryCompany();
                                
deliveryCompany.setCompanyName("insertDeliveryCompany");
                                deliveryCompany.setContactInfo(contactInfo);
                                deliveryCompanies.add(deliveryCompany);
                        }
                        log.registerStart();
                        daoFactory.beginTransaction();

                        for (int j = 1; j <= iterations; j++) {
                                dcDao.save(deliveryCompanies.get(j-1));
                                log.registerIteration(j + 1);
                        }
                        daoFactory.commitTransaction();
//                      daoFactory.resetEntityManager();
                        log.registerEnd();
                }
                log.endMethod();
        }


And the console dump:

94  OpenJPAPU  INFO   [main] openjpa.Runtime - Starting OpenJPA 1.2.0
172  OpenJPAPU  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class
"org.apache.openjpa.jdbc.sql.MySQLDictionary".
OPENJPA (insertDeliveryCompany): 43500
0  OpenJPAPU  INFO   [main] openjpa.Runtime - Starting OpenJPA 1.2.0
0  OpenJPAPU  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class
"org.apache.openjpa.jdbc.sql.MySQLDictionary".
<openjpa-1.2.0-r422266:683325 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: Communications link
failure

Last packet sent to the server was 0 ms ago.
        at 
org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4238)
        at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4203)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connect(JDBCStoreManager.java:868)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getConnection(JDBCStoreManager.java:229)
        at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:371)
        at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:325)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getInitializeStateResult(JDBCStoreManager.java:441)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:321)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:277)
        at
org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
        at
org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
        at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:894)
        at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:852)
        at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:774)
        at org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4286)
        at
org.apache.openjpa.kernel.SingleFieldManager.persist(SingleFieldManager.java:257)
        at
org.apache.openjpa.kernel.StateManagerImpl.cascadePersist(StateManagerImpl.java:2893)
        at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2457)
        at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2280)
        at
org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1021)
        at
org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:645)
        at project.ojpa.dao.DeliveryCompanyDAO.save(DeliveryCompanyDAO.java:55)
        at
project.tests.InsertManager.insertDeliveryCompany(InsertManager.java:233)
        at project.client.AnalyticsClient.main(AnalyticsClient.java:67)
Caused by: com.mysql.jdbc.CommunicationsException: Communications link
failure

Last packet sent to the server was 0 ms ago.
        at
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1070)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2120)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:723)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:298)
        at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
        at
org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getConnection(SimpleDriverDataSource.java:81)
        at
org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getConnection(SimpleDriverDataSource.java:76)
        at
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:113)
        at
org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:93)
        at
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:113)
        at
org.apache.openjpa.jdbc.schema.DataSourceFactory$DefaultsDataSource.getConnection(DataSourceFactory.java:305)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connectInternal(JDBCStoreManager.java:879)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connect(JDBCStoreManager.java:864)
        ... 21 more
Caused by: com.mysql.jdbc.CommunicationsException: The driver was unable to
create a connection due to an inability to establish the client portion of a
socket.

This is usually caused by a limit on the number of sockets imposed by the
operating system. This limit is usually configurable. 

For Unix-based platforms, see the manual page for the 'ulimit' command.
Kernel or system reconfiguration may also be required.

For Windows-based platforms, see Microsoft Knowledge Base Article 196271
(Q196271).
        at
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1070)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:335)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2043)
        ... 32 more
Caused by: java.net.BindException: Address already in use: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at
com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
        ... 33 more



Kevin Sutter wrote:
> 
> One other interesting bit of information...  I just heard that EclipseLink
> runs with a data cache enabled by default, while OpenJPA and Hibernate do
> not.  Although this setting may not get us completely out of this
> ManyToMany
> performance hole, it is something to be aware of as these performance
> benchmarks are done...
> 

-- 
View this message in context: 
http://n2.nabble.com/Slow-performance-with-OpenJPA-when-selecting-from-a-ManyToMany-relation.-tp2466994p2501684.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to