|
|
|
|
Re: [CDO] Exception on pre-built binary package [message #981340 is a reply to message #895060] |
Mon, 12 November 2012 05:43  |
Eclipse User |
|
|
|
I have the following trace when I call CdoAdmin.createRepository :
net4j-Thread-5 [org.eclipse.internal.net4j.buffer.BufferPool] Obtained Buffer@204[INITIAL]
net4j-Thread-5 [org.eclipse.net4j.signal.SignalProtocol] Put signal id 4
[WARN] A problem occured while notifying client SignalProtocol[cdo-admin]
java.lang.NullPointerException
at org.eclipse.emf.cdo.server.internal.admin.CDOAdminServerRepository.write(CDOAdminServerRepository.java:197)
at org.eclipse.emf.cdo.server.internal.admin.protocol.RepositoryAddedRequest.requesting(RepositoryAddedRequest.java:35)
at org.eclipse.net4j.signal.Request.doExtendedOutput(Request.java:67)
at org.eclipse.net4j.signal.Signal.doOutput(Signal.java:298)
at org.eclipse.net4j.signal.Request.doExecute(Request.java:59)
at org.eclipse.net4j.signal.SignalActor.execute(SignalActor.java:53)
at org.eclipse.net4j.signal.Signal.runSync(Signal.java:253)
at org.eclipse.net4j.signal.SignalProtocol.startSignal(SignalProtocol.java:440)
at org.eclipse.net4j.signal.Request.sendAsync(Request.java:53)
at org.eclipse.emf.cdo.server.internal.admin.protocol.CDOAdminServerProtocol.sendRepositoryAdded(CDOAdminServerProtocol.java:51)
at org.eclipse.emf.cdo.server.internal.admin.CDOAdminServer.repositoryAdded(CDOAdminServer.java:164)
at org.eclipse.emf.cdo.server.internal.admin.CDOAdminServer$1.onAdded(CDOAdminServer.java:52)
at org.eclipse.net4j.util.container.ContainerEventAdapter$1.added(ContainerEventAdapter.java:50)
at org.eclipse.net4j.util.container.ContainerEvent.accept(ContainerEvent.java:113)
at org.eclipse.net4j.util.container.ContainerEventAdapter.notifyContainerEvent(ContainerEventAdapter.java:46)
at org.eclipse.net4j.util.container.ContainerEventAdapter.notifyEvent(ContainerEventAdapter.java:35)
at org.eclipse.net4j.util.event.Notifier.fireEventSafe(Notifier.java:146)
at org.eclipse.net4j.util.event.Notifier.fireEvent(Notifier.java:110)
at org.eclipse.net4j.util.event.Notifier.fireEvent(Notifier.java:86)
at org.eclipse.net4j.util.container.ManagedContainer.fireEvent(ManagedContainer.java:478)
at org.eclipse.net4j.util.container.ManagedContainer.putElement(ManagedContainer.java:361)
at org.eclipse.net4j.util.container.ManagedContainer.putElement(ManagedContainer.java:337)
at org.eclipse.emf.cdo.server.CDOServerUtil.addRepository(CDOServerUtil.java:207)
at org.eclipse.emf.cdo.server.internal.admin.CDOAdminServer.doCreateRepository(CDOAdminServer.java:110)
at org.eclipse.emf.cdo.spi.common.admin.AbstractCDOAdmin.createRepository(AbstractCDOAdmin.java:105)
at org.eclipse.emf.cdo.server.internal.admin.protocol.CreateRepositoryIndication.responding(CreateRepositoryIndication.java:54)
at org.eclipse.net4j.signal.IndicationWithResponse.doExtendedOutput(IndicationWithResponse.java:98)
at org.eclipse.net4j.signal.Signal.doOutput(Signal.java:298)
at org.eclipse.net4j.signal.IndicationWithResponse.execute(IndicationWithResponse.java:67)
at org.eclipse.net4j.signal.Signal.runSync(Signal.java:253)
at org.eclipse.net4j.signal.Signal.run(Signal.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
My client code is :
package ........model.tests;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import junit.framework.Assert;
import org.eclipse.emf.cdo.admin.CDOAdminClient;
import org.eclipse.emf.cdo.admin.CDOAdminClientUtil;
import org.eclipse.emf.cdo.common.admin.CDOAdmin;
import org.eclipse.emf.cdo.common.admin.CDOAdminRepository;
import org.eclipse.emf.cdo.net4j.CDONet4jSession;
import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.net4j.Net4jUtil;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.tcp.TCPUtil;
import org.eclipse.net4j.util.container.IPluginContainer;
import org.eclipse.net4j.util.io.IOUtil;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
import org.junit.BeforeClass;
import org.junit.Test;
...
public class TestCdoClient {
private static IConnector connector;
public static final long DEFAULT_TIMEOUT = 500;
private static final String ADMIN_HANDLER_TYPE = ConnectionPackage.eNS_PREFIX;
@BeforeClass
public static void init() {
// The following lines are not needed if the extension
// registry (OSGi/Equinox) is running
Net4jUtil.prepareContainer(IPluginContainer.INSTANCE);
TCPUtil.prepareContainer(IPluginContainer.INSTANCE);
connector = (IConnector) IPluginContainer.INSTANCE.getElement( //
"org.eclipse.net4j.connectors", // Product group
"tcp", // Type
"localhost:2036");
}
@Test
public void test() throws IOException, InterruptedException {
CDOAdmin admin = openAdmin(null);
try {
int size = admin.getRepositories().length;
.. repo = ...Factory.eINSTANCE
.create...Repository();
repo.setDatabaseHostName("localhost");
...
final String value = "cdoTestClientRepo"
+ System.currentTimeMillis();
repo.setName(value);
Map<String, Object> propperties = new HashMap<String, Object>();
EList<EAttribute> attributes = repo.eClass().getEAttributes();
for (EAttribute eAttribute : attributes) {
propperties.put(eAttribute.getName(), repo.eGet(eAttribute));
}
CDOAdminRepository repo2 = null;
try {
// FIXME BUG CDO
repo2 = admin.createRepository(value, ADMIN_HANDLER_TYPE,
propperties);
} catch (Exception e) {
e.printStackTrace();
// FIXME BUG CDO - Always occurred
} finally {
disposeAdmin(admin);
admin = openAdmin(null);
CDOAdminRepository[] repos = admin.getRepositories();
for (CDOAdminRepository cdoAdminRepository : repos) {
if (cdoAdminRepository.getName().equals(repo.getName())) {
repo2 = cdoAdminRepository;
}
}
}
Assert.assertNotNull(repo2);
Assert.assertEquals(value, repo2.getName());
Assert.assertEquals(size + 1, admin.getRepositories().length);
repo2.delete(ADMIN_HANDLER_TYPE);
Assert.assertEquals(null, admin.getRepository(value));
Assert.assertEquals(size, admin.getRepositories().length);
} finally {
cleanup(admin);
}
}
private CDOAdmin openAdmin(Object object) throws InterruptedException {
String url = connector.getURL();
final CDOAdminClient admin = CDOAdminClientUtil.openAdmin(url,
DEFAULT_TIMEOUT);
long timeout = System.currentTimeMillis() + DEFAULT_TIMEOUT + 10;
while (System.currentTimeMillis() < timeout && !admin.isConnected()) {
Thread.sleep(10);
}
return admin;
}
private void cleanup(CDOAdmin admin) {
disposeAdmin(admin);
connector.close();
}
private void disposeAdmin(CDOAdmin admin) {
IOUtil.closeSilent(admin);
}
}
I have to dispose CDOAdmin and reopen it to conturn this excepion.
I've always a Timeout excetion on client site that I catch, but it will be difficult to maintain an efficient code in my UI application.
|
|
|
Powered by
FUDForum. Page generated in 0.03823 seconds