Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 337037

Summary: CS: Distributed ManyToOne Enterprise Application Example using EclipseLink JPA as the shared persistence layer
Product: z_Archived Reporter: Michael OBrien <michael.f.obrien>
Component: EclipselinkAssignee: Nobody - feel free to take it <nobody>
Status: ASSIGNED --- QA Contact:
Severity: enhancement    
Priority: P3 CC: michael.f.obrien
Version: unspecifiedFlags: michael.f.obrien: documentation+
Target Milestone: ---   
Hardware: PC   
OS: Windows 7   
URL: http://wiki.eclipse.org/EclipseLink/Examples/Distributed
Whiteboard:
Bug Depends on: 211206, 337034, 337035, 338708, 337036    
Bug Blocks: 288275, 294745, 308477, 310849, 332312, 332953    
Attachments:
Description Flags
Example (collatz conjecture) distributed EE application framework using EclipseLink JPA as the persistence layer - initial submission
none
Distributed framework for Collatz EAR (without wlfullclient.jar)
none
Distributed 1 of n (SE client of EJB SSB) for Collatz (without wlfullclient.jar)
none
Rev 9000 - max path/value normalization
none
on-JSF2 Ajax Servlet get/post combination as a performance baseline prior to using the JSR-311 pattern
none
enable jsr-311 jax-rs capability on WebLogic 10.3.4
none
Multithreaded client phase 1 - default to (hard + soft (HT) cores) to utilize 80-90% of multicore CPU
none
Optimize read only query using COUNT - resulting in significant performance gains when used by an AJAX client none

Description Michael OBrien CLA 2011-02-12 11:57:29 EST

    
Comment 1 Michael OBrien CLA 2011-02-14 15:14:55 EST
>Problem: require a real-world distributed app that can be used as a case study for the following issues.
- performance (we need a way to hammer a JPA based server and change the client load at runtime)
- management (test framework to try out central management of the server and clients)
- analytics (how can we report JVM and persistence metrics with minimal thread overhead)
- concurrency (how do we handle under-load forced OptimisticLockException conditions without resorting to synchronized blocks) - @Singleton SB for example
- distributed memory (for clients that are not running persistence on their own - where they would benefit from an L2 cache like Coherence, ehCache or Terracotta - we need to prototype scenarios where the database or EclipseLink L1 in-memory cache can act as a distributed shared memory for the remote clients).
Specifically, how do we propagate changes from some clients to others using both a 
1) Star network of ManyToOne for clientsToServer
2) Mesh network of ManyToMany for clientsToClients

We will develop a n:1 distributed application with many clients connected to one central persistence server.
The research page is located here.
http://wiki.eclipse.org/EclipseLink/Examples/Distributed
Comment 2 Michael OBrien CLA 2011-02-16 16:29:09 EST
Created attachment 189131 [details]
Example (collatz conjecture) distributed EE application framework using EclipseLink JPA as the persistence layer - initial submission

>Refer to the following to enable the 5 projects EAR, EJB, WAR model.JAR, 
http://wiki.eclipse.org/EclipseLink/Examples/Distributed

1) Install Eclipse 3.6 Helios EE edition
2) Add WebLogic Server Tools in "add new server"
3) create a server configuration to a WebLogic 10.3.4.0 domain
4) (you may need to go into the WAR and enable the JSF 2.0 component (choose the JSF 2.0/1.0.0.0_2-0-2 version))
   -this will setup enable JSF 2.0 (on top of the out of the box JSF 1.2 in WebLogic)
   see
http://wiki.eclipse.org/Image:Eclipse_36_helios_for_weblogic_1034_jsf2_facet.JPG

5) start Derby before starting WebLogic
c:\opt\derby10530\bin\startNetworkServer.bat
6) start weblogic in Eclipse
7) Run on server
8) Run SEClient from the current machine as is from eclipse, or
 a remote JVM using the following command line if running remotely
- copy the remote interface CollatzFacadeRemote and all the model classes or jar to the client bin directory (in packages)
run
C:\_experiment\0\org.eclipse.persistence.example.distributed.CollatzSE\bin>java 
-cp .;../resource/wlfullclient.jar 
org.eclipse.persistence.example.distributed.collatz.presentation.SEClient 
your_client_name_id 
t3://127.0.0.1:7001

9) After the first run (you should turn off DDL generation in persistence.xml so the database is not cleared on each redeploy)
      <!--property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
      <property name="eclipselink.ddl-generation.output-mode" value="both"/-->

>you should see the following in the client after about 10 sec when the first unitOfWork is processed
collatz: Remote Object: ClusterableRemoteRef(2112014917424158770S:127.0.0.1:[7001,7001,-1,-1,-1,-1,-1]:base_domain:AdminServer [2112014917424158770S:127.0.0.1:[7001,7001,-1,-1,-1,-1,-1]:base_domain:AdminServer/308])/308
_collatz: results sent to server after 5610 ms
_collatz: process UnitOfWork: org.eclipse.persistence.example.distributed.collatz.model.UnitOfWork@66( id: 66) ID#66 1048579-2097154 from: gx660a

>you should see the following on the server
_collatz: requestUnitOfWork(1048578-2097154) for processor org.eclipse.persistence.example.distributed.collatz.model.ActiveProcessor@1( id: 1)
[EL Fine]: 2011-02-16 16:33:28.411--ClientSession(155963)--Connection(4029435)--Thread(Thread[[ACTIVE] ExecuteThread: '20' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled Threads])--INSERT INTO UNITOFWORK (ID, ENDTIMESTAMP, EXTENT, INITIAL, MAXPATH, MAXVALUE, RETRIES, STARTTIMESTAMP, VERSION, KNOWNMAX_ID, KNOWNPATH_ID, PROCESSOR_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
	bind => [66, null, 2097154, 1048579, 523, 90239155648, 0, 1297890208411, 1, null, null, 1]
Comment 4 Michael OBrien CLA 2011-02-16 18:54:02 EST
>EJB project source - we need to separate the @Local and @Remote interfaces
from their @Stateless session bean implementation
https://fisheye2.atlassian.com/changelog/eclipselink?cs=8977
Comment 5 Michael OBrien CLA 2011-02-16 18:56:28 EST
Created attachment 189146 [details]
Distributed framework for Collatz EAR (without wlfullclient.jar)
Comment 6 Michael OBrien CLA 2011-02-16 18:57:41 EST
Created attachment 189147 [details]
Distributed 1 of n (SE client of EJB SSB) for Collatz (without wlfullclient.jar)
Comment 7 Michael OBrien CLA 2011-02-22 06:30:53 EST
Created attachment 189471 [details]
Rev 9000 - max path/value normalization
Comment 8 Michael OBrien CLA 2011-03-07 20:44:39 EST
>Avoiding Obstructed SVN Web Project
For some reason SVN is reporting an obstructed JSF web project whenever I modify the web project.  I narrowed it down to Eclipse Helios causing the "entries" file at the root to be deleted on refresh.
C:\view_w36b\examples\org.eclipse.persistence.example.distributed.CollatzWeb\.svn\entries
The fix is to keep a copy of this file (as long as the root structure does not change) and replace it after a refresh in Eclipse - just before commit.
Comment 9 Michael OBrien CLA 2011-03-09 11:06:26 EST
Created attachment 190771 [details]
on-JSF2 Ajax Servlet get/post combination as a performance baseline prior to using the JSR-311 pattern
Comment 11 Michael OBrien CLA 2011-03-21 09:55:52 EDT
Created attachment 191613 [details]
enable jsr-311 jax-rs capability on WebLogic 10.3.4
Comment 13 Michael OBrien CLA 2011-04-24 12:46:48 EDT
>Multithreaded contention research continues
- currently SimpleDateFormat and some SAXParser implementations in a SAXBuilder are being investigated - without using synchronization
http://wiki.eclipse.org/EclipseLink/Examples/Distributed#Thread_Contention_for_Shared_Resources
Comment 14 Michael OBrien CLA 2011-05-15 15:22:29 EDT
Created attachment 195673 [details]
Multithreaded client phase 1 - default to (hard + soft (HT) cores) to utilize 80-90% of multicore CPU
Comment 15 Michael OBrien CLA 2011-05-15 15:27:47 EDT
>Multithreaded SE client in SVN rev # 9382 - reaches up to 90% CPU utilization for 8 threads on a 4 core HT Core i7 920
https://fisheye2.atlassian.com/changelog/eclipselink?cs=9382
Comment 16 Michael OBrien CLA 2011-08-02 11:20:12 EDT
Created attachment 200727 [details]
Optimize read only query using COUNT - resulting in significant performance gains when used by an AJAX client
Comment 17 Eclipse Webmaster CLA 2022-06-09 10:25:35 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink