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

Bug 361679

Summary: MalformedURLException running app outside Eclipse
Product: [Eclipse Project] Equinox Reporter: d.zinato
Component: FrameworkAssignee: Project Inbox <eclipselink.orm-inbox>
Status: CLOSED DUPLICATE QA Contact:
Severity: blocker    
Priority: P3    
Version: 3.7   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description d.zinato CLA 2011-10-21 11:35:44 EDT
I developed a simple test application, based on EclipseLink/JPA.
It works fine when I launch the app inside Eclipse, but it doesn't work outside it.
I'm using this deploy structure:

configuration\
plugins\
org.eclipse.equinox.common_3.6.0.v20110523.jar
org.eclipse.osgi_3.7.1.R37x_v20110808-1106.jar
org.eclipse.update.configurator_3.3.100.v20100512.jar
osgi.tkdata.bundle.impl.starter_1.0.0.201001141858.jar
start_5555.bat
starter.sequence

I start org.eclipse.osgi_3.7.1.R37x_v20110808-1106.jar using this start_5555.bat script:

java -jar org.eclipse.osgi_3.7.1.R37x_v20110808-1106.jar -console 5555

It loads this configuration\config.ini file after startup:

osgi.bundles=org.eclipse.equinox.common@2:start,org.eclipse.update.configurator@3:start, osgi.tkdata.bundle.impl.starter@5:start
eclipse.ignoreApp=true
osgi.clean=true
osgi.framework.activeThreadType=normal
osgi.noShutdown=true

The osgi.tkdata.bundle.impl.starter is a simple bundle that after start send the start command to all bundles installed by org.eclipse.update.configurator; this is the sequence used:


# START LEVEL:-1
org.eclipse.osgi
# LEVEL:1
javax.persistence
org.apache.log4j
org.eclipse.equinox.cm
org.eclipse.equinox.log
# LEVEL:2
org.eclipse.persistence.jpa
# LEVEL:default
javax.xml
ojdbc14
org.apache.commons.logging
org.eclipse.osgi.services
org.eclipse.persistence.antlr
org.eclipse.persistence.asm
org.eclipse.persistence.core
org.eclipse.persistence.jpa.osgi
org.eclipse.soda.sat.core
org.eclipse.soda.sat.equinox.console.cmdprov
osgi.tkdata.services.api.bundletester
osgi.tkdata.services.api.configloader
osgi.tkdata.services.api.usermanager.api
osgi.tkdata.services.api.usermanager.model
osgi.tkdata.services.impl.bundletester
osgi.tkdata.services.impl.configloader
osgi.tkdata.services.impl.log4jlistener
osgi.tkdata.services.impl.usermanager
osgi.tkdata.utils.globalutils.jpaglobalutils
osgi.tkdata.utils.globalutils

My model is stored into osgi.tkdata.services.api.usermanager.model bundle; in its META-INF package there are this persistence.xml


<?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="osgi.tkdata.services.api.usermanager.model">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>	
<class>osgi.tkdata.services.api.usermanager.model.Group</class>
<class>osgi.tkdata.services.api.usermanager.model.User</class>
<class>osgi.tkdata.services.api.usermanager.model.Context</class>
<class>osgi.tkdata.services.api.usermanager.model.Property</class>
<class>osgi.tkdata.services.api.usermanager.model.Operation</class>
<class>osgi.tkdata.services.api.usermanager.model.LogOperation</class>
<properties>		   
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="javax.persistence.jdbc.user" value="TKDATA_USER01"/>
<property name="javax.persistence.jdbc.password" value="tkdata"/>
<property name="eclipselink.cache.shared" value="false"/>	
<property name="eclipselink.cache.type.default" value="NONE"/>			
<!-- questo per scrivere a video l'output di eclispe link 								
<property name="eclipselink.logging.level" value="FINE"/> --> 			
<!-- Data model creation
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="sql-script" />  
<property name="eclipselink.application-location" value="D:\temp\"/>
-->   			  			
</properties>
</persistence-unit>	
</persistence>

and this MANIFEST.MF:

Manifest-Version: 1.0
Export-Package: osgi.tkdata.services.api.usermanager.model
Bundle-ActivationPolicy: lazy
Bundle-Version: 1.0.0.201110211248
Bundle-Name: osgi.tkdata.services.api.usermanager.model
Bundle-ManifestVersion: 2
Import-Package: javax.persistence,
 org.eclipse.persistence.config
Bundle-SymbolicName: osgi.tkdata.services.api.usermanager.model
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
JPA-PersistenceUnits: osgi.tkdata.services.api.usermanager.model

After the start, I obtain this error message:

2011-10-21 17:25:05,078 ERROR  - [osgi.tkdata.services.impl.usermanager] UserManagerImpl activation error:
Exception Description: An exception was thrown while trying to load persistence unit at url: bundleresource://25.fwk11625173
Internal Exception: Exception [EclipseLink-30004] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while processing persistence.xml from URL: bundleresource://25.fwk11625173
Internal Exception: java.net.MalformedURLException
org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionLoadingFromUrl(PersistenceUnitLoadingException.java:99)
org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceArchive(PersistenceUnitProcessor.java:538)
org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.getPersistenceUnits(PersistenceUnitProcessor.java:444)
org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.initPersistenceUnits(JPAInitializer.java:282)
org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.initialize(JPAInitializer.java:265)
org.eclipse.persistence.jpa.osgi.PersistenceProvider.getInitializer(PersistenceProvider.java:91)
org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:71)
org.eclipse.persistence.jpa.osgi.EMFServiceProxyHandler.createEMF(EMFServiceProxyHandler.java:107)
org.eclipse.persistence.jpa.osgi.EMFBuilderServiceProxyHandler.invoke(EMFBuilderServiceProxyHandler.java:76)
$Proxy1.createEntityManagerFactory(Unknown Source)
org.eclipse.persistence.javax.persistence.osgi.OSGiProviderResolver.lookupEMFBuilder(Unknown Source)
org.eclipse.persistence.javax.persistence.osgi.OSGiProviderResolver.createEntityManagerFactory(Unknown Source)
javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
osgi.tkdata.utils.globalutils.jpa.JpaBaseManager.initializeEntityManagerFactory(JpaBaseManager.java:70)
osgi.tkdata.utils.globalutils.jpa.JpaBaseManager.initializeEntityManagerFactory(JpaBaseManager.java:55)
osgi.tkdata.services.impl.usermanager.Activator.activate(Activator.java:35)
org.eclipse.soda.sat.core.framework.BaseBundleActivator$1.activate(BaseBundleActivator.java:435)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager.activate(BundleActivationManager.java:290)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager.performActivation(BundleActivationManager.java:1589)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager.access$2(BundleActivationManager.java:1574)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager$3.acquired(BundleActivationManager.java:573)
org.eclipse.soda.sat.core.internal.record.container.ImportServiceRecordContainer.serviceAcquired(ImportServiceRecordContainer.java:582)
org.eclipse.soda.sat.core.internal.record.container.ImportServiceRecordContainer.access$1(ImportServiceRecordContainer.java:566)
org.eclipse.soda.sat.core.internal.record.container.ImportServiceRecordContainer$5.serviceAcquired(ImportServiceRecordContainer.java:352)
org.eclipse.soda.sat.core.internal.record.ImportServiceRecord.acquire(ImportServiceRecord.java:116)
org.eclipse.soda.sat.core.internal.record.container.ImportServiceRecordContainer$1.execute(ImportServiceRecordContainer.java:64)
org.eclipse.soda.sat.core.internal.record.container.ServiceRecordContainer.doForService(ServiceRecordContainer.java:363)
org.eclipse.soda.sat.core.internal.record.container.ServiceRecordContainer.doForEach(ServiceRecordContainer.java:330)
org.eclipse.soda.sat.core.internal.record.container.ImportServiceRecordContainer.acquire(ImportServiceRecordContainer.java:303)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager.acquireImportedServices(BundleActivationManager.java:234)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager.acquireImportServiceRecords(BundleActivationManager.java:250)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager.startSync(BundleActivationManager.java:2054)
org.eclipse.soda.sat.core.internal.framework.bundle.BundleActivationManager.start(BundleActivationManager.java:2023)
org.eclipse.soda.sat.core.framework.BaseBundleActivator.start(BaseBundleActivator.java:1371)
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
java.security.AccessController.doPrivileged(Native Method)
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299)
org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:291)
osgi.tkdata.bundle.impl.starter.BundleStarter.execStartSequence(BundleStarter.java:102)
osgi.tkdata.bundle.impl.starter.Activator.start(Activator.java:16)
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
java.security.AccessController.doPrivileged(Native Method)
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)
org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1131)
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

Last 2 things:

 - Again, inside Eclipse the same configuration works fine
 - I used this deploy structure for many other systems based on EclipseLink 1.2.0 and it always worked

Now i have to port my old projects on new EclipseLink, but i'm unable to solve this problem.
Thanks for any help.
Comment 1 d.zinato CLA 2011-10-25 06:14:47 EDT
I found a (partial) workaround: using this deploy configuration

configuration\
plugins\
service_wrapper\
org.eclipse.equinox.common_3.6.0.v20091203.jar
org.eclipse.osgi_3.6.0.v20091204.jar
org.eclipse.update.configurator_3.3.0.v20090312.jar
osgi.tkdata.bundle.impl.starter_1.0.0.201001141858.jar
start_5555.bat
start_hps.bat
starter.sequence

the MalformedURLException disappears, and all works.
It seems a problem of Equinox 3.7......
Comment 2 d.zinato CLA 2011-10-28 11:38:28 EDT
Ok, changing manually the bundle, i found that the problem depends by Equinox 3.7.
Using org.eclipse.osgi bundle version 3.7 i obtain the error; using org.eclipse.osgi bundle version 3.6 all works.

I move this problem from EclipseLink to Equinox.
Comment 3 d.zinato CLA 2011-11-03 07:45:48 EDT

*** This bug has been marked as a duplicate of bug 355484 ***