Tips on localizing rich client apps

We are currently using a properties resource file with around 1200 lines of localized
messages/text. There is also an ApplicationResource class which contains string constants corresponding to the keys in the language file.
-- client_en_US.properties --
table.column.name=Name
table.column.address=Address
ApplicationResources.class
public static final String TABLE_COLUMN_NAME="table.column.name";
public static final String TABLE_COLUMN_ADDRESS="table.column.address";
-- client app --
ApplicationResources.getResources().getText(ApplicationResources.TABLE_COLUMN_NAME);
The biggest disadvantage with this solution is that the ApplicationResources class gets very big and consumes quite a lot of memory, you'll end up with a string instance for each text that you want to localize. The advantage is that client devs don't have to look into the properties file for the proper key name instead they can use code completion(eclipse etc) and use the constant defined to get localized text. We also minimize runtime errors when property names are not found.
We don't have any restrictions on the memory on the client side but I feel that this solution is definetly not very optimal and quite "ugly".
Any suggestions on how to do this "properly"?

The biggest disadvantage with this solution is that the ApplicationResources class gets very big
and consumes quite a lot of memory, you'll end up with a string instance for each text that you
want to localize.Actually, you don't create any string instances that you wouldn't otherwise create. Further, the class consumes disk space but not necessarily memory, because the static final fields are inlined into the classes which use them, so if they're the only members of the class there's no reason for it to be loaded.
I feel that this solution is definetly not very optimal and quite "ugly".There aren't any nice ways of doing this, because you have to have some duplication. Your way of doing it is no worse than any other I've seen.
If you really want to be sure that you don't hit runtime issues, my advice would be to write a model checker to put into your build process which scans the bytecode for calls to getText, asserts that the parameter is a constant string, and scans the properties files to ensure each has an entry with that string as its key.

Similar Messages

  • ADF rich client: How to automate testing

    Hi Experts,
    We need to do some automate testing against application that is developed with ADF Faces 11g, I've tried with loadrunner 8.1, which provides 2 approaches to record web applications, web(html / http) and web(click / script).
    According to my experiment and this article , it's not feasible to record actions to rich client app with the first protocol.
    As for the second one, according to my test, some of actions works and the others not (for example, input field, expand accordion).
    My question is, Is there a solution to fully automate adf 11g UI interactions? Solutions based on loadrunner is preferred.
    Thanks for any help,
    Todd

    Thanks CM.,
    Sorry I didn't make my question clear. Selenium does fit in AJAX well, but seems that it lacks of ability to do stress test, what if we need highly concurrent workload(say, 5000 users)? Can selenium RC or some tools else generate that?
    And, are you sure that loadrunner 8.1 is not feasible to do stress test against ADF rich client apps? I need a good reason to persuade my bosses to consider adopting new tools.
    Regards,
    Todd

  • Webi Rich Client 2-tier Vs 3-tier?

    Could anyone explain what is 2-tier and 3-tier for Rich Client?
    Thank you

    When you login 3-tier will show a web app (j2ee or .net) in the system information, as it must connect to the connection server through the web/app. It will use the XI 3.x servers middleware connection for refreshing report data.
    If you launch it from infoview a file will be created on your local computer called something.extranet and this file will contain the web/app connection information for connecting.
    When using 2 tier connections will be made from the local computer, this requires middle ware to be set up on the workstation(s). Performance will be faster in 2-tier as a benefit. When using 2-tier only a CMS or clustername will be entered in the system.
    Regards,
    Tim

  • WIS 10901 error while refreshing report in rich client

    I'm facing a strange issue while refreshing a report from Rich client. Here are details
    Environment: BO XI 3.1 SP3, Oracle application DB. Weu2019ve 2 BO servers (S1 and S2) on cluster and load balancer (common URL) in front.
    While login to S1 with 6400 port, I can refresh report in rich client.
    While login to S2 on 6400 port or using common url, during refresh gives below error u2013
    u201CA database error occurred. Database error text is: (CS) u201CDBDriver failed to load: C:\Program Files\.....\dbd_oci.dllu201D (The specified procedure canu2019t be found) (WIS 10901)u201D
    Iu2019ve installed oracle8i client on my system. Any idea what causing this issue?

    Yes. Oracle 10g client installed on both application server. I've teste the universe connection from server, it's working fine.
    Any idea what could be probable causes of "DBDriver failed to load: C:\Program Files\.....\dbd_oci.dllu201D error?
    One observation, the path of dbd_oci.dll is the BO installation directory of my local machine (on server BO is not installed on C drive). Why it's referring dbd_oci.dll from local client even in 3 tier mode?

  • [Windows 8.1 Desktop/Surface/Phone] connect client app to synchronization service(s)

    Hello Everybody!
    I have to do some research about:  what is the best way to set up my project, I am new to Azure.
    Situation:
    I need to develop a service(s) and client app(s) that are able to synchronize data with each other: files and database changes. the client app(s) must have the capability  to work online / offline,  offline: when there is no internet connection
    the data has to be stored local on the client device(s) and sync it later when there is active internet connection.
    Client Devices:
    Windows 8.1 (Windows 8.1 PC/Desktop)             
    Windows 8.1 RT (Windows 8.1 Surface tablet)
    Windows Phone 8.1 (Windows 8.1 Smart-phone)
    We prefer to create the clients as a C# Store App Application.
    Service:
    This might become , if technically possible and preferable, a Azure service who main task it is to manage the communication between the server and the clients
    Last days I spend my time doing research about how to get this done right.
    I found several interesting techniques, some of got all the features I needed, and some just a few, but most of them aren't supported on one or more devices.
    Microsoft Synchronization Framework
      Sync Toolkit WinRT / Phone
     Live SDK
    Microsoft Synchronization Framework - got all the features I need but is not supported on Win RT and Phone
    Sync Toolkit WinRT / Phone - Only Database Sync, is got bad documentation and unknown if supported on Desktop
    Live SDK - Libraries to integrate with OneDrive, Only File Sync
    Questions:
    Does Azure support all the devices?
    Is Azure supported in  C# Windows 8.1 Store Apps?
    Is Azure suited to host a service I described?
    Thanks in advanced!

    Hi JelteV,
    Thanks for posting!
    Base on my experience, if you wan to synchronize data with each clients. I suggest you could refer to this solution:
    1.Create a Sql Azure Database or storage account for storing your data 
    2.Create a WCF service (web role or work role ) for communication between Client and Database
    3.Set Up Table Structure (Important). I suggest you could add the deviceID and userID to distinguish the different data source. And add fields such as 'status', 'create time', 'latest update time' and so on.
    For example, you client insert a record into local database and set the 'status' as ‘stay update’ or '1'. When your client connect the database and synchronize the data to server, you could set the 'status' as 'updating' or '2' . After
    synchronization  data, you could change the status as 'updated' or '3'.
    According to this idea, the client CRUD -> change the local state code
    -> Sync data -> change the local state code ->
    synchronization is complete -> change the local state code .If the mobile device need operate the data on the service , it also need to change the server status code to be updated, to be deleted (deleted should
    be treated differently), the next time the client login server automatically checks the "state" as "pending action" and then synchronize the server to the client. So whether it is operating on a local table, or on the side of the direct
    operation of the service, you can ensure that the data is synchronized two tables.
    >>Does Azure support all the devices?
    >>Is Azure supported in  C# Windows 8.1 Store Apps?
    >>Is Azure suited to host a service I described?
    From your question, I think you could create a WCF service host on azure, and call WCF service form different devices. And this method is supported the different device and win8.1 store app.
    Also, please see this thread:
    http://stackoverflow.com/questions/14595738/net-data-synchronization-between-multiple-clients-and-a-central-server
    Hope this helps.
    Regards,
    Will
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Connection error in Webi Rich Client Bobj 4.1 sp1

    Hello Experts,
    I am getting an error while connecting Bobj server(4.1 sp2) through Webi rich client (4.1 Sp1).
    When i am trying to connect to CMC, i am able to connect it.
    Please help on this.
    Thanks in Advance
    Bhasin

    Hello Bhasin,
    I have few questions ans steps for you.
    1. Are you able to login into any other BO client tool?
    2. Do you have multiple Network Cards [NICs] on BO Server box?
    If YES, we need to prioritize it as below. Once donw bind primary IP with CMS. as mentioned below.
    Change Network Binding Order:
    Click Start, click Network, click Network and Sharing Center, and then click Change Adapter Settings.
    Press the ALT key, click Advanced, and then click Advanced Settings. If you are prompted for an administrator password or confirmation, type the password or provide confirmation.
    Click the Adapters and Bindings tab, and then, under Connections, click the connection you want to modify.
    Under Bindings for <connection name>, select the protocol that you want to move up or down in the list, click the up or down arrow button, and then click OK.
    Bind Primary IP with CMS:
    Log onto Central Management Console (CMC).
    Open Central Management Server (CMS) properties page, under
    Host Identifiers: change from Auto assign to IP Address
    Then input CMS server local IP address beside (IPv4).
    Do this for each CMS.
    Restart the CMS.
    Good Luck
    Regards,
    Mahesh

  • VIP (Virtual IP) on a cluster env  for BOBJ 3.1 and rich client

    All,
    I am in 3.1 where I have an installation with 1 cluster and 2 app server machine behind.
    in order to load balance between the 2 app server I am using some VIP address using some sticky session.
    It works perferctly when i am logging to it thru the infoview However we would like to try the same when trying to login from the rich client.
    is it possible ?
    thanks in advance
    Philippe

    If using WRC in 2-tier then it connects to the CMS and directly to the reporting DB (any DB middleware is configured on the client) so the load balancer doesn't even come into play in this scenario. The WRC can be downloaded from infoview or installed by CD.
    If using WRC in 3-tier (globe shown in the system). Then it should work fine. 3-tier will need an extranet file which contains connection info so it can use the web/app to forward requests using the servers middleware. The connection server needs to be running to connect to the reporting DB.
    To connect in 3-tier verify that you don't have any extranet files in my documents\my business objects documents\locdata on the WRC client. Then open infoview using the URL of your load balancer, and set your webi preferences to use WRC. Select new webi doc (this should create a new extranet file at the above location using the loadbalanced URL. Also needed for this to work are WRC installed (you should be prompted if not) and the connection server running and enabled in the CMC > servers.
    Also see [this doc|http://help.sap.com/businessobject/product_guides/boexir31/en/xi3-1_web_intelligence_rich_client_en.pdf]
    Regards,
    Tim

  • Rich Client advice

    Hi all,
    Been searching the archives.
    I've developed a Swing standalone app and would like to convert it into a "Rick Client" but shifting certain parts over to a backend. My initial work has been a servlet on Tomcat webserver I maintain.
    Can anyone point me to any up-to-date examples or Rich Client development?
    Is the use of http requests/responses the standard way to do this or are there non-servlet examples?
    There seem to be so many frameworks for this (Eclipse RC, Spring RC etc.)
    Many thanks.

    Thanks for the pointer. I will look at the tutorials.
    I guess what I really want to know is what do people use as the most "vanilla"/non-framework communication between a Rich Client and a backend server.
    Do the back ends tend to be servlets/JSPs or WebServices or what?
    Thanks again.
    Chris

  • Whats the difference between Rich Client and Desktop Client? (BO XI 3.2)

    Hello,
    maybe someone has a matrix oder something like that?
    Thanks for helping...
    Biegel

    There are a number of reasons for using Web Intelligence Rich Client to
    work with WID documents:
    u2022 You want to work with Web Intelligence documents but you are unable
    to connect to a CMS (while traveling, for example).
    u2022 You want to improve calculation performance: Web Intelligence Rich
    Client performs calculations locally, rather than on the server, and local
    calculations can perform better than server calculations.
    u2022 You want to work with Web Intelligence documents without installing a
    CMS or application server.
    Deski
    1. VB Macro
    2. Slice and Dice functionality
    3. Database Ranking is not there
    4. Column can be conditionally hidden
    5. Free-hand sql, SP can be used as data providers
    6. No time out error.
    7. Needs to be installed on all the desktop machines
    Gracias...!!

  • Protocol Router for Rich Client Front Controller

    Hello,
    I would like to support multiple client types in my J2EE application - Web Client and Rich Client (Swing Application).
    Java BluePrints (Designing Enterprise Applications
    with the J2EETM Platform, Second Edition) suggests using a Protocol Router for centralized control in case of supporting multiple client types with multiple controllers - http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html.
    I have several doubts with this approach and will appreciate very much any help with clarifying the following:
    1) How does a Rich Client communicate to Protocol Router? Using HTTP? That means then that each request/response has to be wrapped in HTTP Request/Response object. It may impact the performance and make the communication between Rich Client and back-end slower.
    2) If rich client communicates with Protocol Router through HTTP, what is the difference between Fron Controller for Web Client and for Rich Client?
    3) The J2EE Tutorial on the other hand, shows direct connection from Application (Rich) Client to EJB layer - http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Ebank.html.
    It will be greatly appreciated to know how would you address the above doubts.
    Best Regards.

    1) How does a Rich Client communicate to Protocol
    Router? Using HTTP? Yes, HTTP . You are right about performance issues. That protocol router seems to me like like overengineering. Anyway, I think a WEB service could be better choice. It's a standart way how to wrap remote requests in HTTP.
    2) If rich client communicates with Protocol Router
    through HTTP, what is the difference between Fron
    Controller for Web Client and for Rich Client?I think the difference is in types of requests. WEB client would request
    WEB pages, SWING client doesnt need WEB pages. It would request contents
    of list boxes and things like that.
    I would suggest you to use EJB's with session facade pattern. Provide WEB service style access to your app. Many app. servers provide feature to expose SLSB as WEB services. Thus you will support almost any types of clients (.NET, Perl, whatever). You can also use WEB service to connect from you'r SWING client. If later you are not satisfied with performance, you can switch to RMI. If you use BusinessDelegate pattern then you will need to change BusinessDelegate only, just one class.
    I have written an example EJB based app. which can be accessed by SWING client using RMI or SOAP, WEB client, .NET client and CORBA.
    You can get it from:
    http://www.datapro.lv/~mariso/ejb.html
    feel free to ask questions, if you have any
    Maris Orbidans

  • Looking up JMS administered objects in a rich client

    We have JMQ running as a broker. Using 'jmqjmsadm.sh' we added a Topic and a
    TopicConnectionFactory, using
    ../jmqjmsadm.sh t theLogTopic logTopic
    ../jmqjmsadm.sh tf providerTopicFactory TopicConnectionFactory
    and also set up the proxy using
    ../jmspadm theTopicFactory providerTopicFactory
    Everything seemed to work, and all three objects show up under
    SOFTWARE\iPlanet\Application Server\6.0\JMSObjects in kregedit. This is
    depicted in the attached JPG.
    We also have an application client running in the ACC, and this client needs
    to access these JMS objects. My understanding is that iPlanet does NOT
    support resource references for JMS, so even though this is a rich client my
    subsequent expectation is that we would access the connection factory using
    TopicConnectionFactory conFactory = (TopicConnectionFactory) jndi.lookup(
    "java:comp/env/jms/providerTopicFactory" );
    This does not work, unfortunately, resulting in a
    javax.naming.NameNotFoundException, on the lookup on
    "jms/providerTopicFactory". I have, however, also tried looking up
    "java:comp/env/providerTopicFactory", and
    "java:comp/env/jms/TopicConnectionFactory", and none of them are successful.
    I might add thgat an earlier JNDI lookup on an env-entry is successful, so
    the CosNaming is set up OK, as near as I can tell.
    The app client is definitely running in the ACC; it is not a standalone.
    This seems to be a combination (JMS plus rich client running in the ACC)
    that is poorly documented. I am wondering if anyone has any suggestions.
    TIA.
    Regards,
    Arved Sandstrom
    [Attachment jmsobjects.jpg, see below]

    Hi Arved,
    Can you try to set the initial context factory using:
    Properties prop = System.getProperties();
    prop.put("java.naming.factory.initial","com.netscape.server.jms.RefFSContextFactory");
    prop.put("java.naming.provider.url","/");
    and then do a lookup using:
    ctx.lookup("jms/providerTopicFactory");
    Regards,
    Durga
    Arved Sandstrom wrote:
    We have JMQ running as a broker. Using 'jmqjmsadm.sh' we added a Topic and a
    TopicConnectionFactory, using
    ./jmqjmsadm.sh t theLogTopic logTopic
    ./jmqjmsadm.sh tf providerTopicFactory TopicConnectionFactory
    and also set up the proxy using
    ./jmspadm theTopicFactory providerTopicFactory
    Everything seemed to work, and all three objects show up under
    SOFTWARE\iPlanet\Application Server\6.0\JMSObjects in kregedit. This is
    depicted in the attached JPG.
    We also have an application client running in the ACC, and this client needs
    to access these JMS objects. My understanding is that iPlanet does NOT
    support resource references for JMS, so even though this is a rich client my
    subsequent expectation is that we would access the connection factory using
    TopicConnectionFactory conFactory = (TopicConnectionFactory) jndi.lookup(
    "java:comp/env/jms/providerTopicFactory" );
    This does not work, unfortunately, resulting in a
    javax.naming.NameNotFoundException, on the lookup on
    "jms/providerTopicFactory". I have, however, also tried looking up
    "java:comp/env/providerTopicFactory", and
    "java:comp/env/jms/TopicConnectionFactory", and none of them are successful.
    I might add thgat an earlier JNDI lookup on an env-entry is successful, so
    the CosNaming is set up OK, as near as I can tell.
    The app client is definitely running in the ACC; it is not a standalone.
    This seems to be a combination (JMS plus rich client running in the ACC)
    that is poorly documented. I am wondering if anyone has any suggestions.
    TIA.
    Regards,
    Arved Sandstrom
    [Image]--
    Durgaprasad Swaminathan
    iPlanet E-Commerce Solutions, A Sun-Netscape Alliance
    +65 - 337 3658 (DID)
    +65 - 337 4688 (Fax)

  • Where doi we store the History in rich client  3.1 ?

    All,
    When I login to rich client 3.1, I can see the list of all the reports, I would like to know if we do store this history somewhere and if I can clear it out.
    Thanks in advance for your help
    Philippe

    The local copy is stored @ with wid extension.
    C:\Documents and Settings\satyanarayan.sangem\My Documents\My Business Objects Documents\userDocs
    If you delete all these files you are at the risk of loosing your local copy. It is suggested that If you export these to repository first and do this activity.
    Regards
    Satya

  • Best practice: Developing report in Rich Client or InfoView?

    Hi Experts,
    I have a question on the best practice of developing webi reports.
    From what I know, a Webi report can be created in Rich Client and then exported to one or more folders. From InfoView, the report can also be changed, but the change is only local to the folder.
    To simplify development and maintenance, I believe both creation and change should be done solely in either Rich Client or InfoView. However, some features are only available in InfoView, not in Rich Client. One example is hyperlink for another Webi report. As a second step, I can add the extra features in InfoView after the export. However, if I change the report in Rich Client and re-export it, the extra features added via InfoView (e.g. report hyperlink) will be overwritten.
    As I'm new to BO, may I have some recommendations on the best practice for building reports? For instance:
    1) Only in Rich Client - no adding of feature via InfoView
    2) First in Rich Client, then in InfoView - extra features need to be added again after each export
    3) Only in InfoView -  all activities done in InfoView, no development in Rich Client
    4) Others?
    Any advice is much appreciated.
    Linda
    Edited by: Linda on May 26, 2009 4:28 AM

    Hi Ramaks, George and other experts,
    Thanks a lot for your replies.
    For my client, the developers will build most of the reports for regular users to view. However, some power users may also create their own reports to meet ad-hoc reporting requirements.
    It's quite unlikely for my client to develop reports based on Excel or CSV data files. And we need to use features such as hyperlink for documents (which is not available in Rich Client). Based on these considerations, I'm thinking of doing all development in InfoView (both developers and power users). Do you foresee any issue if I go for this approach?
    Thanks in advance.
    Linda

  • Bank row was added in webi rich client when using excel as data provider

    reproduding steps:
    1.open webi rich client.
    2.Create a new webi report,then select "local data source"
    3.select an excel file as data source.
    4.run query.
    For example,there are 5rows in excel,but in webi report there are 6 rows,and the last row is bank which is added by webi.
    question
    1. mcro has been defined in the excel file,is there any impact by using macro?
    2.I want to know why this happens,

    >could you please test the following solution if you have multiple data providers in the report.
    >We need to manually link the dimensions then in the resulting crosstab/table we are need to apply >filters and select only the values but not the #empty values.
    I have only one data provider in the report.
    And, I have do the following test,
    test1:Delete the last row which is blank row of the excel file,refresh webi report, the last blank row is still there.
    test2: press ALT+F8,delete marco in the excel file,refresh webi report, the last blank row is still there,then delete the last blank row in the excel file ,save excel file,refresh webi,the last blank row is disappear.

  • Webi Timeout (Launchpad or Rich Client)

    Dear experts,
    I am not being able to increase timeout. I am on SBOP 4.0 SP8.1.
    I followed all the guidelines from
    http://help.sap.com/businessobject/product_guides/boexir4/en/xi4sp8_aa_admin_en.pdf
    and
    http://vynesolutions.wordpress.com/2013/04/19/configuring-business-objects-4-0-session-timeout-settings/
    restarted BO servers / Tomcat.
    Nothing changed. It still gives me a 20 minutes timeout instead of hte desired 45 minutes.
    Thanks in advance for your help,
    Kind regards,
    André Oliveira

    Hi Kishore,
    Infoview does not support any local data source for creating the report. Also refresh from personal local data providers is currently supported with WebI Rich Client and Desk-I.
    You need to create an universe on the spread sheet for getting the report to refresh in the infoview.
    Also if you search, you will find a lot of threads are running on the same topic.
    Regards,
    Rohit

Maybe you are looking for