Hi,
I'm developing an application using BitcoinJ using Java JEE 7, Glassfish 4
server, Netbeans IDE.
When debugging the application's code at method "addListener" from
WalletAppKit the an exception shows up.
Could someone help me solve this problem?
Here is the code:
package apkt.opreturn;
import apkt.dao.jpa.GenericDaoJpa;
import apkt.model.OpReturn;
import apkt.service.OpReturnService;
import com.google.common.util.concurrent.Service;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Asynchronous;
import javax.ejb.EJB;
import javax.ejb.Singleton;
import javax.ejb.Startup;
//import javax.enterprise.concurrent.ManagedThreadFactory;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.InsufficientMoneyException;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.Transaction;
import org.bitcoinj.kits.WalletAppKit;
import org.bitcoinj.params.TestNet3Params;
import org.bitcoinj.script.ScriptBuilder;
import org.bitcoinj.wallet.DeterministicSeed;
import org.bitcoinj.wallet.SendRequest;
import org.bitcoinj.wallet.Wallet;
import org.bitcoinj.wallet.listeners.WalletChangeEventListener;
@Singleton
@Startup
public class Demo {
@EJB
private Demo self;
public static NetworkParameters params = TestNet3Params.get();
public static final String APP_NAME = "WalletTemplate";
private static final String WALLET_FILE_NAME =
APP_NAME.replaceAll("[^a-zA-Z0-9.-]", "_") + "-"
+ params.getPaymentProtocolId();
private WalletAppKit bitcoin;
@PostConstruct
public void startup() {
self.startThread();
}
@Asynchronous
public void startThread() {
try {
start();
} catch (IOException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null,
ex);
}
}
public void start() throws IOException {
setupWalletKit(null);
// when debugging gets to this line of code, the exception shows up
bitcoin.addListener(new Service.Listener() {
@Override
public void running() {
try {
super.running();
byte[] b = "17-01-2017 Mane, dobrodosao! vole te tata i
mama. Gospodi pomiluj nas.".getBytes("UTF-8");
// Create a tx with an OP_RETURN output
Transaction tx = new Transaction(params);
tx.addOutput(Coin.ZERO,
ScriptBuilder.createOpReturnScript(b));
System.out.println("before: " +
bitcoin.wallet().getBalance().toString());
// Send it to the Bitcoin network
bitcoin.wallet().sendCoins(SendRequest.forTx(tx));
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
} catch (InsufficientMoneyException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
}
}
}, Runnable::run);
bitcoin.addListener(new Service.Listener() {},
OpReturnRunnable::runLater);
bitcoin.startAsync();
}
public void setupWalletKit(DeterministicSeed seed) {
bitcoin = new WalletAppKit(params, new File("."), WALLET_FILE_NAME)
{
@Override
protected void onSetupCompleted() {
// Don't make the user wait for confirmations for now, as
the intention is they're sending it
// their own money!
bitcoin.wallet().allowSpendingUnconfirmedTransactions();
}
};
}
}
Warning: Context path from ServletContext: differs from path from
bundle: /
Warning: A system exception occurred during an invocation on EJB Demo,
method: public void apkt.opreturn.Demo.startThread()
Warning: javax.ejb.EJBException
at
com.sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:752)
at
com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:702)
at
com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:507)
at
com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4566)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2074)
at com.sun.ejb.containers.EjbAsyncTask.call(EjbAsyncTask.java:114)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IncompatibleClassChangeError: class
apkt.opreturn.Demo$1 has interface
com.google.common.util.concurrent.Service$Listener as super class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at
org.glassfish.web.loader.WebappClassLoader.findClass(WebappClassLoader.java:1220)
at
org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1750)
at
org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633)
at apkt.opreturn.Demo.write(Demo.java:80)
at apkt.opreturn.Demo.startThread(Demo.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081)
at
org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153)
at
com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656)
at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
at
org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:73)
at
org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at
com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746)
at com.sun.ejb.containers.EjbAsyncTask.call(EjbAsyncTask.java:101)
--
You received this message because you are subscribed to the Google Groups
"bitcoinj" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.