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)
 
    