Add rows and sort JTable in the same program

I would like to have a button to add rows to the JTable, but would also like to sort the data within the columns. This program can sort the data prior to clicking the 'add row' button. After I click the button, there is no new row, and I lose the ability to sort the column. Do you have any tips or advice as to what I can do to fix my program? Is it because I have to have the final code for SortFilterModel to work?
Thanks
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableRowColumn extends JFrame
     private final static String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     JTable table;
     DefaultTableModel model;
     JPanel buttonPanel;
     JButton button;
     public TableRowColumn()
          Object[][] data = {
                    {"6", "K"},
                    {"5", "A"},
                    {"1", "Z"}
          String[] columnNames = {
                "Number",
                "Letter"
          model = new DefaultTableModel(data, columnNames);
                //comment out this SortFilterModel line
                final SortFilterModel sorter = new SortFilterModel(model);
                //Change sorter to model
          table = new JTable(sorter);
          table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
          //  Add table and a Button panel to the frame
          JScrollPane scrollPane = new JScrollPane( table );
          getContentPane().add( scrollPane );
          buttonPanel = new JPanel();
          getContentPane().add( buttonPanel, BorderLayout.SOUTH );
          button = new JButton( "Add Row" );
          buttonPanel.add( button );
          button.addActionListener( new ActionListener()
               public void actionPerformed(ActionEvent e)
                    model.addRow( createRow() );
                    int row = table.getRowCount() - 1;
                    table.changeSelection(row, row, false, false);
                    table.requestFocusInWindow();
             //Set up double click handler for column headers and sort
             table.getTableHeader().addMouseListener(new MouseAdapter(){
                    public void mouseClicked(MouseEvent event)
                      //check for click
                      if (event.getClickCount() < 2) return;
                   //find column of click and
                   int tableColumn = table.columnAtPoint(event.getPoint());
                   //translate to table model index and sort
                   int modelColumn = table.convertColumnIndexToModel(tableColumn);
                   sorter.sort(modelColumn);
     private Object[] createRow()
          Object[] newRow = new Object[2];
          int row = table.getRowCount() + 1;
          newRow[0] = Integer.toString( row );
          newRow[1] = LETTERS.substring(row-1, row);
          return newRow;
     public static void main(String[] args)
          TableRowColumn frame = new TableRowColumn();
          frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
          frame.pack();
          frame.setVisible(true);
}

I attempted to modify the code in the correct way, but I ran into a problem near the bottom with the model.addRow(rowData); line. It has an error saying it can't find the addRow method. If I take away the model part, it will compile, but it will cause an infinite loop when I push the 'Add Row' button within the program. I didn't expect that to work, and I think it isn't calling the right model.
I am aware that my code organization and design skills are not very good. I am a fan of basic assembly and low-level hardware languages for the most part.
Thanks for your advice so far, it has been helpful.
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableRowColumn extends JFrame
     private final static String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     JTable table;
     public DefaultTableModel model;
     JPanel buttonPanel;
     JButton button;
     public TableRowColumn()
          Object[][] data = {
                    {"9", "C"},
                    {"5", "A"},
                    {"3", "B"}
          String[] columnNames = {
                "Number",
                "Letter"
          model = new DefaultTableModel(data, columnNames);
                //comment out this SortFilterModel line
                final SortFilterModel sorter = new SortFilterModel(model);
                //Change sorter to model
          table = new JTable(sorter);
          table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
          //  Add table and a Button panel to the frame
          JScrollPane scrollPane = new JScrollPane( table );
          getContentPane().add( scrollPane );
          buttonPanel = new JPanel();
          getContentPane().add( buttonPanel, BorderLayout.SOUTH );
          button = new JButton( "Add Row" );
          buttonPanel.add( button );
          button.addActionListener( new ActionListener()
               public void actionPerformed(ActionEvent e)
                    sorter.addRow( createRow() );
                    int row = table.getRowCount() - 1;
                    table.changeSelection(row, row, false, false);
                    table.requestFocusInWindow();
             //Set up double click handler for column headers and sort
             table.getTableHeader().addMouseListener(new MouseAdapter(){
                    public void mouseClicked(MouseEvent event)
                      //check for click
                      if (event.getClickCount() < 2) return;
                   //find column of click and
                   int tableColumn = table.columnAtPoint(event.getPoint());
                   //translate to table model index and sort
                   int modelColumn = table.convertColumnIndexToModel(tableColumn);
                   sorter.sort(modelColumn);
     private Object[] createRow()
          Object[] newRow = new Object[2];
          int row = table.getRowCount() + 1;
          newRow[0] = Integer.toString( row );
          newRow[1] = LETTERS.substring(row-1, row);
          return newRow;
     public static void main(String[] args)
          TableRowColumn frame = new TableRowColumn();
          frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
          frame.pack();
          frame.setVisible(true);
class SortFilterModel extends AbstractTableModel{
    public SortFilterModel(TableModel m){
        model = m;
        rows = new Row[model.getRowCount()];
        for (int i = 0; i < rows.length; i++) {
            rows[i] = new Row();
            rows.index = i;
public void sort(int c){
sortColumn = c;
Arrays.sort(rows);
fireTableDataChanged();
public Object getValueAt(int r, int c) {
return model.getValueAt(rows[r].index, c);
public boolean isCellEditable(int r, int c){
return model.isCellEditable(rows[r].index, c);
public void setValueAt(Object aValue, int r, int c){
model.setValueAt(aValue, rows[r].index, c);
public int getRowCount() {
return model.getRowCount();
public int getColumnCount(){
return model.getColumnCount();
public String getColumnName(int c) {
return model.getColumnName(c);
public Class getColumnClass(int c){
return model.getColumnClass(c);
private class Row implements Comparable {
public int index;
public int compareTo(Object other) {
Row otherRow = (Row)other;
Object a = model.getValueAt(index, sortColumn);
Object b = model.getValueAt(otherRow.index, sortColumn);
if (a instanceof Comparable) {
return ((Comparable)a).compareTo(b);
else{
return a.toString().compareTo(b.toString());
public void addRow(Object[] rowData) {
Row[] oldRows = new Row[rows.length];
for (int i=0; i<rows.length; i++) {
oldRows[i] = rows[i];
rows = new Row[rows.length +1];
for (int i=0; i < oldRows.length; i++) {
rows[i] = oldRows[i];
rows[oldRows.length] = new Row();
rows[oldRows.length].index = oldRows.length;
addRow (rowData);
//model.addRow(rowData);
fireTableDataChanged();
private TableModel model;
private int sortColumn;
private Row[] rows;

Similar Messages

  • Is Lightroom 6 and Lightroom CC exactly the same program?

    Is Lightroom 6 and Lightroom CC exactly the same program?

    terryb33389447 wrote:
    Is Lightroom 6 and Lightroom CC exactly the same program?
    Lightroom 6 does not include the Creative Cloud features or Lightroom Mobile, otherwise they are the same.
    http://www.adobe.com/uk/products/photoshop-lightroom/versions.html

  • Why does Adobe Manager download and install 2 of the same programs?

    Am I suppose to get more than one icon for each app? I have a (64bit) and it appears a 32bit both install when I download with Adobe Manager.
    I have a fresh install of windows 8. -- probably the issue -- an upgrade from win7. I completely uninstalled all apps, did a fresh install of my upgrade, and kept no files, or settings. It however, did keep somethings with the new window.
    Looking in my program list, I have the same program listed in (program files), and in ((86program files)), there is the 64bit program.
    It seriously looks like I am downloading and insalling two seperate versions.... why?
    I do have another desktop computer, which is older, and running window xp, and it is a 32bit system.
    The main cpu I am using is a Dell.... (maybe that's the problem) laptop, Inspiron 1545
    help.

    For which application are you seeing two versions?
    Photoshop installs both 32 and 64 bit versions on a 64-bit system when installing from the Adobe Application Manager using the Creative Cloud subscription.

  • Cant add files and use itunes at the same time?

    I am totally confused as to why Itunes is Frozen when im adding files. I usually manually add my music to itunes myself. I figured why not take advantage and just have it do it for me. Now i cant play or pause the music as its doing this. The main problem is that the folder of music that i added, has all my itunes files on that drive in that folder. Is it going to add everything i have twice now? its telling me new versions of apps are available. I have 600+ apps. Im starting to realise that there is no work around for this. perhaps this belongs in a suggestion thread. sorry for ranting. delete this post its looking like i have to force itunes closed and ruin everything that i have organised so i dont have to tell itunes 600 times that i dont want to find the new version of an app. I've already been fooled into recrediting all my downloads because Everyone wanted to play stupid on the phone. GOD HELP ME!

    Say i finish clicing x 600 times. Is there a way to stop the music after it resumes searching my 111 gb of music. i dont want to play the same cd the whole time.

  • Call transaction , and session  method in the same program

    hi experts,
                Can anybody tell me in which cases we will use both call transaction and session methods in same program
    if possible send me example code.
    Regards
    Trinadh

    Hi Dengyong Zhang,
    we can use the call transation and session method in same program.
    However for better performance it's benificial to use call trasaction method of BDC. but if u want to upload very large amount of data then Session method is more preferable to use.
    Session method is one of the method of BDC.
    U can also use BAPI to upload the data in SAP but it's a different concept than BDC. Performance wise BAPI is more advantageous than BDC.

  • Missing functionality.Draw document wizard - delete/add rows and copy/paste

    Scenario:
    My customer is using 2007 SP0 PL47 and would like the ability to change the sequence of the rows of the draw document wizard and delete/add multiple rows (i.e. when you create an AR Invoice copied from several deliveries).
    This customer requires the sequence of items on the AR invoice to be consistent with the sequence on the original sales order including text lines and subtotals. Currently we cannot achieve this when there are multiple deliveries.
    Steps to reproduce scenario:
    1.Create a Sales order with several items and use text lines, regular and subtotals.
    2.Create more than one delivery based on the sales order and deliver in a different sequence than appears on the sales order.
    3.Open an AR Invoice and u2018Copy fromu2019 > Deliveries. Choose multiple deliveries. Choose u2018Customizeu2019.
    4.Look at the sequence of items on the Invoice. How can the items and subtotals and headings be moved around so they appear in the same sequence as on the sales order?
    Current Behaviour:
    In SAP B1 itu2019s not possible to delete or add more than one row at a time on the AR Invoice or Draw Document Wizard.
    Itu2019s not possible to copy/paste a row on the AR Invoice or Draw Document Wizard.
    Itu2019s not possible to change the sequence of the rows using the Draw Document Wizard.
    Business Impact: This customer is currently spending a lot of time trying to organize the AR invoice into a presentable format. They have to go through the invoice and delete the inapplicable rows one by one (because SAP B1 does not have the ability to delete multiple lines at a time) and also has to manually delete re-add rows to make it follow the same sequence as the sales order.
    Proposals:
    Enable users to delete or add more than one row at a time on the AR Invoice or Draw Document Wizard.
    Enable users to copy/paste rows on the AR Invoice or Draw Document Wizard.

    Hi Rahul,
    You said 'It is not at all concerned with Exchange rate during GRPO...' If that is the case how does the Use Row Exchange Rate from Base Document in the draw document wizard work? Does this mean 1 GRPO : 1 AP Invoice so I can use the base document rate?
    How should I go about with transactions like these? That is adding an AP Invoice from multiple GRPO's having different exchange rates. What I am trying to capture here is that in the AP Invoice, base document rates should be used in the row item level and not the current rate when adding the invoice.  
    Thanks,
    Michelle

  • I need to know how to edit a drawing - basically remove the arrows and text but at the same time match the background of the existing pic. then re add new text. how do i erase the arrows and text and arrows but match current background of pic. step by ste

    i need to know how to edit a drawing - basically remove the arrows and text but at the same time match the background of the existing pic. then re add new text. how do i erase the arrows and text and arrows but match current background of pic. step by step explanation please beginner

    Please post (a relevant section of) it right on this Forum.

  • After installing FF 5.0 I am receiving a list of incompatible Add-Ons. I go into 'Extensions' and click to remove them, exit FF and lauch FF again, the same incompatible add-ons list appears. Is there a way to permanently remove the old Add-ons?

    After installing FF 5.0 I am receiving a list of incompatible Add-Ons. I go into 'Extensions' and click to remove them, exit FF and lauch FF again, the same incompatible add-ons list appears. Is there a way to permanently remove the old Add-ons?

    Thanks but I don't think this will help. Like I said, all of my add-ons were working fine and compatible until after running a previous version of FF. I am sure they are still compatible, but they are not working at all.
    I even checked my profile folder and all of the extensions' data is all still there but FF5 is just not reading it correctly. (like adblock plus... I see the folder for it but FF5 doesn't have it on the add-on manager page when I run FF5)

  • Having trouble with touch screen. Freezes, texting adds more letters, screen locks up. Got new phone, synced new phone and now it does the same thing??

    Having trouble with touch screen. Freezes, texting adds more letters, screen locks up. Got new phone, synced new phone and now it does the same thing??

    I also tried the Hard Restart and still has the problem?

  • Can i add two country holiday on my iCal and see them at the same time?

    Can i add two country holiday on my iCal and see them at the same time? HOW?

    Just subscribe to the appropriate calendars: you can subscribe to as many as you like.
    http://www.apple.com/downloads/macosx/calendars/

  • Firefox plays video, but no sound. when I type about:plugins in location bar, it shows the firefox default plugin is not enabled. When I look at my plugins, it says it is enabled. I have uninstalled 3.6 and re-installed with the same result.

    firefox plays video, but no sound. when I type about:plugins in location bar, it shows the firefox default plugin is not enabled. When I look at my plugins, it says it is enabled. I have uninstalled 3.6 and re-installed with the same result. Why do I have no sound. Computer plays I-tunes and all other sounds, just no web browser sounds.

    Glad you seem to have sorted things out.
    The warning about the warranty is light hearted, I think at one stage it warned "here be dragons" but also intended to make us think as it warns that making changes may produce problems.

  • Can I run Release Candidate (19.02), Beta, Nightly, Aurora and ESR versions on the same computer?

    I know I can run the Beta and Nightly together on the same computer because they are installed in different directories. What I do then is that I have a Profile for each version. What I do is I run FireFox.exe -ProfileManager when I start either the Beta and Nightly builds.
    My Question is can I also install the Aurora, Release Candidate and ESR versions on the same computer like I do with the Beta and Nightly? If so, how do I go about installing them in different directories? I will create new profiles for each version. What I then do is, copy everything in my original Profile to the newly create profiles so I can keep all my plugin/addons, themes, bookmarks, etc. the same.
    Next question, (I think I know the answer but I just want to make sure) now can I sync my bookmarks from each of the different profiles that I created?
    Secondly, I now I can do the ABOUT:CONFIG in the address bar of Firefox, does anyone have any idea where I can read up on what each entry means? Also, are there any other secrets in Firefox, similar to the ABOUT:CONFIG trick? I know of one app where you can do ABOUT:ME, but that's all I know.
    I know this has been asked billions of times, but I also have to ask. Is there any chance at all that Firefox, Thunderbird, and/or Seamonkey will be ever release for the iOS from Apple? I know that it's impossible, but maybe someone MIGHT have some positive thoughts on this?
    Lastly, I know this is off topic, but I'll give it a shot. I'm using Outlook 2013, does anyone know if Outlook can handle Newsgroups? The reason why I ask is because I've just learned that there are a ton of newsgroups for Firefox, ThunderBird, and SeaMonkey. I would like to, somehow, get those Newsgroups in Outlook 2013. I already get allot of the feeds for other things, so that's not a problem.
    I would appreciate it very much if anyone could help me with these issues.
    Thank You.

    You can consider to use Firefox Sync to sync all the profiles.
    You can do a custom install of each version and install each version in its own program folder.<br />
    Safest is to modify the desktop shortcut and add -P "profile name" to the command line to start each version with its own profile.<br />
    Be careful with clicking a file in Windows Explorer to open the default browser, so make sure to select the correct profile in the profile manager and check the don't ask setting.
    * http://kb.mozillazine.org/Shortcut_to_a_specific_profile
    * http://kb.mozillazine.org/Using_multiple_profiles_-_Firefox
    * http://kb.mozillazine.org/Bypassing_the_Profile_Manager
    * http://kb.mozillazine.org/Opening_a_new_instance_of_Firefox_with_another_profile

  • How do I create a 1d array that takes a single calculation and insert the result into the first row and then the next calculation the next time the loop passes that point and puts the results in thsecond row and so on until the loop is exited.

    The attached file is work inprogress, with some dummy data sp that I can test it out without having to connect to equipment.
    The second tab is the one that I am having the problem with. the output array from the replace element appears to be starting at the index position of 1 rather than 0 but that is ok it is still show that the new data is placed in incrementing element locations. However the main array that I am trying to build that is suppose to take each new calculation and place it in the next index(row) does not ap
    pear to be working or at least I am not getting any indication on the inidcator.
    Basically what I am attempting to do is is gather some pulses from adevice for a minute, place the results for a calculation, so that it displays then do the same again the next minute, but put these result in the next row and so on until the specifiied time has expired and the loop exits. I need to have all results displayed and keep building the array(display until, the end of the test)Eventually I will have to include a min max section that displays the min and max values calculated, but that should be easy with the min max function.Actually I thought this should have been easy but, I gues I can not see the forest through the trees. Can any one help to slear this up for me.
    Attachments:
    regulation_tester_7_loops.vi ‏244 KB

    I didn't really have time to dig in and understand your program in depth,
    but I have a few tips for you that might things a bit easier:
    - You use local variables excessively which really complicates things. Try
    not to use them and it will make your life easier.
    - If you flowchart the design (very similar to a dataflow diagram, keep in
    mind!) you want to gather data, calculate a value from that data, store the
    calculation in an array, and loop while the time is in a certain range. So
    theres really not much need for a sequence as long as you get rid of the
    local variables (sequences also complicate things)
    - You loop again if timepassed+1 is still less than some constant. Rather
    than messing with locals it seems so much easier to use a shiftregister (if
    absolutely necessary) or in this case base it upon the number of iterations
    of the loop. In this case it looks like "time passed" is the same thing as
    the number of loop iterations, but I didn't check closely. There's an i
    terminal in your whileloop to read for the number of iterations.
    - After having simplified your design by eliminating unnecessary sequence
    and local variables, you should be able to draw out the labview diagram.
    Don't try to use the "insert into array" vis since theres no need. Each
    iteration of your loop calculates a number which goes into the next position
    of the array right? Pass your result outside the loop, and enable indexing
    on the terminal so Labview automatically generates the array for you. If
    your calculation is a function of previous data, then use a shift register
    to keep previous values around.
    I wish you luck. Post again if you have any questions. Without a more
    detailed understanding of your task at hand it's kind of hard to post actual
    code suggestions for you.
    -joey
    "nelsons" wrote in message
    news:[email protected]...
    > how do I create a 1d array that takes a single calculation and insert
    > the result into the first row and then the next calculation the next
    > time the loop passes that point and puts the results in thsecond row
    > and so on until the loop is exited.
    >
    > The attached file is work inprogress, with some dummy data sp that I
    > can test it out without having to connect to equipment.
    > The second tab is the one that I am having the problem with. the
    > output array from the replace element appears to be starting at the
    > index position of 1 rather than 0 but that is ok it is still show that
    > the new data is placed in incrementing element locations. However the
    > main array that I am trying to build that is suppose to take each new
    > calculation and place it in the next index(row) does not appear to be
    > working or at least I am not getting any indication on the inidcator.
    >
    > Basically what I am attempting to do is is gather some pulses from
    > adevice for a minute, place the results for a calculation, so that it
    > displays then do the same again the next minute, but put these result
    > in the next row and so on until the specifiied time has expired and
    > the loop exits. I need to have all results displayed and keep building
    > the array(display until, the end of the test)Eventually I will have to
    > include a min max section that displays the min and max values
    > calculated, but that should be easy with the min max function.Actually
    > I thought this should have been easy but, I gues I can not see the
    > forest through the trees. Can any one help to slear this up for me.

  • Different LOVs in af:query and af:form for the same VO attribute

    Hi,
    We need to display different LOVs in af:query and af:form for the same attribute in VO.
    Is it possible to use LOV Switcher for this ?
    What condition can we use in LOV Switcher attribute to check if it is View Critearia row or VO row ?

    We have a VO attribute "User" which needs to be displayed as LOV in a Search Panel ( af:query component created using View Critearia ) and in a af:form.
    When this VO attribute is displayed in search panel, in LOV, we need to show all users.
    When this VO attribute "User" is displayed in a form for editing, in LOV, we need to show only active users.
    For this, we created two LOVs "ActiveUsersLOV" ( which shows only active users ) and "AllUsersLOV" ( which shows all users ) on VO attribute "User".
    LOVSwitcher attribute should return "ActiveUsersLOV" if the LOV is displayed in form and "AllUsersLOV" if the LOV is displayed in search panel.

  • How can I connect to Oracle and SQL server at the same time?

    I have been trying to find a way to connect to Oracle Database through the developer 2000 and SQL server at the same time. I need to return some data from Oracle Database and some from the Sql Server Database. And update both through SQL. I find there is such a thing as the Oracle Transparent Gateway for SQL server. I can't find it on any of my CD's or through OTN downloadable files. If anyone can point me where to get this. Or tell of another way this can be accomplished I would appreciate it. TIA.
    [email protected]

    I have been trying to find a way to connect to Oracle Database through the developer 2000 and SQL server at the same time. I need to return some data from Oracle Database and some from the Sql Server Database. And update both through SQL. I find there is such a thing as the Oracle Transparent Gateway for SQL server. I can't find it on any of my CD's or through OTN downloadable files. If anyone can point me where to get this. Or tell of another way this can be accomplished I would appreciate it. TIA.
    [email protected]
    As far as I know you have 3 options depending on your specifications. I don't think option #3 will work if you need to actually join a
    SQL Server table to an Oracle table.
    1. Oracle Transparent Gateway. I haven't used the Oracle Transparent Gateway but my understanding is that Oracle gateways are
    separate purchased products from Oracle. I've never seen any free/development versions of it anywhere. You'll need to contact
    your Oracle sales rep about it.
    2. Heterogeneous Connectivity. There's something called Heterogeneous Connectivity that could work for you - depends on what
    version of Oracle you're on and what OS. You basically set up an ODBC data source on the Oracle server and modify the listener.ora
    and tnsnames.ora files. You can then create a database link to SQL Server just like you would to any other Oracle database. You can
    check your Oracle documentation for how this works. There's also some very good documents on Metalink that tell you how to do this
    as well as a Heterogeneous Connectivity forum on this site.
    3. Use the exec_sql package available in Developer 2000. This allows you to open and execute cursors to remote databases within
    Developer. We have an account validation process that uses this - when a person enters an account number in a form while logged
    into Oracle it validates the account is valid in our main accounting DB2 database. We also pull HR information from DB2 into Oracle
    this way. If you're using Forms 6i exec_sql is a built-in command, in Forms 5.0 and 5.5 you have to add it as an attached library to
    the form. I think you also need the OCA options installed from the Developer software to have access to the library in Forms 5.0 and
    5.5. The library will be in the $ORACLE_HOME\oca20\plsqllib directory for these versions. The Developer documentation should have
    additional information.
    HTH

Maybe you are looking for

  • Problem in GUI status of ALV Grid

    Hello All Experts, I have a following issue. Am displaying a report using   REUSE_ALV_GRID_DISPLAY. I have copied the GUI status from standard GUI   STANDARD_FULLSCREEN. Now when i dispaly the report i get  select all ICON just before my first column

  • Swap text as well as image with behaviours

    Hi a.., I am trying to create an interactive section of my site where a visitor can click on a small thumbnail and get a larger image to appear in a larger div (I can get this to work fine with the behaviour "swap image" so there are no problems ther

  • Where can I get user mapping info?

    Dear all, I have to implement a simple audit report that displays the mapping of an EP user name and the related SAP user name that he/she use during certain time. Where can I get that kind of information? Please help. Rgds, Adhimas

  • Running Business Rules with Decision Service using WebDav

    Hello everybody, I have a problem when I change a rule from Rules Author. I have the following scenario: Machine1 - I have Oracle Soa Suite 10 and I have defined a rule set using Rules Author pointing to a WebDav repository on Machine2 Machine2 - I h

  • Servicegen for stateless session EJB

    I've run into some minor trouble when I tried to generate web services for some stateless session EJBs with the servicegen Ant method. Note that expandMethods has been set to True. It appears that the generated web-services.xml file contains methods