OC4J & nested app. modules

I've successfully deployed my server BC4J project on Orion EJB server but I am not able to call
top_app._module thatalready_exists.findApplicationModule( "AuditModule" );
to find a nested module. I get this exception:
Looking bean sess_iiop://thisServer/:thisSession//BAFIR/ftr.audit.AuditModule
javax.naming.NameNotFoundException: :thisSession
If I try to create this nested "AuditModule" as a single topmost one it creates it, but as a nested it does not. This module is indicated in the app. module wizzard to be nested.
The project has been tested in local mode and did work ok.
What am I doing wrong ?

Anyone?

Similar Messages

  • ADF activation/Passivation - Nested App Modules

    Hi All,
    I have a question related to application module pooling in ADF.
    We are developing a application using adf 11.1.1.7. When we initially designed the application we have created multiple application modules around 14 app modules.
    Then we realized that database connection usage is very high as number of app modules are more.
    To reduce the database connection usage, we have combined all the application modules under one root application module now.
    The connection usage is reduced now, but I have a question on memory foot print.
    1) When multiple application modules are placed under a root, during passivation, will all the state of all nested app modules under the root is written to the PS_TXN table?
    2) If  for certain child modules passivation is not required as we don't need to preserve the state of the app modules across user requests,
    can we configure that at child app module level??

    In regards to question 2, the VOs have a tuning option "Passivate State" which is set on by default which you can turn off.  Please read the associated documentation around this option.
    It's highly recommended you test your application after making this change for any impacts it may have, by doing a round of regression testing with jbo.ampool.doampooling=false.  Note however that option is not supported in production, so ensure to set it back to true.
    CM.

  • Nesting App Modules from ADFLibs - jdev 11.1.2.3

    Hello:
    I have a dashboard application with 6 tabs. On each tab is a bounded task flow from an ADFLib. Note: each BTF has its own App Module.
    In the Master DashBoard App,  the ADFLibs BTF's are dropped as regions in each tab. The Master App has its own application module and I want to nest each of the BTF App Modules under the single App Module in the Master app.  The reason is that each tab of the application currently creates a seperate DB connection. I want the Master App to only create one DB connection for the entire application.
    In the resource pallet, I can see the App Modules from the seperate ADFLibs, and I have added these App Modules to the Master Project, but the newly added AM does not display under the Master App Module for me to nest. (in App Module ->- Data Model --> Application Module Instances)
    How can I nest multiple AM's from ADFLibs under a single Master App Module?  ( the AM from ADFLibs do not display in Application Module Instances in the Master App)
    Thanks

    Have I added the application Modules to the Master Model?
    Answer:
    In the Master, In the Resource Pallet, I highlighted the Application Module in the ADFLibs (from Subsystem), right clicked and selected Add to Project. But this did not make the App Module display in the Master App Module Application Module Instances. (Note: my subsystem adflibs are deployed from ViewController with dependency on Model. I tried to hightlight App Module above and add to Model Project of Master in above) This caused WebLogic to fail to deploy.
    What is the correct way to add an App Module from an ADFLIb subsystem and add the AM to the Master App so it displays in the Master App Module Application Module Instances?
    All subsystems should use the same connection and all subsystems are set to No Controller Transaction and Share data controls with calling task flow is checked for all subsystem.
    More testing revealed:
    One thing to note:   each of my subsystem, a deployment profile was created on the ViewController with dependency on its Model project.  When I added the subsystem project above to add the AM, I adding the App Module from the adflib to the Model project of the master. This caused WebLogic to fail during deploy.
    So I tried another test. In the subsystem, I created another deployment profile, on just the Model project and created an adflib. I added this new adflib to the Model project of the Master. The App Module from the subsystem now shows up in the Application Module Instances. (which I selected and moved over to the right to nest under Master App Module.  This time the application ran, but still have one connection per tab.)
    Do you create ADFLibs with a deployment profile on the VC with dependancy to the Model Project?  Or do you create two seperate ADFLibs for subsystems, one for VC project only and one for Model project only?
    Thanks for the help.

  • Nested Application Module - commit behavior

    Guys,
    I have ADF BC in the following hierarchial manner.
    AM1
    -VO1
    -VO2
    -AM2 (nested AM)
    Assume that there are pending transactions on both AM1 and AM2.
    what is the behaviour for the follwing?
    Q1 . Issuing commit on AM1, will it commit AM2 also?
    Q2 . Issuing commit on AM2, will it alone commit?
    Edited by: Dev on Apr 19, 2011 12:00 PM

    ADF distinguish between root application module and nested application modules. A root app module has no parent whereas an nested app module has a parent. A root app module holds the transaction (and only the root app module). Nested app module share the transaction of the root app module (they are nested in).
    So Q1: yes and Q2: no.
    Read 9.4.2 here http://download.oracle.com/docs/cd/E17904_01/web.1111/b31974/bcservices.htm#sm0229 fro more info.
    Timo

  • Can't call app module methods!

    I have a web app that has two AppModules: AppModule and SFAppModule. SFAppModule is NOT nested within AppModule.
    In a method inside of AppModule, I need to set a where clause for a view that is part of the data model for the SFAppModule. I can't seem to gain access to the other application module.
    1. If I Make it a NESTED app module, then of course, I have a reference to it, as it adds it, BUT I'd end up having to fix the view references to this new AppModule.
    2. I could always move the VIEW objects out of SFAppModule into AppModule, but the idea was that any object in SF was really specific to that "subsystem". Of course one of the main launch pages needs to read 6 different views, two from each app module (we're planning on adding one more application module).
    Did we paint ourselves into a corner???
    How can we get a reference to SFAppModule from inside of AppModule if it is NOT a nested application module of AppModule?
    argh.

    Alternatives for Help Resetting Security Questions and Rescue Mail
         1. Apple ID- All about Apple ID security questions.
         2. Rescue email address and how to reset Apple ID security questions
         3. Apple ID- Contacting Apple for help with Apple ID account security.
         4. Fill out and submit this form. Select the topic, Account Security.
         5.  Call Apple Customer Service: Contacting Apple for support in your
              country and ask to speak to Account Security.
    How to Manage your Apple ID: Manage My Apple ID

  • Calling custom methods from Nested Application Modules

    We are having a problem with passing parameters to our nested App Modules.
    We have a custom method in our nested app module and when we drag that method from our data control palette in our page everything seems to work just fine. We are binding our NamedData values to #{requestScope.<field>} where the fields are inputText controls. When we run it will execute the function but the parameters are null.
    It seems to me that the Nested App Module can not evaluate the EL expression, or in other words when it gets evaluated it returns a null.
    Can anyone help with this?
    Thanks,
    Peter

    If you use an EL expression of some hard-coded value instead of #{requestScope.XXX} does that value correctly get passed to the function?
    In other words, are you 100% sure that EL expression is not evaluating to null ?
    If you drop an AM method as a parameter form on a page, you'll see that by default it's NamedData elements use EL expressions that reference attribute bindings that are bound to local page-def variables, rather than to #{requestScope.something}

  • Can not access root app module in nested one

    I am using Jdeveloper 11g R2 (11.1.2.3) & Weblogic 10.3.5.0
    I have a root application module and few nested application modules nested under root one in my ADF application
    I have few common methods under root application module Impl class and try to access them in nested Impl classes
    like this (This code is in nestedAppModuleImpl class):
    RootAppModuleImpl root = (RootAppModuleImpl)someViewObject.getDBTransaction().getRootApplicationModule();
    root.doSomething();
    when I execute above code this excepton is thrown:
    oracle.jbo.server.ApplicationModuleImpl cannot be cast to mypackage.RootAppModuleImpl
    Any comment or workaround?
    What is the proper solution?
    Regards
    Mohsen

    Mohsen, there is something terribly wrong with your code.
    //(This code is in nestedAppModuleImpl class):
    RootAppModuleImpl root = (RootAppModuleImpl)someViewObject.getDBTransaction().getRootApplicationModule();
    root.doSomething();doesn't make sense. Does doSomething() really return an RootAppModuleImpl? You can access the root application module from the nested application module by
    RootAppModuleImpl root = (RootAppModuleImpl)getRootApplicationModule();If you get a class cast exception it means that there is something wrong with your RooAppModuleImpl. Does it extend ApplicationModuleImpl? If yes the cast should be possible.
    Is the root application module of the type RootAppModuleImpl? only then you can access the common methods after getting the root application module.
    the next method
    private ViewObject getAccountExistsView(DBTransaction t) {
    ApplicationModule root = t.getRootApplicationModule();
    ViewObject vo = root.findViewObject("MemberExistsView");
    if (vo == null) {
    vo = root.createViewObject("MemberExistsView","model.MemberExistsView");
    return vo;
    }doesn't make sense to me. Where does this method reside? in the RootAppModuleImpl? if yes, why do you call getRootApplicationModule? You are in the root application Module. I can' comment on the createViewObject you are calling, but my feeling is that you don't need it either. The view you are creating should be there already if your application module are setup correctly.
    And you are right, you should not call createRootApplicationModule if it is not needed. In your case it's not!
    Timo

  • What's the best practice to get App Module on Jdev 10.1.3 using Struts/ADF?

    Hi,
    I read Mr. Muench's post stating that the best way to execute an App. Module method is to make the method part of the client interface and then drag and drop it on a form as a button ...
    In another post Muench says that a another way to get the App Module is using getDataProvider() method, I tried and found that this worked in:
    // standard event handler interface
    // on PageController class
    public class MyFormPageController extends PageController
    public void onUpdate(PageLifecycleContext ctx)
    AMServImp am;
    am = (AMServImpl)ctx.getBindingContext().getDefaultDataControl().getDataProvider();
    am.myMethod( ... );
    am.getTransaction().commit();
    I really like the second option because is closer to what I used to do in 10.1.2 with an event handler receiving DataActionContex parameter. Besides, is not clear to me in the former method with the drag and drop how the form inputs are assigned to the method parameters ....
    I would like to know however what is the best way and why ?
    Any comments ?
    -OM
    Message was edited by:
    omar71

    According to JSR 227, which ADFm is implementing, the view/controller portions of your application aren't really supposed to be touching the business services, or even the data controls, at all. They're supposed to do all model manipulation entirely through the databindings.
    This is just another bit of "code separation"--much like MVC code separation--that should make the application a bit easier to maintain. Your application module could change dramatically--maybe even be replaced by an EJB session bean--and all you have to do is change the .dcx file and your page model files, rather than searching through your code. Maintainability and readability is the advantage here; I don't think there could possibly be any slowdown by calling ctx.getBindingContext().getDefaultDataControl().getDataProvider(), since that's what the bindings would do anyway.
    Well, of course there's the "ADF supports going this way declaratively", which is not to be sneezed at as an advantage.
    As to how to put the form values in to the method binding: Look up the <af:setActionListener> tag (e.g., using full-text search in the help). You can nest that into your commandButton or commandLink tags and use it to set method parameters.
    Best,
    Avrom

  • App module view object row currency and task flows

    Hello -
    Using JDev 11gR1. My application uses ADF Rich Faces with ADFBC.
    I have case where I want to
    a. select a row in a table based on a view object
    b. hit a button to invoke a method in an application module.
    c. in the app mod method, call getMyViewObject().getCurrentRow() to get the row selected by the user
    d. "do something" with the row
    In 10.1.3, this worked fine.
    In 11gR1, I am having problems:
    1. The above situation works fine if I have a regular page.
    HOWEVER,
    2. The above situation does NOT work if my table is in a page fragment in a task flow. (The getCurrentRow() returns NULL.)
    For case #2 I've checked the following:
    * verified that the selectedRowKeys and selectionListener attributes were set on the table in the page
    * verified that I'm using the correct app module instance (I have nested application modules).
    * experimented w/various transaction and data control scope settings in the task flow definition.
    So... from those details is there something obvious I am doing wrong? It looks like cases #1 and #2 above use different row set iterators. Is there a way to grab the correct row set from within my app module method? Does this have something to do with the data control scope defined by the task flow? (For 11g do I need to "rethink" sticking logic in the app module and instead placing it within a managed bean get access to my ADFBC objects via the bindings layer?)
    Thank you for reading my question,
    -- Scott

    See this article for View Object tuning tips:
    http://www.oracle.com/technology/products/jdev/tips/muench/voperftips/index.html
    Are you planning to use this AM as a nested AM inside other application modules?
    If you don't the "selection AM" will have its own, separate database connection/transaction.
    If you do, it will share connection, transaction with its containing "root" AM.
    It may not be relevant to your application, but just realize (which is explained in the article I point to above) that view objects that are not related to entity objects do not "see" pending changes in the current transaction. That feature depends on the VO/EO cooperation. It's fine to build VO's without an EO -- in fact we've made it easier to do this in 10.1.2 in the Design Time wizards -- but you just want to make sure you realize what features it's giving up. If you don't need those EO-related features, then by all means create an Expert Mode VO that's not related to EO's.

  • Separate App Module, View Object based on Select not EO: Best practice?

    Hi,
    I have a list of base tables(parameters) that are used everywhere in my application for selection components (List, Combo, Radio).
    I'm considering creating a separate app module with a view object based on query for each table.
    I have created a BaseTableAM application module for managing those tables, Entity objects and View Objects in update mode.
    Those tables are rarely changed.
    Example of table:
    ItemType
    item_type_id = primary key
    name = description
    In the BasetableAM:
    ItemTypeEO entity object
    ItemTypeVO updateable view object based on related entity object.
    Now in my project I will create combo boxes for selection of the item_type_id.
    Separate application module:
    SelectionViewAM composed of View Objects based on Select statements and not on Entity Objects.
    Example of view object ItemTypeViewVO:
    SELECT ItemType.ITEM_TYPE_ID,
    ItemType.NAME
    FROM ITEM_TYPE ItemType
    All view objects in this application module will be read-only and for selection only.
    By basing all those View Objects on select statements not based on Entity Objects I suppose there will be no locking and "value changed" management => less overhead.
    Is this a good practice?
    Being read-only I could have based those View Object on Entity Object with flag updateable set to no, what would you recommend?
    By creating a separate Application Module for those selection view objects, I know that update will not be possible.
    Thank you for your advice.
    Frederic

    See this article for View Object tuning tips:
    http://www.oracle.com/technology/products/jdev/tips/muench/voperftips/index.html
    Are you planning to use this AM as a nested AM inside other application modules?
    If you don't the "selection AM" will have its own, separate database connection/transaction.
    If you do, it will share connection, transaction with its containing "root" AM.
    It may not be relevant to your application, but just realize (which is explained in the article I point to above) that view objects that are not related to entity objects do not "see" pending changes in the current transaction. That feature depends on the VO/EO cooperation. It's fine to build VO's without an EO -- in fact we've made it easier to do this in 10.1.2 in the Design Time wizards -- but you just want to make sure you realize what features it's giving up. If you don't need those EO-related features, then by all means create an Expert Mode VO that's not related to EO's.

  • Nested Application Module Performance

    What are the implications of nesting application modules? I am nesting them in such a way that they are defined at design-time and used by calling findApplicationModule(String) on the root ApplicationModule. Could there be any significant overhead accessing one nested app mod in this way as opposed to going to the desired app mod directly? Or is there anything else to watch out for with this type of design? I haven't had any trouble so far but my project is not too large yet.

    For example, I have three ApplicationModule objects.
    RootModule, Module1, and Module2. By nesting Module1
    and Module2 under RootModule, I can use either once I
    have an instance of RootModule by calling
    findApplicationModule(String name). This is useful
    when I want to do things inside both Module1 and
    Module2 and still use the same connection and
    transaction context.
    If I only want something out of Module1 during a
    request, would it be advantageous to ONLY create
    Module1 directly and bypass my RootModule?
    Meaning this:mod1Am =
    Configuration.createRootApplicationModule("Module1","M
    dule1Config");
    mod1Am.myCustomOperation();As opposed to
    this:rootAm =
    Configuration.createRootApplicationModule("RootModule"
    "RootConfig");
    mod1Am = rootAm.findApplicationModule("Module1");
    mod1Am.myCustomOperation();
    Nick:
    There are advantages to creating Module1 directly. It would be that you don't create unnecessary objects (in your case, you would avoid unnecessary creation of Module2").
    However, I would make the following side comment: from your message, it sounds like you would create an AM for every request and remove it at the end. Did you consider using AppModule pool? AM pool would be better than create-remove because AM pool can keep around a number of root AM instances and manage resources for you. This way, you don't have to create any AM for each request. AM pool is also able to support stateful operations with excellent scalability.
    Thanks.
    Sung

  • Can Designer generate ADF Entity Objects, View Objects and Apps Module ?

    Hi all,
    On what way can Designer integrate with JDeveloper (+ ADF) ?
    Can Designer generate ADF Entity Objects, View Objects and Apps Module ?
    Thank you for your help,
    xtanto

    Designer itself has no direct integration with JDeveloper. However, there are three options. First of all, you can get a JDeveloper extension (download this separately) that lets you create a Connection to a Designer repository. From that Connection you can find modules that you defined in Designer and generate Entity and View objects for the tables and columns that you used in those modules, and an Application Module. It does not create JSPs or other user interface objects.
    Another option is to buy JHeadstart from Oracle. This contains a set of code generators and ADF extensions that include an ability to get information from a Designer repository. JHeadstart works fine for non-Designer users too, but was built by the same people who wrote Designer Headstart - they know the repository API intimately.
    The third option is to download Oracle Designer Extension Builder (ODEB) which was just recently made available. This is a product of a collaboration between Designer users from the Oracle Development Tools Users Group (ODTUG) and Oracle to extend the capabilities of Designer with user written tools and utilities. You could use ODEB to write your own generators for ADF Business Components. Or you could wait and see if someone else in the user community does this. I hope that you or whoever does such a generator will be willing to share it with us all.

  • Is it possible to call a custom method in App Module from a backing bean?

    I would like to know if a custom method in App Module can be called from inside a backing bean.
    I am not sure if it is logically right to call, from a backing bean, a custom method in App Module. But would like to know if that makes sense or if it is possible.

    Hi..
    Yes it is possible.You have to add that method for client interface of AppModule.Now you can see that method in Data Controls(Refresh the data control). To call this method using bean it should add as method action to bindings(Click Bindings>+>methodAction>and Create action binding).
    Now you can call this method in bean class.
    Check following example use this concept to execute view criteria
    http://adf-lk.blogspot.com/2011/05/oracle-adf-create-view-criteria-and_4727.html

  • Need to Return immediately and commit the App Module on a different thread

    I have an action that I want to return fast (immediately) but the server processing takes longer than acceptable. The results of the operation don't matter to the page submitting it and I want it to be able to navigate away even if the operation is not complete. I want to either be able to send a non-blocking server event from the browser or on the server side start a new thread that performs the operation allowing the original thread to return immediately. The new thread would need access to an Application Module in order to commit data. How would I go about accomplishing this?
    Some thoughts
    I've tried creating a ConcurrentLinkedQueue and putting the DataControl on the que, then in the other thread I pull it off the que, process and commit the data. This works unless the page is navigated away from. Then calling dc.getApplicationModule(); returns null.
    I thought about using createRootApplicationModule in the new thread (since the new thread has no context) but don't know how that would work
    This is the code in the run method of the new thread. In this example, I'm adding data to the app module in the original thread and committing the data in a new thread.
    (like I said, it works most of the time.)
    Object[] req = (Object[])que.poll();
    DCDataControl dc = (DCDataControl)req[0];
    try{
    ApplicationModule am = dc.getApplicationModule();
    if (am != null){
    am.getTransaction().commit();
    } else{
    System.out.println("AM:null unable to commit ");
    } catch (Exception e){
    e.printStackTrace();
    finally{
    if (dc!= null){ dc.resetState();} // release app module
    }

    Thanks for the replies. I am aware of the inherent risks of running a separate thread within a managed container.
    The use case is a performance logging operation. We have a internal web app used by a network of franchises with over 1000 users. We log response time and performances statistics to the database. When the user clicks to navigate or commit data, the response time that the user experiences is logged after the page has fully rendered either through a PPR or a full submit. This is done by submitting ADFCustomEvent from javascript on the page after rendering is complete.. The event sends up the time difference from when the user first clicked to when the page was fully rendered. This information is then merged with logged events stored on the users Session that shows the name and response time of every query that was executed during the previous request. Depending on the page this could be up to half dozen to a dozen or more queries. The logging operation as experienced by the browser is generally fast (<200ms) but sometimes can be as long as a second or more when the database gets busy. A half second is too long as makes the app appear sluggish if the user can't type or click immediately after the page has finished rendering. The logged data is aggregated so we know exactly how much of the page load was due to a slow browser/network, how much was database time, webservice call time, etc... If it's due to a slow database we can drill down and see which query is the culprit. These performance metrics are critical to operations and are charted throughout the day so we know exactly what our users are experiencing. All of our users use a custom firefox client that we control. Using this logging framework we were able to determine that upgrading to a Firefox 4.0 based client cut browser render time by more than half a second on average. We can also tell what type of hardware the user is running so can place the blame for poor performance where appropriate. We have determined that pages render considerably faster on Windows 7 than on Windows 98 with the same hardware. We are moving the logging tables off of our exadata database to a separate box to remove that load from the application database. Since we expect the other database not to perform as well we don't want it to affect the user experience, hence the need to log asynchronously. I would like to put the data on a queue and have a background daemon process read from the queue and commit to the database. I would like the daemon thread to be able to use BC components. I would prefer not to resort to using a web service because of the inherent overhead. The logging operation is not a long operation but is of high frequency so should be as streamlined as possible. The load is spread over 6 servers with 4 JVM's each (24 weblogic instances). I know it's possible to use BC components from a plain Servlet (which runs on it's own thread) so what I want is to have something like a servlet thread that loops forever processing my logging queue.
    One other method I am investigating is using my own non-blocking ajax call that callls a servlet to perform the logging. I will need to pull out the timestamp contained within a client side ADF component along with the pages ctrl-state variable that is included with every ADF request as it uses this as the key to get to the data on the session. ADF really needs a non-blocking ADFCustomEvent for this type of request. (send and don't care about the response)
    The client component with the server listener looks like this
    <af:outputText value="#{pageFlowScope.perfClientTS}" visible="false"
    id="perfClientTSField" clientComponent="true">
    <af:serverListener type="logPerfData" method="#{perfLog.logPerfDataAction}"/>
    </af:outputText>
    The script that queues the ajax call after the page loads looks like this
    AdfCustomEvent.queue(perfClientTSField, "logPerfData", {
    typeId : typeId,
    subTypeId : subTypeId,
    responseTime1 : new String(responseTime1),
    responseTime2 : new String(responseTime2),
    openedVia: via
    true);
    I also tried calling the noResponseExpected() method on the event before queuing it but it still blocked the UI and caused an additional side effect in that the client sent two ajax requests instead of one. It somehow thought something on the client side needed to be synced with the server.
    email me and I can send a doc with more details about how our performance logging framework works.
    Edited by: Don Kleppinger on Mar 14, 2012 2:52 PM

  • Problem in App Module Impl client method

    Hope someone has an answer for this. I have a data action calling a client interface service method in the app module impl class. I am passing http request data wrapped in a Map to this method from the action class.
    In this method I am calling another method in a bean. Strangely, the code in app module method gets executed twice, acting like a recursive call! I debugged it and noticed that my action class calls the method only once, but the call in the method to bean method is executed twice. I want to capture a database error for inserting a new row in my bean method the first time by throwing a jbo exception in app module method, but throw new exception is ignored and message gets lost due to 2nd excecution of the code.
    Any ideas or help is much appreciated.
    TIA,
    S

    User, please always tell us your jdev version.
    What do you mean by 'verbatim EO'?
    If you want to use the framework you should use it and not look for some hacks to archive your work. The docs help you to create or update data using the framework. If you don't want to use the framework, you don't have to, but then your post is for an other forum.
    Timo

Maybe you are looking for

  • DVI-D - HDMI switcher - DVI-D

    Hey friends, I've got a fairly convoluted and confusing HDMI situation. As DVI matrix switchers are so expensive, I decided to get a HDMI switcher and HDMI to DVI cables. I have two Mac Pro towers, each with two DVI outputs, and two 24" Cinema HD dis

  • Legend rendering

    A few days ago I posted the message about too long text of legend item. Perhaps I found the way to solve the problem of proper rendering legend if width of legend items is wider then parent container. I want to clip legend item text, and show tooltip

  • Convert xsd:dateTime to UTC

    Hello community, Within a message mapping I have to convert a field containing date, time and timezone to UTC/GMT timezone. Example: 2008-10-06T01:11:06+02:00 = Incoming value from source field, incl. local time + time zone offset 2008-10-05T23:11:06

  • Replication of HR Org model from ECC to C4C

    Hi, Just wanted to know whether we can replicate HR Org models in ECC system to C4C. Regards, Subhasish

  • AS3 arrays and conditionals not working

    I'm working with CS4 and AS3 using timeline coding. I have three sets of movie clips in three different arrays. The idea is to have topArray and downArray movies make zeroArray movies visible. For instance, if topArray[0] and downArray[0] are clicked