Hi
I am testing JESpace in my current jPos project, so I have configured my ChannleAdaptor and my MUX to work with JESpace:
<space>je:myspace:/home/jpos/spaces/myspace</space>
I am got an error at starting:
[java] <log realm="foo.bar.jpos.redsys.MyChannelAdaptor" at="Wed Oct 16 15:43:25 CEST 2013.517">
[java] <debug>
[java] initializing Channel
[java] </debug>
[java] </log>
[java] Exception in thread "channel-receiver-bank-receive" org.jpos.space.SpaceError: java.io.NotSerializableException: java.lang.Object
[java] at org.jpos.space.JESpace$Ref.serialize(JESpace.java:504)
[java] at org.jpos.space.JESpace$Ref.<init>(JESpace.java:459)
[java] at org.jpos.space.JESpace.out(JESpace.java:101)
[java] at foo.bar.jpos.redsys.MyChannelAdaptor$Receiver.run(MyChannelAdaptor.java:443)
[java] at java.lang.Thread.run(Thread.java:662)
[java] Caused by: java.io.NotSerializableException: java.lang.Object
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
[java] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
[java] at org.jpos.space.JESpace$Ref.serialize(JESpace.java:501)
[java] ... 4 more
[java] <log realm="foo.bar.jpos.redsys.MyChannelAdaptor" at="Wed Oct 16 15:43:25 CEST 2013.590">
[java] <debug>
[java] is channel connected?: false
[java] </debug>
[java] </log>
[java] <log realm="foo.bar.jpos.redsys.MyChannelAdaptor" at="Wed Oct 16 15:43:25 CEST 2013.592">
[java] <debug>
[java] checking connection
[java] </debug>
[java] </log>
[java] <log realm="my-adapter-channel" at="Wed Oct 16 15:43:25 CEST 2013.606" lifespan="1ms">
[java] <receive>
[java] <iso-exception>
[java] unconnected ISOChannel
[java] org.jpos.iso.ISOException: unconnected ISOChannel
[java] at org.jpos.iso.BaseChannel.receive(BaseChannel.java:662)
[java] at foo.bar.jpos.redsys.MyChannelAdaptor$Receiver.run(MyChannelAdaptor.java:432)
[java] at java.lang.Thread.run(Thread.java:662)
[java] </iso-exception>
[java] </receive>
[java] </log>
[java] <log realm="foo.bar.jpos.redsys.MyChannelAdaptor" at="Wed Oct 16 15:43:25 CEST 2013.608">
[java] <warn>
[java] channel-receiver-bank-receive
[java] <iso-exception>
[java] unconnected ISOChannel
[java] org.jpos.iso.ISOException: unconnected ISOChannel
[java] at org.jpos.iso.BaseChannel.receive(BaseChannel.java:662)
[java] at foo.bar.jpos.redsys.MyChannelAdaptor$Receiver.run(MyChannelAdaptor.java:432)
[java] at java.lang.Thread.run(Thread.java:662)
[java] </iso-exception>
[java] </warn>
[java] </log>
[java] <log realm="foo.bar.jpos.redsys.MyChannelAdaptor" at="Wed Oct 16 15:43:25 CEST 2013.618">
[java] <debug>
[java] channel not connected. connecting channel....
[java] </debug>
[java] </log>
The error is pointing to MyChannelAdaptor.java:432: (red line)
public class Receiver implements Runnable {
public Receiver() {
super();
}
public void run() {
Thread.currentThread().setName("channel-receiver-" + out);
while (running()) {
try {
Object r = sp.rd(ready, 5000L);
if (r == null)
continue;
ISOMsg m = channel.receive();
rx++;
lastTxn = System.currentTimeMillis();
if (timeout > 0)
sp.out(out, m, timeout);
else
sp.out(out, m);
} catch (ISOException e) {
if (running()) {
getLog().warn("channel-receiver-" + out, e);
if (!ignoreISOExceptions) {
sp.out(reconnect, new Object(), delay);
disconnect();
sp.out(in, new Object()); // wake-up Sender
}
ISOUtil.sleep(1000);
}
} catch (SocketTimeoutException e) {
if (running()) {
getLog().warn("channel-receiver-" + out, "Read timeout");
sp.out(reconnect, new Object(), delay);
disconnect();
sp.out(in, new Object()); // wake-up Sender
ISOUtil.sleep(1000);
}
} catch (Exception e) {
if (running()) {
getLog().warn("channel-receiver-" + out, e);
sp.out(reconnect, new Object(), delay);
disconnect();
sp.out(in, new Object()); // wake-up Sender
ISOUtil.sleep(1000);
}
}
}
}
}
So, it looks like the code is not working with a JESpace. Am I misunderstanding something?
On the other hand, I also tried to start a second instance of jPos pointing to the same JESpace. The idea is to have two instances of jPos (active-active) and don't care where the petition come from. This is the error I see in the second instance at starting:
[java] <log realm="foo.bar.jpos.redsys.MyChannelAdaptor" at="Wed Oct 16 15:44:11 CEST 2013.886">
[java] <warn>
[java] init
[java] <exception name="com.sleepycat.je.EnvironmentLockedException: (JE 4.1.10) /home/nnp_jpos/jpos/spaces/myspace The environment cannot be locked for single writer access. ENV_LOCKED: The je.lck file could not be locked. Environment is invalid and must be closed.">
[java] org.jpos.space.SpaceError: com.sleepycat.je.EnvironmentLockedException: (JE 4.1.10) /home/nnp_jpos/jpos/spaces/myspace The environment cannot be locked for single writer access. ENV_LOCKED: The je.lck file could not be locked. Environment is invalid and must be closed.
[java] at org.jpos.space.JESpace.<init>(JESpace.java:90)
[java] at org.jpos.space.JESpace.getSpace(JESpace.java:302)
[java] at org.jpos.space.SpaceFactory.createSpace(SpaceFactory.java:143)
[java] at org.jpos.space.SpaceFactory.getSpace(SpaceFactory.java:119)
[java] at org.jpos.space.SpaceFactory.getSpace(SpaceFactory.java:107)
[java] at foo.bar.jpos.redsys.MyChannelAdaptor.grabSpace(MyChannelAdaptor.java:629)
[java] at foo.bar.jpos.redsys.MyChannelAdaptor.initSpaceAndQueues(MyChannelAdaptor.java:338)
[java] at foo.bar.jpos.redsys.MyChannelAdaptor.initService(MyChannelAdaptor.java:99)
[java] at org.jpos.q2.QBeanSupport.init(QBeanSupport.java:99)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:93)
[java] at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:27)
[java] at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
[java] at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120)
[java] at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:264)
[java] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
[java] at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:762)
[java] at org.jpos.q2.QFactory.createQBean(QFactory.java:114)
[java] at org.jpos.q2.Q2.deploy(Q2.java:447)
[java] at org.jpos.q2.Q2.deploy(Q2.java:264)
[java] at org.jpos.q2.Q2.run(Q2.java:168)
[java] at java.lang.Thread.run(Thread.java:662)
[java] Caused by: com.sleepycat.je.EnvironmentLockedException: (JE 4.1.10) /home/nnp_jpos/jpos/spaces/myspace The environment cannot be locked for single writer access. ENV_LOCKED: The je.lck file could not be locked. Environment is invalid and must be closed.
[java] at com.sleepycat.je.log.FileManager.<init>(FileManager.java:350)
[java] at com.sleepycat.je.dbi.EnvironmentImpl.<init>(EnvironmentImpl.java:439)
[java] at com.sleepycat.je.dbi.EnvironmentImpl.<init>(EnvironmentImpl.java:340)
[java] at com.sleepycat.je.dbi.DbEnvPool.getEnvironment(DbEnvPool.java:207)
[java] at com.sleepycat.je.Environment.makeEnvironmentImpl(Environment.java:229)
[java] at com.sleepycat.je.Environment.<init>(Environment.java:211)
[java] at com.sleepycat.je.Environment.<init>(Environment.java:165)
[java] at org.jpos.space.JESpace.<init>(JESpace.java:82)
[java] ... 24 more
[java] </exception>
[java] </warn>
[java] </log>
Again, Am I misunderstanding something?
This is my scenario:
Cliente -> my application <-> jPos <-> bank
Communication can be initiated in both jPos or bank but if a initiated a communication from jpos to bank, back can response to any jpos instance (that is why I want to use JESpace).
Thanks in advance,
Juande