Coding Practice for Bound Property Names

I think this simply an issue over coding practices, but if I am right then all the tutorials and documentation on how to write Beans are promoting poor coding practices. Speicifcally, it bugs me that String literals are always used in all the code I see. As in the following code:
class MyBean  {
   public void setValue(value newValue) {
      beansupport.firePropertyChange("value", oldValue,  value);
}the practice that I have starting using is:
class MyBean  {
    public static final String propertyValue = "value";
   public void setValue(value newValue) {
      beansupport.firePropertyChange(propertyValue, oldValue,  value);
}This way, a PropertyChangeListener can refererence MyBean.propertyValue instead of using the literal "value" -- eliminating the chance for error and also there don't have to be multiple literals floating around using up space. Is there any reason this isn't commonly accepted practice or did I miss something?

Strings appearing in source code can be reduced to a constant, like an enum. So it is likely that the code with strings is actually faster, as the value is known before compilation. It is easier to read. Keep in mind that strings get interned every now and then and thus get reduced to this equivalency:
public method blah( "value", some stuff )...
public method nah(*){ do stuff; let x = "value"; more stuff with "zoiks!" }
ends up like
key k1 = "value"
key k2 = "zoiks!"
what the jvm sees;
public method blah( key1, some stuff )...
public method nah(*){ do stuff; let x = key1; more stuff with key2 }
The string values get "inlined" and can be checked during compilation, allowing for many optimisations not otherwise possible.
Hope that helps a little.
Andrew

Similar Messages

  • Forms Personalization -document for different 'Property Name' on Action tab

    Hi,
    I am trying to find document which contains meaning of different 'Property Name' in Action tab, while in form personalization screen. I had searched for document but no luck.
    Please let me know the link for such document.
    Thanks,
    Atul

    Hi Sandeep,
    I am looking for default value only but INITIAL_VALUE does not work in EBS. Here property name VALUE is working for default value. Hence, the confusion for usage of INITIAL_VALUE in EBS.
    Although I know INITIAL_VALUE works on Oracle Forms but same does not apply in EBS forms personalization.
    Regards,
    Atul

  • Why the "Basic" crawled properties appear more than once for each property name?

    When i map a managed property and want to select for example "Basic:9" - i see 2 lines of "Basic:9".
    why is that so? are there more than one "Basic:9" property?
    keren tsur

    Hi keren,
    The properties have different types, Basic:9 which has mapped to Path is Text type, the other one is Yes/No type. You could refer to:
    http://technet.microsoft.com/en-in/library/hh134087(v=office.14).aspx
    If you would like to know about Crawled property data types, please refer to:
    http://blogs.technet.com/b/speschka/archive/2010/08/21/finding-which-crawled-property-data-types-match-a-managed-property-data-type-in-sharepoint-2010.aspx
    Regards,
    Rebecca Tu
    TechNet Community Support

  • Good coding practice for object init

    We have a code that requires initializing instance of the object for each item in the loop. I have following option in mind. Please advice which one is the best option. TIA
    Option 1
    =======
    public class AThread extends Thread {
    private ObjectA var1 = null;
    private ObjectA var2 = null;
    public AThread() {
    this.var1 = new objectA();
    public void run() {
    while ( ... ) {
    if (var2 != null) {
    var2 = null;
    var2 = var1;
    var2.callmethod();
    Option 1
    =======
    public class AThread extends Thread {
    private ObjectA var1 = null;
    public AThread() {
    public void run() {
    while ( ... ) {
    var1 = new objectA();
    var1.callmethod();
    var1 = null;
    }

    1. If in the future, you post code, you can make it much more readable by enclosing it in the [code][/code] tags.
    2. Why not implement Runnable instead of extend Thread? You're not creating a new type of thread, so it is more "OO"-sensible to create a new Runnable and run it.
    3. In the first Option 1, you might as well just be doing
    while (...) {
      var1.callMethod();
    }Assigning the reference to another variable does not create a new instance of the object, so it is not worthwhile to create a new reference to it just to call its methods.
    4. In option 2, setting the object's reference to null at the end doesn't really help anything, because the object is going out of scope anyway and will be destroyed.
    Your question, really, between the two options, is as follows: should you recreate and destroy the object for every iteration through the loop, or just call the method multiple times?

  • "Message Illegal character used in property name" C4043 what is illegal?

    hi *,
    does anyone know what are legal chacters for JMS properties for SJSMQ?
    according to http://docs.sun.com/app/docs/doc/819-4469/aeqgo?a=view
    which mentions:
    C4043
    Message Illegal character used in property name - {0}
    {0} is replaced with the illegal character used.
    Cause An attempt was made to use a property name containing an illegal character. See JMS Message API Javadoc for valid property names.we are sometimes hitting this problem.
    e.g. '1' is not valid or strings with '-' but what else what else?
    i am migrating a huge application from STCMS (which allowed such property names) to SJSMQ and i would like to know exactly what is legal and not legal. does anyone know?
    regards chris

    Also ... look @ the description for what is a valid property in the JMS javadocs for Message:
    http://java.sun.com/javaee/5/docs/api/
    The key section is the fact that it must confirm to a selector identifier (covered later in the page). Here is part of an except that may help
    An identifier is an unlimited-length sequence of letters and digits, the first of which must be a letter. A letter is any character for which the method Character.isJavaLetter returns true. This includes '_' and '$'. A letter or digit is any character for which the method Character.isJavaLetterOrDigit returns true. the JMS specification ...

  • Best Coding Practices

    Hi
    are there any best coding practices for EP development?can anybody suggest the material?
    Prasad

    EP, as in Enterprise Portal?
    James

  • Best practice for property file

    I am trying one small code which uses values from property file.
    public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, java.io.IOException
          InputStream inputStream = servletContext.getResourceAsStream(/WEB-INF/test.properties);
          PrintWriter out         = response.getWriter();
           Properties prop = new Properties();
           prop.load(inputStream);
           inputStream.close();
          String nameprop = prop.getProperty("name");
          out.println(nameprop);
       }I am getting the value from property file, It's perfectly ok as far as test code is concerned. Above will open the inputStream for each thread, which is not needed so i modified it and put in inside init() method. That is also working, i believe this will give me some better performance.
    But can i extend it further? I load property file at application level and all my servlets make use of it?
    What is normal practice to read property file to get good performance? I serached forum, i found some info there but could not figure out exactly how people are doing it.
    Thanks in advance,
    regards
    Manisha

    Thanks to all posters,
    As mentioned by duffymo, I tried some code which i tested on my m/c and working fine. But just want to confirm, what i understood and wrote is correct.
    I wrote 1st servlet to get the property file and store into servlet context, 2nd servlet is just to test it.
    1st Servlet:
    package common;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    public class TestPropertyfiles_1 extends HttpServlet
    public void init(ServletConfig config) throws ServletException
       super.init(config);
       try{
            String PF_PATH = "/WEB-INF/test.properties";
            Properties prop = new Properties();
                            InputStream inputStream = config.getServletContext().getResourceAsStream(PF_PATH);
           prop.load(inputStream);
           inputStream.close();
           getServletContext().setAttribute("pf", prop);
       }catch(Exception e){}
    public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, java.io.IOException
            PrintWriter out         = response.getWriter();
            Properties tmpprop = (Properties) getServletContext().getAttribute("pf");
            String nameprop = tmpprop.getProperty("name");     
                out.println("name from property file" + nameprop);     
    }2nd servlet:
    package common;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    public class TestPropertyfiles_2 extends HttpServlet
         public void init(ServletConfig config) throws ServletException
            super.init(config);
    public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, java.io.IOException
            PrintWriter out         = response.getWriter();
            Properties tmpprop = (Properties) getServletContext().getAttribute("pf");
            String nameprop = tmpprop.getProperty("name");
                            out.println("name from property file - no 2" + nameprop);
    }This was initially giving problem if I access 2nd servlet first before accessing 1st servlet. I did some changes inside web.xml
    <servlet>
    <servlet-name>common.TestPropertyfiles_1</servlet-name>
    <servlet-class>common.TestPropertyfiles_1</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    And then all was ok.
    One thing came to my mind. I can have one common servlet just for all initialisation, this will not have any doGet/doPost.
    regards
    Manisha

  • Best practice for customizing EJB property after deployment

    Hi Gurus,
      What is the best practice for customizing EJB property after deployment in NW7.1? I have a stateless session bean and it needs to get some environment information before acting. While the information can only be known at runtime. What should I do to achieve it? I thought I can bind the property with a JNDI context but I did not find out where to declare and change the context value. Please advise. Thanks.
    B.R.

    Hi.
    I have a similar problem. But I still can not edit the properties of the ejb-jar.xml.
    I tried to stop the web service, but the properties still remain unmodifiable.
    Could you advise me how to change them?
    We have installed SAP Server 7.0.2

  • [svn] 4286: Bug: BLZ-282: added property name to debug info for Map serialization

    Revision: 4286
    Author: [email protected]
    Date: 2008-12-10 18:29:26 -0800 (Wed, 10 Dec 2008)
    Log Message:
    Bug: BLZ-282: added property name to debug info for Map serialization
    checkintests: pass
    Ticket Links:
    http://bugs.adobe.com/jira/browse/BLZ-282
    Modified Paths:
    blazeds/trunk/modules/core/src/flex/messaging/io/amf/Amf3Input.java

    Guo,
    I see a question mark in the sql statement, instead of the Oracle-style bind parameter notation which would be ":1". Can you change your VO to use Oracle-Style bind params and see whether it works?
    Steven Davelaar,
    JHeadstart Team.

  • A list of property names for PropertyChangeListener

    Hello all,
    Can anyone post a link to a list of property names? I want to use the addPropertyChangeListener(String, PropertyChangeListener) method, but I can't until I find the name for the property I desire! (The one I'm after is the background colour for a JPanel, on the offchance someone knows it.)
    Thanks,
    Muel.

    I don't know what you're after, maybe if this helps you.
    NOTE: This is not my source! Somebody posted it a while ago.import javax.swing.*;
    import java.util.*;
    public class ShowUIDefaults {
         public static void main(String[] args) {
              javax.swing.UIDefaults defaults = UIManager.getDefaults();
              String[] colName = { "Key", "Value" };
              String[][] rowData = new String[defaults.size()][2];
              int i = 0;
              System.out.println("Count Item = " + defaults.size());
              // Constructing a TreeMap directly from defaults (which
              // does supposedly implement Map) was resulting in an empty map.
              java.util.TreeMap map = new TreeMap(defaults);
              for (Enumeration enum = defaults.keys(); enum.hasMoreElements();) {
                   String key = (String) enum.nextElement();
                   map.put(key, defaults.get(key));
              // I use a TreeMap so the keys in the table will be alphabetically sorted.
              for (java.util.Iterator iter = map.keySet().iterator(); iter.hasNext(); i++) {
                   String keyStr = (String) iter.next();
                   rowData[0] = keyStr;
                   rowData[i][1] = "" + map.get(keyStr);
              JFrame f = new JFrame("UIDefaults Key-Value sheet");
              JTable t = new JTable(rowData, colName);
              f.setContentPane(new JScrollPane(t));
              f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
              f.pack();
              f.setVisible(true);

  • Adobe Form: Dynamic vlaue for Include text name. Script Coding

    Hi,
    Situtation:
    Need to print  an 'Include Text' in the Adobe form.
    The key texname for the include name is dynamic -  invoice number + position number.
    I have created a Global Data variable item_textkey and assigned it to the inculde textname in 'Context'.
    The Problem is I dont know how or where to assign a value to this global data variable at runtime, so the right include text is pulled up.
    I tried the code in the "FormCalc' of the text field. But it doesnt work.
    $record.ITEM_TEXTKEY = Concat ($record.IS_VBDKR.VBELN, $record.IS_VBDPR.POSNR)

    Try the following in initialize event of the main subform
    $record.ITEM_TEXTKEY.rawValue = Concat ($record.IS_VBDKR.VBELN.rawValue, $record.IS_VBDPR.POSNR.rawValue)
    Chintan

  • Best practices for setting up projects

    We recently adopted using Captivate for our WBT modules.
    As a former Flash and Director user, I can say it’s
    fast and does some great things. Doesn’t play so nice with
    others on different occasions, but I’m learning. This forum
    has been a great source for search and read on specific topics.
    I’m trying to understand best practices for using this
    product. We’ve had some problems with file size and
    incorporating audio and video into our projects. Fortunately, the
    forum has helped a lot with that. What I haven’t found a lot
    of information on is good or better ways to set up individual
    files, use multiple files and publish projects. We’ve decided
    to go the route of putting standalones on our Intranet. My gut says
    yuck, but for our situation I have yet to find a better way.
    My question for discussion, then is: what are some best
    practices for setting up individual files, using multiple files and
    publishing projects? Any references or input on this would be
    appreciated.

    Hi,
    Here are some of my suggestions:
    1) Set up a style guide for all your standard slides. Eg.
    Title slide, Index slide, chapter slide, end slide, screen capture,
    non-screen capture, quizzes etc. This makes life a lot easier.
    2) Create your own buttons and captions. The standard ones
    are pretty ordinary, and it's hard to get a slick looking style
    happening with the standard captions. They are pretty easy to
    create (search for add print button to learn how to create
    buttons). There should instructions on how to customise captions
    somewhere on this forum. Customising means that you can also use
    words, symbols, colours unique to your organisation.
    3) Google elearning providers. Most use captivate and will
    allow you to open samples or temporarily view selected modules.
    This will give you great insight on what not to do and some good
    ideas on what works well.
    4) Timings: Using the above research, I got others to
    complete the sample modules to get a feel for timings. The results
    were clear, 10 mins good, 15 mins okay, 20 mins kind of okay, 30
    mins bad, bad, bad. It's truly better to have a learner complete
    2-3 short modules in 30 mins than one big monster. The other
    benefit is that shorter files equal smaller size.
    5) Narration: It's best to narrate each slide individually
    (particularly for screen capture slides). You are more likely to
    get it right on the first take, it's easier to edit and you don't
    have to re-record the whole thing if you need to update it in
    future. To get a slicker effect, use at least two voices: one male,
    one female and use slightly different accents.
    6) Screen capture slides: If you are recording filling out
    long window based databse pages where the compulsory fields are
    marked (eg. with a red asterisk) - you don't need to show how to
    fill out every field. It's much easier for the learner (and you) to
    show how to fill out the first few fields, then fade the screen
    capture out, fade the end of the form in with the instructions on
    what to do next. This will reduce your file size. In one of my
    forms, this meant the removal of about 18 slides!
    7) Auto captions: they are verbose (eg. 'Click on Print
    Button' instead of 'Click Print'; 'Select the Print Preview item'
    instead of 'Select Print Preview'). You have to edit them.
    8) PC training syntax: Buttons and hyperlinks should normally
    be 'click'; selections from drop down boxes or file lists are
    normally 'select': Captivate sometimes mixes them up. Instructions
    should always be written in the correct order: eg. Good: Click
    'File', Select 'Print Preview'; Bad: Select 'Print Preview' from
    the 'File Menu'. Button names, hyperlinks, selections are normally
    written in bold
    9) Instruction syntax: should always be written in an active
    voice: eg. 'Click Options to open the printer menu' instead of
    'When the Options button is clicked on, the printer menu will open'
    10) Break all modules into chapters. Frame each chapter with
    a chapter slide. It's also a good idea to show the Index page
    before each chapter slide with a progress indicator (I use an
    animated arrow to flash next to the name of the next chapter), I
    use a start button rather a 'next' button for the start of each
    chapter. You should always have a module overview with the purpose
    of the course and a summary slide which states what was covered and
    they have complete the module.
    11) Put a transparent click button somewhere on each slide.
    Set the properties of the click box to take the learner back to the
    start of the current chapter by pressing F2. This allows them to
    jump back to the start of their chapter at any time. You can also
    do a similar thing on the index pages which jumps them to another
    chapter.
    12) Recording video capture: best to do it at normal speed
    and be concious of where your mouse is. Minimise your clicks. Most
    people (until they start working with captivate) are sloppy with
    their mouse and you end up with lots of unnecessarily slides that
    you have to delete out. The speed will default to how you recorded
    it and this will reduce the amount of time you spend on changing
    timings.
    13) Captions: My rule of thumb is minimum of 4 seconds - and
    longer depending on the amount of words. Eg. Click 'Print Preview'
    is 4 seconds, a paragraph is longer. If you creating knowledge
    based modules, make the timing long (eg. 2-3 minutes) and put in a
    next button so that the learner can click when they are ready.
    Also, narration means the slides will normally be slightly longer.
    14) Be creative: Capitvate is desk bound. There are some
    learners that just don't respond no matter how interactive
    Captivate can be. Incorporate non-captivate and desk free
    activities. Eg. As part of our OHS module, there is an activity
    where the learner has to print off the floor plan, and then wander
    around the floor marking on th emap key items such as: fire exits;
    first aid kit, broom and mop cupboard, stationary cupboard, etc.
    Good luck!

  • Best practice for mouseless ADF applications

    I am developing an ADF application where the users do not want to use the mouse.
    So I would like to know if there are a best practice for this?
    I am already using the accessKey functionality and subforms defaultCommand
    But I have had problems setting focus to objects on a page like tables. I would like a button to return the focus to the table after it has made the command like delete.
    I have implemented a solution where I have found inspiration several threads and other webpages (see below).
    Is this solution okay?
    Are there any problems with it?
    I would also like to know if there are better pathways to go like
    out of the box solutions,
    http://www.oracle.com/technetwork/developer-tools/adf/learnmore/79-global-template-button-strategy-360139.pdf (are there an example implementation?), or
    http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html
    in advance thanks
    Inspiration webpages
    https://blogs.oracle.com/jdevotnharvest/entry/how_to_programmatically_set_focus
    http://technology.amis.nl/2008/01/04/adf-11g-rich-faces-focus-on-field-after-button-press-or-ppr-including-javascript-in-ppr-response-and-clientlisteners-client-side-programming-in-adf-faces-rich-client-components-part-2/
    how to Commit table by writting Java code in Managed Bean?
    Table does not refresh and getting error as UIComponent is Null
    A short description of the solution:
    (jdeveloper version 11.1.1.2.0)
    --- Example where I use onSetFocus in jsff page
    <af:commandButton text="#{hrsusuiBundle.FOCUS}" id="cb10"
    partialSubmit="true" accessKey="f"
    shortDesc="Alt+Shift+F"
    actionListener="#{managedBean_clientUtils.onSetFocus}">
    <af:clientAttribute name="focusField" value="t1"/>
    </af:commandButton>
    --- Examples where I use doTableActionAndSetFocus in jsff page
    --- There have to be a binding in the jsff page to delete, commit and rollback
    <af:commandButton text="#{hrsusuiBundle.DELETE}" id="cb4"
    accessKey="x"
    shortDesc="Alt+Shift+X"
    partialSubmit="true"
    actionListener="#{managedBean_clientUtils.doTableActionAndSetFocus}">
    <af:clientAttribute name="focusField" value="t1"/>
    <af:clientAttribute name="actionField" value="Delete"/>
    </af:commandButton>
    <af:commandButton text="#{hrsusuiBundle.COMMIT}" id="cb5"
    accessKey="s" shortDesc="Alt+Shift+S"
    partialSubmit="true"
    actionListener="#{managedBean_clientUtils.doTableActionAndSetFocus}">
    <af:clientAttribute name="focusField" value="t1"/>
    <af:clientAttribute name="actionField" value="Commit"/>
    </af:commandButton>
    <af:commandButton text="#{hrsusuiBundle.ROLLBACK}" id="cb6"
    accessKey="z" shortDesc="Alt+Shift+Z"
    partialSubmit="true"
    actionListener="#{managedBean_clientUtils.doTableActionAndSetFocus}"
    immediate="true">
    <af:resetActionListener/>
    <af:clientAttribute name="focusField" value="t1"/>
    <af:clientAttribute name="actionField" value="Rollback"/>
    </af:commandButton>
    --- This is the java class I use
    --- It is published in adfc-config.xml as a request scope managedbean
    public class ClientUtils {
    public ClientUtils() {
    public void doTableActionAndSetFocus(ActionEvent event) {
    RichCommandButton rcb = (RichCommandButton)event.getSource();
    String focusOn = (String)rcb.getAttributes().get("focusField");
    String actionToDo = (String)rcb.getAttributes().get("actionField");
    UIComponent component = null;
    String clientId = null;
    component = JSFUtils.findComponentInRoot(focusOn);
    clientId = component.getClientId(JSFUtils.getFacesContext());
    if ( "Delete".equals(actionToDo) || "Commit".equals(actionToDo) || "Rollback".equals(actionToDo) ){
    BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
    OperationBinding operationBinding = bindings.getOperationBinding(actionToDo);
    Object result = operationBinding.execute();
    AdfFacesContext.getCurrentInstance().addPartialTarget(component);
    if (clientId != null) {           
    makeSetFocusJavaScript(clientId);
    public static String onSetFocus(ActionEvent event) {
    RichCommandButton rcb = (RichCommandButton)event.getSource();
    String focusOn = (String)rcb.getAttributes().get("focusField");
    String clientId = null;
    if (focusOn.contains(":")) {
    clientId = focusOn;
    } else {
    clientId = findComponentsClientIdInRoot(focusOn);
    if (clientId != null) {           
    makeSetFocusJavaScript(clientId);
    return null;
    private static void writeJavaScriptToClient(String script) {
    FacesContext fctx = FacesContext.getCurrentInstance();
    ExtendedRenderKitService erks = null;
    erks = Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
    erks.addScript(fctx, script);
    public static void makeSetFocusJavaScript(String clientId) {
    if (clientId != null) {
    StringBuilder script = new StringBuilder();
    //use client id to ensure component is found if located in
    //naming container
    script.append("var textInput = ");
    script.append("AdfPage.PAGE.findComponentByAbsoluteId");
    script.append ("('"+clientId+"');");
    script.append("if(textInput != null){");
    script.append("textInput.focus();");
    script.append("}");
    writeJavaScriptToClient(script.toString());
    public static String findComponentsClientIdInRoot(String id) {
    UIComponent component = null;
    String clientId = null;
    component = JSFUtils.findComponentInRoot(id);
    clientId = component.getClientId(JSFUtils.getFacesContext());
    return clientId;
    }

    Hi,
    I am developing an ADF application where the users do not want to use the mouse. So I would like to know if there are a best practice for this?
    Well HTML (and this is the user interface you see) follows a tab index navigation that you follow with "tab" and "shift+tab". Anything else is a short cut for which you use mnemonics (as you already do) or shortcuts (explained in http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html). There is a distinction to make between non-web environments (which I think you and your users have abackground in) and client desktop environments. Browsers block some keyboard functionality for their own purpose. So you may have to find a list of keys first that work across browsers. Unlike desktop clients, which allow you to "press a button" without the button to take focus, this cannot be done on the web. So you need to be clever here, avoiding buttons at all.
    The following paper is about JavaScript in ADF and explains the basics for what Chris Muir explains in : http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html
    http://www.oracle.com/technetwork/developer-tools/jdev/1-2011-javascript-302460.pdf
    It has the outline for how to register short cut keys that perform a specific action (e.g. register ctrl+d to delete the current row you are on, or press F11 to execute a query (similar to Oracle Forms frmres files)). However, be aware that this includes some code you have to write (actually quite some code to be honest).
    http://www.oracle.com/technetwork/developer-tools/adf/learnmore/79-global-template-button-strategy-360139.pdf (are there an example implementation?), or
    http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html
    Actually these are implementations as they come with example code for you to use and customize, do they? So what is this question asking for more ? Also note that global buttons don't quite have anything in common with the question you asked. I assume you want to see it as an implementation of the Forms toolbar that operates on the form or table the focus is in. This however does not work for the web as there is nothing that keeps track of which component has a focus and to what iterator (data block) it belongs. This would involve even more coding (though possibly doable)
    Frank

  • Best Practice for Extracting a Single Value from Oracle Table

    I'm using Oracle Database 11g Release 11.2.0.3.0.
    I'd like to know the best practice for doing something like this in a PL/SQL block:
    DECLARE
        v_student_id    student.student_id%TYPE;
    BEGIN
        SELECT  student_id
        INTO    v_student_id
        FROM    student
        WHERE   last_name = 'Smith'
        AND     ROWNUM = 1;
    END;
    Of course, the problem here is that when there is no hit, the NO_DATA_FOUND exception is raised, which halts execution.  So what if I want to continue in spite of the exception?
    Yes, I could create a nested block with EXCEPTION section, etc., but that seems clunky for what seems to be a very simple task.
    I've also seen this handled like this:
    DECLARE
        v_student_id    student.student_id%TYPE;
        CURSOR c_student_id IS
            SELECT  student_id
            FROM    student
            WHERE   last_name = 'Smith'
            AND     ROWNUM = 1;
    BEGIN
        OPEN c_student_id;
        FETCH c_student_id INTO v_student_id;
        IF c_student_id%NOTFOUND THEN
            DBMS_OUTPUT.PUT_LINE('not found');
        ELSE
            (do stuff)
        END IF;
        CLOSE c_student_id;   
    END;
    But this still seems like killing an ant with a sledge hammer.
    What's the best way?
    Thanks for any help you can give.
    Wayne

    Do not design in order to avoid exceptions. Do not code in order to avoid exceptions.
    Exceptions are good. Damn good. As it allows you to catch an unexpected process branch, where execution did not go as planned and coded.
    Trying to avoid exceptions is just plain bloody stupid.
    As for you specific problem. When the SQL fails to find a row and a value to return, what then? This is unexpected - if you did not want a value, you would not have coded the SQL to find a value. So the SQL not finding a value is an exception to what you intend with your code. And you need to decide what to do with that exception.
    How to implement it. The #1 rule in software engineering - modularisation.
    E.g.
    create or replace function FindSomething( name varchar2 ) return foo.col1%type is
      id foo.col1%type;
    begin
      select col1 into id from foo where col2 = upper(name);
      return( id );
    exception when NOT_FOUND then
      return( null );
    end;
    And that is your problem. Modularisation. You are not considering it.
    And not the only problem mind you. Seems like your keyboard has a stuck capslock key. Writing code in all uppercase is just as bloody silly as trying to avoid exceptions.

  • Best practice for backing bean population? (also, ActionListener RANT)

    Hello,
    I am about 3/4 of the way through development of a small to medium size JSF application. Sometimes I really like JSF, but much of the time I am left puzzled or frustrated for hours trying to find workarounds to JSF's bugs/glitches and design flaws.
    For example, early on, I was impressed with how easily it was to invoke a method from a page using an actionlistener. Now that I'm actually building things with JSF, the actionlistener funtionality still seems cool, but incredibly half baked. I find myself using request parameters LIKE CRAZY to work around the fact that JSF doesnt support passing parameters directly to backing bean methods. This feels awkward and wrong considering the fact that JSF is intended to abstract the HTTP underpinnings. To add insult to injury, I often have to iterate through ALL of the request parameters looking for one that has an id with an ending matching my desired property name (since JSF appends it's own crap to the beginning). I don't like doing things in a hacky way. This seems very hacky, and I feel dirty doing it.
    So, my first question is, what is the best practice for populating backing beans??? How do others accomplish this. I can think of several other approaches, but none feel less hacky.
    Second, are there plans in the next spec (please say there are) to allow parameters to be passed to backing bean methods? If not, WHY THE HECK NOT?
    Even though JSF expert group people have been conspicuously absent from this forum of late, I'd really appreciate responses from you as well.
    Thank you for your thoughts.

    Hi BrownBear,
    I've been using JSF for about 6 months now and I'd be glade to help as much as I can.
    Concerning parameters, I'm not sure what your issue is but I use the f:param tag to pass them. If you could post an example of what you are trying to do, I could see exactly what your issue is. Maybe the f:param can't help you.
    As for best practice for populating backing beans, I personaly try to let JSF do as much as possible. For example, if I have a backing bean with five properties, I make sure that they all are on the JSP page the bean serves. If one of the property is just there as an Id like, lets say, a Person ID (DB row key), then I put it on my JSP page as a hidden input field. I do the same with the properties that only for display, if I want them to be back in my bean when request comesback.
    Hope this help some how. Please, feel free to ask specific questions related to your specific problem and I monitor this post and trnasfer to you the ;little JSF experience I have.
    I'm pretty happy with JSF as it is but it sure needs improvements. :) What the heck, it's version 1.01 after all, and the next release should be a great one with the integration of JSTL.
    Cheers

Maybe you are looking for

  • Successful install of 8.1.7 on Solaris 8 with more than 256Mb RAM

    To all who have struggled with this one, like me. You owe me a bottle of Rogaine.... but I will accept a bottle of Jack instead. It appears that the kernel parameters published in the Install Guide are only good for Solaris 8 with up to 256Mb RAM If

  • Problem clearing a move request

    Hi, I've got a simple Exchange 2010 setup running along a 2007 insallations. I have 2 DC's both running 2008 but not R2. My issue is, I have moved a couple of users using the local move request. One of them I delete the move request as soon as it had

  • Installing Enterprise Manager 10g Grid Control Using an Existing Database

    I want to install Enterprise Manager 10g Grid Control 10.2.0.3 using an existing database. This database is RAC 10.2.0.2. and I use it as Infrastructure Metadata Repository. I is said in Oracle documentation that SYSMAN schema has to be dropped, thus

  • Ecc5 installation error

    hi! i try to install ecc5 & oracle 9i. i was successfully installed CI ( ecc5,uni-code,abap ). when i try to install DB port, at the time of DATABASE LOAD( R3load shows running 1: waiting ), the following error will occur. log file : SAPSSEXC.log sho

  • When opening keynote 6.2, it comes up"....." cannot be open. How can it be opened?

    When opening a file for keynote 6.2, it comes up"....." cannot be open. How can it be opened?