Doing BMP with EJB3. JNDI problems?
jgf1 Mar 7, 2008 12:27 PMHi again.
Stuck on what I think is an ideosyncrasy in the way JBoss implements JNDI lookups. I was wondering if someone could shed some light?
Following along with Beginning Java EE 5 book again...
I have an application with following directory structure:
BMP +beans 1 StockList.java 2 StockListBean.java +beans_2x 3 Stock.java 4 StockBean.java 5 StockHome.java +client 6 StockClient.java +META-INF 7 Application.xml 8 Ejb-jar.xml 9 Jboss.xml 10 StockList2xBmp.jar (contains 8,9, classes for 3,4,5) 11 StockListBmpApp.ear (contains 7 & 10) 12 StockListApp.ejb3 (contains 1 & 2) 11 Gets deployed first, followed by 12. 6 is run with following command: java -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -Djava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces -Djava.naming.provider.url=localhost client.StockClient
Application.xml:
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application5.xsd" version="5"> <display-name>StockListBmpApp</display-name> <description>Application description</description> <module> <ejb>StockList2xBmp.jar</ejb> </module> </application>
ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> <display-name>StockListBmpJar</display-name> <enterprise-beans> <entity> <ejb-name>StockEjb</ejb-name> <home>beans_2x.StockHome</home> <remote>beans_2x.Stock</remote> <ejb-class>beans_2x.StockBean</ejb-class> <persistence-type>Bean</persistence-type> <prim-key-class>java.lang.String</prim-key-class> <reentrant>false</reentrant> <resource-ref> <res-ref-name>jdbc/StockDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> <security-identity> <use-caller-identity/> </security-identity> </entity> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>StockEjb</ejb-name> <method-intf>Remote</method-intf> <method-name>setName</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </method> <trans-attribute>Required</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>StockEjb</ejb-name> <method-intf>Remote</method-intf> <method-name>getName</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>StockEjb</ejb-name> <method-intf>Remote</method-intf> <method-name>remove</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>StockEjb</ejb-name> <method-intf>Remote</method-intf> <method-name>getTickerSymbol</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
Jboss.xml:
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/javaee/dtd/jboss_4_0.dtd"> <jboss> <enterprise-beans> <entity> <ejb-name>StockEjb</ejb-name> <jndi-name>beans_2x.Stock</jndi-name> <resource-ref> <res-ref-name>jdbc/StockDB</res-ref-name> <jndi-name>java:/DefaultDS</jndi-name> </resource-ref> </entity> </enterprise-beans> </jboss>
StockList.java interface:
package beans;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.Remote;
@Remote
public interface StockList {
// The public business methods on the StockList bean
public String getStock(String ticker)
throws FinderException;
public void addStock(String ticker, String name)
throws CreateException;
public void updateStock(String ticker, String name)
throws FinderException;
public void deleteStock(String ticker)
throws FinderException;
}
StockListBean:
package beans;
import beans_2x.Stock;
import beans_2x.StockHome;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
@Stateless
public class StockListBean implements StockList {
// The public business methods. These must be coded in the
// interface also
public String getStock(String ticker)
throws FinderException {
try {
StockHome stockHome = getStockHome();
Stock stock = stockHome.findByPrimaryKey(ticker);
return stock.getName();
} catch (FinderException fe) {
throw fe;
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
public void addStock(String ticker, String name)
throws CreateException {
try {
StockHome stockHome = getStockHome();
Stock stock = stockHome.create(ticker, name);
} catch (CreateException ce) {
throw ce;
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
public void updateStock(String ticker, String name)
throws FinderException {
try {
StockHome stockHome = getStockHome();
Stock stock = stockHome.findByPrimaryKey(ticker);
stock.setName(name);
} catch (FinderException fe) {
throw fe;
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
public void deleteStock(String ticker)
throws FinderException {
try {
StockHome stockHome = getStockHome();
Stock stock = stockHome.findByPrimaryKey(ticker);
stock.remove();
} catch (FinderException fe) {
throw fe;
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
private StockHome getStockHome()
throws NamingException {
// Get the initial context
InitialContext initial = new InitialContext();
// Get the object reference
Object objref = initial.lookup("beans_2x.Stock");
StockHome home = (StockHome)
PortableRemoteObject.narrow(objref, StockHome.class);
return home;
}
// Standard ejb methods
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void ejbCreate() {}
public void setSessionContext(SessionContext context) {}
}
Stock interface:
package beans_2x;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface Stock extends EJBObject {
// The public business methods on the Stock bean
// These include the accessor methods from the bean
// Get the ticker. Do not allow ticker to be set through the
// interface because it is the primary key.
public String getTickerSymbol() throws RemoteException;
// Get and set the name
public String getName() throws RemoteException;
public void setName(String name) throws RemoteException;
}
StockBean:
package beans_2x;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.FinderException;
import javax.ejb.NoSuchEntityException;
import javax.ejb.ObjectNotFoundException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class StockBean implements EntityBean {
// The persistent fields
private String tickerSymbol;
private String name;
// Keeps the reference to the context;
private EntityContext context;
// Keeps the reference to the db connection
private Connection connection;
// The access methods for persistent fields
public String getTickerSymbol() {
return tickerSymbol;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Standard entity bean methods
public String ejbFindByPrimaryKey(String primaryKey)
throws FinderException {
boolean result;
try {
String stmt =
"select tickerSymbol " +
"from stock where tickerSymbol= ? ";
PreparedStatement pstmt =
connection.prepareStatement(stmt);
pstmt.setString(1, primaryKey);
ResultSet rs = pstmt.executeQuery();
result = rs.next();
pstmt.close();
} catch (SQLException ex) {
throw new EJBException("ejbFindByPrimaryKey: " + ex.getMessage());
}
if (result) {
return primaryKey;
} else {
throw new ObjectNotFoundException ("Ticker " + primaryKey + " not found.");
}
}
public String ejbCreate(String tickerSymbol, String name)
throws CreateException {
try {
String findstmt =
"select tickerSymbol " +
"from stock where tickerSymbol= ? ";
PreparedStatement pfindstmt =
connection.prepareStatement(findstmt);
pfindstmt.setString(1, tickerSymbol);
ResultSet rs = pfindstmt.executeQuery();
boolean findResult = rs.next();
if (findResult) {
throw new CreateException("Ticker " + tickerSymbol + "already exists!");
}
String stmt =
"insert into stock values ( ? , ? )";
PreparedStatement pstmt =
connection.prepareStatement(stmt);
pstmt.setString(1, tickerSymbol);
pstmt.setString(2, name);
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException ex) {
throw new EJBException("ejbCreate: " + ex.getMessage());
}
this.tickerSymbol = tickerSymbol;
this.name = name;
return tickerSymbol;
}
public void ejbPostCreate(String tickerSymbol, String name)
throws CreateException {}
public void ejbRemove() {
try {
String stmt =
"delete from stock where tickerSymbol = ? ";
PreparedStatement pstmt =
connection.prepareStatement(stmt);
pstmt.setString(1, tickerSymbol);
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException ex) {
throw new EJBException("ejbRemove: " + ex.getMessage());
}
}
public void ejbLoad() {
try {
String stmt =
"select name from where tickerSymbol = ? ";
PreparedStatement pstmt =
connection.prepareStatement(stmt);
pstmt.setString(1, tickerSymbol);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
this.name = rs.getString(1);
pstmt.close();
} else {
pstmt.close();
throw new NoSuchEntityException("Ticker: " + tickerSymbol + " not in database.");
}
} catch (SQLException ex) {
throw new EJBException("ejbCreate: " + ex.getMessage());
}
}
public void ejbStore() {
try {
String stmt =
"update stock set name = ? " +
"where tickerSymbol =?";
PreparedStatement pstmt =
connection.prepareStatement(stmt);
pstmt.setString(1, name);
pstmt.setString(2, tickerSymbol);
int rowCount = pstmt.executeUpdate();
pstmt.close();
if (rowCount == 0) {
throw new EJBException("Store for " +
tickerSymbol + " failed.");
}
} catch (SQLException ex) {
throw new EJBException("ejbStore: " + ex.getMessage());
}
}
public void ejbPassivate() {}
public void ejbActivate() {}
public void setEntityContext(EntityContext ctx) {
context = ctx;
try {
getDatabaseConnection();
} catch (Exception ex) {
throw new EJBException("Unable to connect to database. " + ex.getMessage());
}
}
public void unsetEntityContext() {
context = null;
try {
connection.close();
} catch (SQLException ex) {
throw new EJBException("UnsetEntityContext: " + ex.getMessage());
}
}
private void getDatabaseConnection()
throws NamingException, SQLException {
InitialContext ctx = new InitialContext();
DataSource ds =
(DataSource) ctx.lookup("java:comp/env/jdbc/StockDB");
connection = ds.getConnection();
}
}
StockHome:
package beans_2x;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import javax.ejb.FinderException;
public interface StockHome extends EJBHome {
// The create method for the Stock bean
public Stock create(String ticker, String name)
throws CreateException, RemoteException;
// The find by primary key method for the Stock bean
public Stock findByPrimaryKey(String ticker)
throws FinderException, RemoteException;
}
StockClient:
package client;
import beans.StockList;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.naming.InitialContext;
// General imports
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class StockClient extends JFrame
implements ActionListener {
private StockList _stockList;
private JTextField _ticker = new JTextField();
private JTextField _name = new JTextField();
private JButton _get = new JButton("Get");
private JButton _add = new JButton("Add");
private JButton _update = new JButton("Update");
private JButton _delete = new JButton("Delete");
public StockClient() {
// Get the stock lister
_stockList = getStockList();
// Add the title
JLabel title = new JLabel("Stock List");
title.setHorizontalAlignment(JLabel.CENTER);
getContentPane().add(title, BorderLayout.NORTH);
// Add the stock label panel
JPanel stockLabelPanel = new JPanel(new GridLayout(2, 1));
stockLabelPanel.add(new JLabel("Symbol"));
stockLabelPanel.add(new JLabel("Name"));
getContentPane().add(stockLabelPanel, BorderLayout.WEST);
// Add the stock field panel
JPanel stockFieldPanel = new JPanel(new GridLayout(2, 1));
stockFieldPanel.add(_ticker);
stockFieldPanel.add(_name);
getContentPane().add(stockFieldPanel, BorderLayout.CENTER);
// Add the buttons
JPanel buttonPanel = new JPanel(new GridLayout(1, 4));
_get.addActionListener(this);
buttonPanel.add(_get);
_add.addActionListener(this);
buttonPanel.add(_add);
_update.addActionListener(this);
buttonPanel.add(_update);
_delete.addActionListener(this);
buttonPanel.add(_delete);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setSize(330, 130);
setVisible(true);
}
private StockList getStockList() {
StockList stockList = null;
try {
// Get a naming context
InitialContext ctx = new InitialContext();
// Get a StockList object
stockList
= (StockList) ctx.lookup("StockListBean/remote");
// = (StockList) ctx.lookup(StockList.class.getName());
} catch(Exception e) {
e.printStackTrace();
}
return stockList;
}
public void actionPerformed(ActionEvent ae) {
// If get was clicked, get the stock
if (ae.getSource() == _get) {
getStock();
}
// If add was clicked, add the stock
if (ae.getSource() == _add) {
addStock();
}
// If update was clicked, update the stock
if (ae.getSource() == _update) {
updateStock();
}
// If delete was clicked, delete the stock
if (ae.getSource() == _delete) {
deleteStock();
}
}
private void getStock() {
// Get the ticker
String ticker = _ticker.getText();
if (ticker == null || ticker.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Ticker is required");
return;
}
// Get the stock
try {
String name = _stockList.getStock(ticker.trim());
_name.setText(name);
} catch (FinderException fe) {
JOptionPane.showMessageDialog(this, "Not found!");
} catch(Exception e) {
e.printStackTrace();
}
}
private void addStock() {
// Get the ticker
String ticker = _ticker.getText();
if (ticker == null || ticker.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Ticker is required");
return;
}
// Get the name
String name = _name.getText();
if (name == null || name.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Name is required");
return;
}
// Add the stock
try {
_stockList.addStock(ticker.trim(), name.trim());
JOptionPane.showMessageDialog(this, "Stock added!");
} catch (CreateException ce) {
JOptionPane.showMessageDialog(this, "Already exists!");
} catch(Exception e) {
e.printStackTrace();
}
}
private void updateStock() {
// Get the ticker
String ticker = _ticker.getText();
if (ticker == null || ticker.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Ticker is required");
return;
}
// Get the name
String name = _name.getText();
if (name == null || name.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Name is required");
return;
}
// Update the stock
try {
_stockList.updateStock(ticker.trim(), name.trim());
JOptionPane.showMessageDialog(this, "Stock updated!");
} catch (FinderException fe) {
JOptionPane.showMessageDialog(this, "Not found!");
} catch(Exception e) {
e.printStackTrace();
}
}
private void deleteStock() {
// Get the ticker
String ticker = _ticker.getText();
if (ticker == null || ticker.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Ticker is required");
return;
}
// Delete the stock
try {
_stockList.deleteStock(ticker.trim());
JOptionPane.showMessageDialog(this, "Stock deleted!");
} catch (FinderException fe) {
JOptionPane.showMessageDialog(this, "Not found!");
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
StockClient stockClient = new StockClient();
}
}
Error log:
javax.ejb.EJBException: java.lang.RuntimeException: beans_2x.Stock not bound at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:304) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106) at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:769) at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373) at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166) Caused by: java.lang.RuntimeException: beans_2x.Stock not bound at beans.StockListBean.addStock(StockListBean.java:41) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:304) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106) at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:769) at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373) at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166) at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:163) at org.jboss.remoting.Client.invoke(Client.java:1634) at org.jboss.remoting.Client.invoke(Client.java:548) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107) at $Proxy0.addStock(Unknown Source) at client.StockClient.addStock(StockClient.java:139) at client.StockClient.actionPerformed(StockClient.java:89) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107) at $Proxy0.addStock(Unknown Source) at client.StockClient.addStock(StockClient.java:139) at client.StockClient.actionPerformed(StockClient.java:89) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)