[CDO] CDOAdmin - NullPointerException on Server side using TCP connector [message #981305] |
Mon, 12 November 2012 10:13 |
Etienne ALLOGO Messages: 4 Registered: November 2012 |
Junior Member |
|
|
I have the following log error on server side When calling CDOAdmin.createRepository using TCP connection. It seems there is something wrong in communication prorocol.
I am using 4.1 cdo version (Indigo).
Net4jReceiveSerializer-Channel[1, SERVER, cdo-admin] [org.eclipse.net4j.signal.SignalProtocol] Received buffer for correlation 2
Net4jReceiveSerializer-Channel[1, SERVER, cdo-admin] [org.eclipse.net4j.signal.SignalProtocol] Got signalID: 2
net4j-Thread-2 [org.eclipse.net4j.signal.Signal] ================ Indicating: Signal[protocol=cdo-admin, id=2, name=CreateRepositoryIndication, correlation=-2]
net4j-Thread-2 [org.eclipse.internal.net4j.buffer.BufferPool] Retaining Buffer@46[RELEASED]
net4j-Thread-2 [org.eclipse.net4j.signal.Signal] ================ Responding: Signal[protocol=cdo-admin, id=2, name=CreateRepositoryIndication, correlation=-2]
net4j-Thread-2 [org.eclipse.net4j.signal.Signal] ================ Requesting: Signal[protocol=cdo-admin, id=4, name=RepositoryAddedRequest, correlation=1]
net4j-Thread-2 [org.eclipse.internal.net4j.buffer.BufferPool] Obtained Buffer@84[INITIAL]
net4j-Thread-2 [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)
net4j-Thread-2 [org.eclipse.net4j.signal.Signal] ================ Requesting: Signal[protocol=cdo-admin, id=4, name=RepositoryAddedRequest, correlation=2]
net4j-Thread-2 [org.eclipse.internal.net4j.buffer.BufferPool] Obtained Buffer@88[INITIAL]
net4j-Thread-2 [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)
net4j-Thread-2 [org.eclipse.net4j.signal.Signal] ================ Requesting: Signal[protocol=cdo-admin, id=4, name=RepositoryAddedRequest, correlation=1]
net4j-Thread-2 [org.eclipse.internal.net4j.buffer.BufferPool] Obtained Buffer@46[INITIAL]
net4j-Thread-2 [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)
net4j-Thread-2 [org.eclipse.net4j.util.lifecycle.Lifecycle] Activating Repository[esttt]
net4j-Thread-2 [org.eclipse.net4j.util.lifecycle.Lifecycle] Activating DBStore@98
The lines of code when exception is thrown in CDO are :
CDOAdminServerRepository [line 197]
Set<CDOID.ObjectType> objectIDTypes = getObjectIDTypes();
int types = objectIDTypes.size();
out.writeInt(types);
for (CDOID.ObjectType objectIDType : objectIDTypes)
{
out.writeEnum(objectIDType);
}
|
|
|
Re: [CDO] CDOAdmin - NullPointerException on Server side using TCP connector [message #981759 is a reply to message #981305] |
Mon, 12 November 2012 17:19 |
Etienne ALLOGO Messages: 4 Registered: November 2012 |
Junior Member |
|
|
And my Source test 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);
}
}
|
|
|
Re: [CDO] CDOAdmin - NullPointerException on Server side using TCP connector [message #981818 is a reply to message #981759] |
Mon, 12 November 2012 18:21 |
|
Hi Etienne,
Thanks for the detailed description. Can you please submit a bugzilla so that I can investigate the problem?
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
Am 12.11.2012 18:19, schrieb Etienne ALLOGO:
> And my Source test 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);
> }
>
> }
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.03089 seconds