Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EclipseLink/Examples/JPA/WebSphere7 Web Tutorial"

m (Install WebSphere Eclipse 3.4 Server Plugin)
m (Persistence JAR location)
Line 67: Line 67:
  
 
==Persistence JAR location==
 
==Persistence JAR location==
 +
*Where does the standard library '''plugins/com.ibm.ws.jpa.jar''' fit in? Is this a JPA spec jar or an '''OpenJPA''' implementation?
  
 
==EclipseLink JAR location==
 
==EclipseLink JAR location==

Revision as of 16:08, 15 April 2010

EclipseLink JPA Deployed on IBM WebSphere 7 using Eclipse WTP

  • This tutorial needs to be finished and/or expanded - as of 20100415 - I have approval to update this wiki via bug# bug# 309201.

Note: This tutorial' is under construction for the next week as of 200100415.

If you want to get a small web application running quickly on WebSphere 7.0 you can use Eclipse to create the EAR and attach to a running WebSphere instance in debug mode on port 7781.

This basic example details how to use Eclipse to run/debug a minimum J2EE web application servlet using EclipseLink JPA as the persistence provider. The goal of this example is to detail the minimum steps required to run EclipseLink inside the IBM WebSphere Application Server 7.0 server using the Eclipse IDE. At this point no presentation/controller layer such as JSF, Spring or Struts will be used beyond a basic HttpServlet so we can concentrate on the the integration layer JPA setup.

The DALI project was used to generate Entities from a schema with sequences already populated.

Development Environment

Software: http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR2/eclipse-jee-galileo-SR2-win32.zip Eclipse IDE for Java EE 3.5 Galileo SR 2] (April 2010 +) IBM J9 JRE 1.6.0 build 2.4 20080816_22093.

Prerequisites

Install Eclipse EE

  • I installed a clean version of Eclipse Galileo 3.5 SR2 EE Edition (32-bit) (April 2010) on a Window 7 64-bit install where the default JRE was the 64-Bit server version of the SUN JVM. I therefore needed to override the default java.exe by specifying the following shortcut override
C:\eclipse35-32bit-home\eclipse.exe -vm c:/jdk1.6.0_32-bit/bin/java.exe
  • Default eclipse.ini settings must be modified as referenced.

Install a Database

  • We will be using a remote Oracle 11 instance as well as a local Derby 10.5.3.0 instance.

Install WebSphere 7.0

I installed the commercial 7.0.0.0 version of IBM WebSphere 7 and then the 7.0.0.5 fixpack in 7.0.0-WS-WAS-WinX32-FP0000005.pak using the 7.0.0.5-WS-UPDI-WinIA32.zip installer.

Install WebSphere Eclipse 3.4 Server Plugin - unusable

We will first see if the WebSphere 6.0 or 6.1 plugin works with WebSphere 7.0 - it fails on missing jar files that are not present in 7.0. The WebSphere 6.1 Eclipse WTP server plugin is not shipped by default with Eclipse (WebSphere 6.0 for JEE 1.4 is).

  • Note: The WebSphere 6.1 plugin for Eclipse WTP is currently being developed - see the following Eclipse WTP enhancement request 160220 in progress.
  • We are not blocked from using Eclipse WTP to manage the WebSphere 6.1 server, but without this plugin we will need to attach manually to port 7781 of a running WebSphere server that was started in debug mode outside of the Eclipse IDE - we will use this alternate debug approach.
  • If you try to stub out the 73 jars required by the WebSphere 6.0 plugin to make it work with a WebSphere 7.0 server - you will get the following exception starting WebSphere from Eclipse.
com.ibm.ws.exception.ConfigurationError: java.lang.Exception: Cannot find BundleContext for service com.ibm.ws.runtime.config.ConfigServiceImpl
	at com.ibm.ws.runtime.WsServerImpl.bootConfigService(WsServerImpl.java:335)
	at com.ibm.ws.runtime.WsServerImpl.start(WsServerImpl.java:171)

WebSphere Configuration Changes

JNDI Datasource Setup

Global Scoped Datasource Setup

Downloading EclipseLink Libraries

Download EclipseLink using HTTP - recommended

Download EclipseLink using Maven

See the repository on http://www.eclipse.org/eclipselink/downloads/index.php

Download EclipseLink using SVN - developers only

Persistence JAR location

  • Where does the standard library plugins/com.ibm.ws.jpa.jar fit in? Is this a JPA spec jar or an OpenJPA implementation?

EclipseLink JAR location

JDBC JAR location

Create J2EE application

Persistence.xml

Publish EAR

Validating the WebSphere/EclipseLink configuration

Without eclipselink.jar reference

With eclipselink.jar reference

Perform CRUD operations: JPQL insert and query

Browser Output

Remote Debugging EclipseLink in WebSphere 7.0 from Eclipse 3.4

The following procedure details how to attach to a debug version of IBM WebSphere 7.0 with the Eclipse 3.4 IDE.

Note: we will not be modifying startServer.bat. The java process in that script is only for server startup - if you need to debug this part of the server.

Modify console setup to start server in debug mode

  • Login to the console using your admin login or a default username like system
  • Navigate to Servers | Server Types | WebSphere Application servers | server1
  • Navigate on the right down to Additional Properties | Debugging service
  • Enable JDWP by ckecking the checkbox Enable service at server startup"
    • The default properties below will be OK unmodified
      • JVM debug port = 7781
      • JVM debug arguments = -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7781
  • Optionally you can add server packages if you have the source for WebSphere
  • We will be debugging client test code and EclipseLink API in the Eclipse IDE

Websphere7 console debug screen.JPG

Start the WebSphere Server

Either run bin/startServer.bat or the following server ant test target in our suite.

<trunk>jpa\eclipselink.jpa.test>ant server-start

Attach Eclipse 3.4 to the debug port on WebSphere 7

  • Right-click your test code
  • Debug as | Debug Configurations
  • select Remote Java Application
  • create a new config by hitting the top-left new launch configuration icon
  • type a name for your config and modify only the port to read 7781
  • apply changes
  • click debug

Eclipse34 remote debug websphere7 screen.JPG

You should see the a stack trace ready for any breakpoints in your code that are hit - or suspend an orb thread to break into the code.


Deploy and Run EAR application

Depending on your breakpoints you will see a stacktrace hit in the Eclipse IDE similar to the following.

VirtualAttributeTestSuite [Remote Java Application]	
	IBM J9 VM[localhost:7781]	
		Thread [P=833989:O=0:CT] (Running)	
		Daemon Thread [Signal Dispatcher] (Running)	
...
		Daemon Thread [Thread-52] (Running)	
		Daemon Thread [ORB.thread.pool : 0] (Running)	
		Daemon Thread [ORB.thread.pool : 1] (Suspended (breakpoint at line 302 in ConcurrencyManager))	
			ConcurrencyManager.isAcquired() line: 302	
			ClientSession(AbstractSession).isInTransaction() line: 2405	
			ClientSession(AbstractSession).beginTransaction() line: 538	
			SequencingManager$Preallocation_Transaction_NoAccessor_State.getNextValue(Sequence, AbstractSession) line: 455	
			SequencingManager.getNextValue(AbstractSession, Class) line: 905	
			ClientSessionSequencing.getNextValue(Class) line: 70	
			ObjectBuilder.assignSequenceNumber(Object, AbstractSession) line: 277	
			RepeatableWriteUnitOfWork(UnitOfWorkImpl).assignSequenceNumber(Object, ClassDescriptor) line: 402	
			RepeatableWriteUnitOfWork(UnitOfWorkImpl).registerNotRegisteredNewObjectForPersist(Object, ClassDescriptor) line: 3952	
			RepeatableWriteUnitOfWork.registerNotRegisteredNewObjectForPersist(Object, ClassDescriptor) line: 359	
			RepeatableWriteUnitOfWork(UnitOfWorkImpl).registerNewObjectForPersist(Object, Map) line: 3899	
			EntityManagerImpl.persist(Object) line: 254	
			JPATxEmInvocation(JPAExEmInvocation).persist(Object) line: 336	
			JPATxEntityManager(JPAEntityManager).persist(Object) line: 123	
			VirtualAttributeTestSuite.testInsertVirtualAttribute() line: 63	
			NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
			NativeMethodAccessorImpl.invoke(Object, Object[]) line: 45	
			DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 37	
			Method.invoke(Object, Object...) line: 599	
			VirtualAttributeTestSuite(TestCase).runTest() line: 154	
			VirtualAttributeTestSuite(TestCase).runBare() line: 127	
			VirtualAttributeTestSuite(JUnitTestCase).runBareServer() line: 391	
			TestRunnerBean.runTest(String, String, Properties) line: 87	
			EJSRemote0SLTestRunner_ed643271.runTest(String, String, Properties) line: not available	
			_EJSRemote0SLTestRunner_ed643271_Tie.runTest(InputStream, ResponseHandler) line: not available	
			_EJSRemote0SLTestRunner_ed643271_Tie._invoke(String, InputStream, ResponseHandler) line: not available	
			WSExtendedServerDelegate(ServerDelegate).dispatchInvokeHandler(InterceptorManager, ServerRequestInfoImpl, String, Object, ServerRequestReader) line: 622	
			WSExtendedServerDelegate(ServerDelegate).dispatch(ServerRequest) line: 475	
			ORB(ORB).process(ServerRequest) line: 504	
			ORB.process(ServerRequest) line: 1571	
			Connection.respondTo(RequestHandler, IIOPReader) line: 2771	
			Connection.doWork(RequestHandler, IIOPReader) line: 2640	
			WorkUnitImpl.doWork() line: 63	
			PooledThread.run() line: 118	
			ThreadPool$Worker.run() line: 1527	
		Daemon Thread [AIO Timer Thread 1] (Running)	
		Daemon Thread [WebContainer : 0] (Running)	
...
 	        Daemon Thread [RT=7:P=833989:O=0:WSTCPTransportConnection[addr=10.156.52.98,port=1553,local=9104]] (Running)	

References

History

  • 20090115: Originated on build EclipseLink 1.1 M6 - Michael O'Brien
  • 20100415: Updating for eclipselink.jar placement for container managed and application managed scenarios in EclipseLink enhancement # 309201

Back to the top