geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From maho77 <m.hoffm...@mvolution.de>
Subject Re: EntityExistsException: Attempt to persist detached object
Date Mon, 26 Nov 2007 13:11:59 GMT



Jacek Laskowski wrote:
> 
> 
> Hi,
> 
> Could you send us the openjpa logs - it should be in
> var/log/geronimo.log? I assume they're generated according to the
> property in persistence.xml:
> 
> <property name="openjpa.Log" value="DefaultLevel=TRACE,SQL=TRACE" />
> 
> I wonder why you do the following in the stand-alone client code:
> 
>  MTIGroup g1 = new MTIGroup();
>  g1.setId(2);
>  g1.setName("testGroup");
> 
> Note the setId() call.
> 
> The null from
> org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.getConnection(AbstractJDBCSeq.java:162)
> call suggests that there might be issues with geronimo plan file of
> the application. You've got
> <jta-data-source>xxxDataSouurce</jta-data-source> in persistence.xml
> file - there's 'u' doubled. Is that correct? Send us the geronimo plan
> you're using with the application. Is the data source one of the
> default data sources of Geronimo?
> 
> I have never worked with mysql and TableGenerator for jpa-based
> application in Geronimo so I'm asking these question to avoid dealing
> with the setup *if* the issue is simpler to fix without it.
> 
> Jacek
> 
> -- 
> Jacek Laskowski
> http://www.JacekLaskowski.pl
> 
> 
Hi,
I've attached my bean including the source files:

Here is the code of my stand-alone client:
		InitialContext ic = null;
		Properties properties = new Properties();

properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.RemoteInitialContextFactory");
		properties.put(Context.PROVIDER_URL,"ejbd://localhost:4201");

		try {
			ic = new InitialContext(properties);
			TestRemote lar = (TestRemote)ic.lookup("TestImplRemote");

			MTIGroup g1 = new MTIGroup();
			g1.setName("test");
			g1.setDescription("test description");
			lar.createGroup(g1);
			
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

The XXXDataSource is a MySQL XA DataSource, driver revision is 5.0.7.
Here is the database table create-command:

CREATE TABLE group_table (
	id INTEGER UNSIGNED NOT NULL,
	name VARCHAR(100) NOT NULL,
	description TEXT NOT NULL,
	UNIQUE KEY(name),
	PRIMARY KEY (id)
);

I have also tried 
CREATE TABLE group_table (
	id INTEGER UNSIGNED DEFAULT 0 NOT NULL,
	name VARCHAR(100) NOT NULL,
	description TEXT NOT NULL,
	UNIQUE KEY(name),
	PRIMARY KEY (id)
);

This configuration end with the following:
0  XXX  TRACE  [Thread-72] openjpa.Runtime - Setting the following
properties from "?" into configuration: {openjpa.Multithreaded=true,
openjpa.RestoreState=all,
openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@47704770,
openjpa.Sequence=table(Table=OPENJPASEQ, Increment=100),
openjpa.AutoDetach=close,
openjpa.MetaDataFactory=jpa(Types=entities.MTIGroup),
openjpa.TransactionMode=managed, openjpa.jdbc.SynchronizeMappings=false,
openjpa.ConnectionFactoryMode=managed,
openjpa.ConnectionFactory=org.tranql.connector.jdbc.DataSource@3bb43bb4,
openjpa.Id=XXX, openjpa.jdbc.DBDictionary=mysql(SupportsSubselect=true),
openjpa.Log=DefaultLevel=TRACE,SQL=TRACE,
openjpa.jdbc.UpdateManager=operation-order,
openjpa.NontransactionalRead=true,
javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
openjpa.Optimistic=true, openjpa.DetachState=all, openjpa.DataCache=false}
1  XXX  TRACE  [Thread-72] openjpa.MetaData - Scanning resource
"META-INF/orm.xml" for persistent types.
2  XXX  TRACE  [Thread-72] openjpa.MetaData - parsePersistentTypeNames()
found [entities.MTIGroup].
2  XXX  TRACE  [Thread-72] openjpa.MetaData - Found 1 classes with metadata
in 1 milliseconds.
0  XXX  TRACE  [Thread-72] openjpa.Runtime - Setting the following
properties from "?" into configuration: {openjpa.Multithreaded=true,
openjpa.RestoreState=all,
openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@47704770,
openjpa.Sequence=table(Table=OPENJPASEQ, Increment=100),
openjpa.AutoDetach=close, openjpa.BrokerImpl=non-finalizing,
openjpa.MetaDataFactory=jpa(Types=entities.MTIGroup),
openjpa.TransactionMode=managed, openjpa.jdbc.SynchronizeMappings=false,
openjpa.ConnectionFactoryMode=managed,
openjpa.ConnectionFactory=org.tranql.connector.jdbc.DataSource@3bb43bb4,
openjpa.Id=XXX, openjpa.jdbc.DBDictionary=mysql(SupportsSubselect=true),
openjpa.Log=DefaultLevel=TRACE,SQL=TRACE,
openjpa.jdbc.UpdateManager=operation-order,
openjpa.NontransactionalRead=true,
javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
openjpa.Optimistic=true, openjpa.BrokerFactory=jdbc,
openjpa.DetachState=all, openjpa.DataCache=false}
324  XXX  TRACE  [Thread-72] openjpa.Enhance - "entities/MTIGroup" requires
runtime enhancement: true
350  XXX  TRACE  [Thread-72] openjpa.MetaData - Loading metadata for "class
entities.MTIGroup" under mode "[META][QUERY]".
350  XXX  TRACE  [Thread-72] openjpa.MetaData - Parsing class
"entities.MTIGroup".
350  XXX  TRACE  [Thread-72] openjpa.MetaData - Parsing package
"entities.MTIGroup".
358  XXX  TRACE  [Thread-72] openjpa.MetaData - Generating default metadata
for type "entities.MTIGroup".
358  XXX  TRACE  [Thread-72] openjpa.MetaData - Using reflection for
metadata generation.
377  XXX  TRACE  [Thread-72] openjpa.MetaData - Parsing query "allGroups".
396  XXX  TRACE  [Thread-72] openjpa.MetaData - Parsing query "groupByName".
413  XXX  TRACE  [Thread-72] openjpa.MetaData - Set persistence-capable
superclass of "entities.MTIGroup" to "null".
413  XXX  TRACE  [Thread-72] openjpa.MetaData - Resolving metadata for
"entities.MTIGroup@681846948".
413  XXX  TRACE  [Thread-72] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@681846948.description".
413  XXX  TRACE  [Thread-72] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@681846948.id".
414  XXX  TRACE  [Thread-72] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@681846948.name".
414  XXX  TRACE  [Thread-72] openjpa.Enhance - Enhancing type "class
entities.MTIGroup".
6867  XXX  INFO   [Thread-74] openjpa.Runtime - Starting OpenJPA 1.0.0
6867  XXX  TRACE  [Thread-74] openjpa.Runtime - Properties:
openjpa.RestoreState: all
openjpa.Sequence: table(Table=OPENJPASEQ, Increment=100)
openjpa.jdbc.SQLFactory: default
openjpa.BrokerImpl: non-finalizing
openjpa.Id: XXX
openjpa.QueryCache: true
openjpa.ReadLockLevel: read
openjpa.LockManager: version
openjpa.jdbc.UpdateManager: operation-order
openjpa.NontransactionalRead: true
openjpa.DynamicDataStructs: false
openjpa.RetainState: true
openjpa.DetachState: all
openjpa.jdbc.MappingDefaults: jpa
openjpa.ClassResolver:
org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl
openjpa.AutoDetach: close
openjpa.TransactionMode: managed
openjpa.FlushBeforeQueries: true
openjpa.jdbc.TransactionIsolation: default
openjpa.jdbc.SchemaFactory: dynamic
openjpa.MetaDataRepository: default
openjpa.RuntimeUnenhancedClasses: supported
openjpa.jdbc.DriverDataSource: simple
openjpa.DataCache: false
openjpa.WriteLockLevel: write
openjpa.MetaDataFactory: jpa(Types=entities.MTIGroup)
openjpa.LockTimeout: -1
openjpa.jdbc.ResultSetType: forward-only
openjpa.ManagedRuntime: auto
openjpa.jdbc.LRSSize: query
openjpa.QueryCompilationCache: true
openjpa.jdbc.DBDictionary: mysql(SupportsSubselect=true)
openjpa.Log: true(DefaultLevel=TRACE,SQL=TRACE)
openjpa.jdbc.EagerFetchMode: parallel
openjpa.Optimistic: true
openjpa.SavepointManager: in-mem
openjpa.Multithreaded: true
openjpa.ProxyManager: default
openjpa.OrphanedKeyAction: log
openjpa.FetchBatchSize: -1
openjpa.AutoClear: datastore
openjpa.jdbc.Schemas: 
openjpa.jdbc.SynchronizeMappings: false
openjpa.ConnectionFactoryMode: managed
openjpa.RetryClassRegistration: false
openjpa.Compatibility: default
openjpa.MaxFetchDepth: -1
openjpa.InverseManager: false
openjpa.jdbc.FetchDirection: forward
openjpa.jdbc.SubclassFetchMode: join
openjpa.FetchGroups: default
openjpa.IgnoreChanges: false
openjpa.DataCacheTimeout: -1
openjpa.NontransactionalWrite: true
openjpa.ConnectionRetainMode: on-demand
openjpa.EntityManagerFactory: default
openjpa.BrokerFactory: jdbc
openjpa.DataCacheManager: default
6868  XXX  TRACE  [Thread-74] openjpa.MetaData - Using metadata factory
"org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@ca00ca".
6868  XXX  INFO   [Thread-74] openjpa.jdbc.JDBC - Using dictionary class
"org.apache.openjpa.jdbc.sql.MySQLDictionary".
6870  XXX  TRACE  [Thread-74] openjpa.MetaData - Scanning resource
"META-INF/orm.xml" for persistent types.
6870  XXX  TRACE  [Thread-74] openjpa.MetaData - parsePersistentTypeNames()
found [entities.MTIGroup].
6871  XXX  TRACE  [Thread-74] openjpa.MetaData - Found 1 classes with
metadata in 1 milliseconds.
6871  XXX  TRACE  [Thread-74] openjpa.MetaData - Loading metadata for "class
entities.MTIGroup" under mode "[META][QUERY]".
6871  XXX  TRACE  [Thread-74] openjpa.MetaData - Parsing class
"entities.MTIGroup".
6871  XXX  TRACE  [Thread-74] openjpa.MetaData - Parsing package
"entities.MTIGroup".
6987  XXX  TRACE  [Thread-74] openjpa.MetaData - Generating default metadata
for type "entities.MTIGroup".
7030  XXX  TRACE  [Thread-74] openjpa.MetaData - Parsing query "allGroups".
7050  XXX  TRACE  [Thread-74] openjpa.MetaData - Parsing query
"groupByName".
7070  XXX  TRACE  [Thread-74] openjpa.MetaData - Parsing table generator
"GroupIdGen".
7088  XXX  TRACE  [Thread-74] openjpa.MetaData - Set persistence-capable
superclass of "entities.MTIGroup" to "null".
7088  XXX  TRACE  [Thread-74] openjpa.MetaData - Resolving metadata for
"entities.MTIGroup@1458984694".
7088  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.description".
7088  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.id".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.name".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - Preparing mapping for
"entities.MTIGroup".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.id".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - 	"id" has mapping strategy
"org.apache.openjpa.jdbc.meta.strats.PrimitiveFieldStrategy".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.description".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - 	"description" has mapping
strategy "org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.name".
7089  XXX  TRACE  [Thread-74] openjpa.MetaData - 	"name" has mapping
strategy "org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData -
"entities.MTIGroup<discriminator>" has mapping strategy "none".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData -
"entities.MTIGroup<version>" has mapping strategy "none".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData - Resolving mapping for
"entities.MTIGroup@1458984694".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData - "entities.MTIGroup" has
mapping strategy "full".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData - Initializing mapping for
"entities.MTIGroup@1458984694".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.description".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.id".
7090  XXX  TRACE  [Thread-74] openjpa.MetaData - 	Resolving field
"entities.MTIGroup@1458984694.name".
7091  XXX  TRACE  [Thread-74] openjpa.Runtime - An exception occurred while
ending the transaction.  This exception will be re-thrown.
<openjpa-1.0.0-r420667:568756 nonfatal store error>
org.apache.openjpa.util.StoreException: null
	at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.getConnection(AbstractJDBCSeq.java:162)
	at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:341)
	at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.nextInternal(TableJDBCSeq.java:247)
	at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:60)
	at org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:160)
	at
org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:144)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:557)
	at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:450)
	at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:426)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:541)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134)
	at
org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:501)
	at
org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2770)
	at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39)
	at
org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:940)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1884)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1844)
	at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1762)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
	at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:239)
	at
org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:140)
	at
org.apache.openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
	at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:219)
	at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
	at
org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:212)
	at
org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:120)
	at
org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:164)
	at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:122)
	at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:84)
	at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:60)
	at org.apache.openejb.server.ServiceLogger.service(ServiceLogger.java:73)
	at
org.apache.openejb.server.ServiceAccessController.service(ServiceAccessController.java:55)
	at org.apache.openejb.server.ServiceDaemon$1.run(ServiceDaemon.java:117)
	at java.lang.Thread.run(Thread.java:810)
Caused by: javax.transaction.SystemException
	at
org.apache.openjpa.ee.RegistryManagedRuntime$TransactionManagerRegistryFacade.suspend(RegistryManagedRuntime.java:176)
	at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.getConnection(AbstractJDBCSeq.java:158)
	... 36 more
14:07:22,047 WARN  [Transaction] Unexpected exception from beforeCompletion;
transaction will roll back
<openjpa-1.0.0-r420667:568756 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: null
	at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.getConnection(AbstractJDBCSeq.java:162)
	at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:341)
	at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.nextInternal(TableJDBCSeq.java:247)
	at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:60)
	at org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:160)
	at
org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:144)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:557)
	at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:450)
	at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:426)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:541)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134)
	at
org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:501)
	at
org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2770)
	at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39)
	at
org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:940)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1884)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1844)
	at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1762)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
	at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:239)
	at
org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:140)
	at
org.apache.openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
	at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:219)
	at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
	at
org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:212)
	at
org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:120)
	at
org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:164)
	at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:122)
	at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:84)
	at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:60)
	at org.apache.openejb.server.ServiceLogger.service(ServiceLogger.java:73)
	at
org.apache.openejb.server.ServiceAccessController.service(ServiceAccessController.java:55)
	at org.apache.openejb.server.ServiceDaemon$1.run(ServiceDaemon.java:117)
	at java.lang.Thread.run(Thread.java:810)
Caused by: 
javax.transaction.SystemException
	at
org.apache.openjpa.ee.RegistryManagedRuntime$TransactionManagerRegistryFacade.suspend(RegistryManagedRuntime.java:176)
	at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.getConnection(AbstractJDBCSeq.java:158)
	... 36 more http://www.nabble.com/file/p13948662/XXXXBean.jar XXXXBean.jar 

When I use the following table creation:
CREATE TABLE group_table (
	id INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,
	name VARCHAR(100) NOT NULL,
	description TEXT NOT NULL,
	UNIQUE KEY(name),
	PRIMARY KEY (id)
);

and corresponding the annotion in the entity:

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public int getId() {
		return id;
	}

It works with the same client code. 

Mark
-- 
View this message in context: http://www.nabble.com/EntityExistsException%3A-Attempt-to-persist-detached-object-tf4856534s134.html#a13948662
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


Mime
View raw message