donderdag 2 januari 2014

ADF BC: Find out what is really happening in the database

Problem

While there are multiple ways (see previous blog) within ADF BC to see what is being generated and executed in the database, perhaps you are not satisfied with the information provided nor the overhead of the other loggings which are blocking your clear view on the matter.
Or perhaps you are missing information like how many times a query is executed, how long it took, how many fetches were used, ... 

Solution

Use the logging of the database to find the required information.  You can enable your sessions or even the entire database to activate logging that can be used to give you a clear overview on what is being asked from the database.
To activate this logging you need to perform the following actions:
  1. Activate the logging in your session
    Execute the following statement : alter session set sql_trace=true
    You can execute this command in your application module impl class by overriding the afterConnect() method.  I'm also using this method to set some optimizer hints for my queries, like optimizer_index_cost_adj and optimizer_index_caching.
    Example:
    • @Override
      protected void afterConnect() {
         super.afterConnect();
         executeCommand("alter session set sql_trace=true");
      }
  2. Perform the necessary actions in your application for which you want to have the trace.
  3. You can now stop the trace by executing the following statement: alter session set sql_trace=false
    or just perform action 4.
  4. At this point the database will have generated a very detailed, not easy to read and understand trace file.  This file can be found under the user dump directory, which is defined by the database parameter user_dump_dest (show parameter user). 
  5. Now we need to parse this file to a more readable file by executing the following statement:
    tkprof <sid>_ora_<pidid>.trc <result_file> sort=fchela
    Since it is very hard to know what process id you need, I just always took the last one :-)
    I added the sorting criteria to see the statements first with the biggest elapsed time.  Information on all parameters for tkprof can be found here.
    Example : tkprof orcl_ora_2463.trc test.txt sort=fchela 
  6. Now you have a file that is readable, namely test.txt.  This file will give an overview of all statements being executed by your sessions and at the end an overview.  Let's have a look at output for 1 statement.
  7. Only take the statements into account where the parsing user is not SYS.  The latter is used for database internal queries and do not adhere to the same tuning rules as your custom queries.
Here is an example output for a very simple query:
Let's have a look at the important bits of information:
  • As 3th part of information you see the query like it has been asked at the db.  Here you see whether correct bind variables are used.  The only drawback of this technique is that this query is not linked directly to a certain view object.  It is up to you to determine which view object has generated this query.
  • The count column of the Parse row, should be 1 or as low as possible.  This indicates how many times the db needed to parse this particular statement.  If you are not using bind variables, you will see that for each value a new statement overview is given and that the parse count will still be 1.
  • The count column of the Execute row, should represent the number of times this query should be executed.  If you would have expected a lower number then the one appearing here, then BC has executed this query more often.  To solve this problem, you will need to look at the page definition files to determine when and how often the query is executed or even in your custom code when you asked to execute query on an iterator.
  • Normally the cpu time of the execute row, should be very low.  If this is not the case, then it indicates that the query itself is very complex and has a lot of hierarchies of tables.  Or it could be because it is a DML-statement.
  • Now comes the most important row, the Fetch-row.  The fetch count number indicates how many times the application has fetched rows for this query.  If the execute count is 1 and the fetch count is 10, this means that ADF BC has executed the query once, but needed to go 10 times to the db to get all data.  To resolve this problem, just change the 'in Batches of'-tuning parameter of your view object.  Look at the following blog for some tuning guides.
These were for me the most important pieces of information to be able to tune my ADF application.

Have Fun.

F

ADF BC: Adapting the where-clause of a view criteria

Problem

You have build a working ADF BC application.  After some tuning tests, it seems that your application can use some tuning.  So you, or someone above you, decides to call an expert DBA or SQL tuning specialist.

Result : you need to change the way the where-clauses are created.
If you are lucky, it is just a where-clause you have written.
If you are less lucky, it is a where-clause created by a view criteria, in this case you can not change it.  You can only activate or deactivate some properties.

In our case this wasn't enough.  The ADF BC framework generated clauses like
UPPER(LAST_NAME) LIKE UPPER(:LastName_bvar || '%')


Solution

The first thing you need to do is to remove the upper-statement.  This can easily been done by deselecting the 'Ignore Case' property in the edit view criteria screen.

So now you are getting the following clause
LAST_NAME LIKE (:LastName_bvar || '%')

While this seems fine for you, your tuning specialist still isn't happy.  He wants to get rid of the wildcard.

To accomplish this requirement you will need to get more creative.
Add the following code to your ViewImpl class or your base ViewImpl class:
    /**
     * Source : http://tompeez.wordpress.com/2011/08/21/extending-viewcriteria-to-use-sql-contains-4/
     * Adapting the creation of the where-clause to remove the '%' after the bind variables of the like statements
     * At the same time we add the '%' wildcart at the end of the variable value.
     * We will do this for all bind variables with custom property LIKE_CLAUSE=CUSTOM
     * This method gets called for all bind variables
     * @param viewCriteriaItem
     * @return
     * @author Filip Huysmans
     */
    @Override
    public String getCriteriaItemClause(ViewCriteriaItem viewCriteriaItem) {
        ArrayList<ViewCriteriaItemValue> lArrayList = viewCriteriaItem.getValues();
        if (lArrayList != null) {
            ViewCriteriaItemValue itemValue = (ViewCriteriaItemValue)lArrayList.get(0);
            if (itemValue.getIsBindVar()) {
                Variable lBindVariable = itemValue.getBindVariable();
                // check for the special LIKE_CLAUSE in the used bind variable
                Object obj2 = lBindVariable.getProperty("LIKE_CLAUSE");
                String likeClause = (obj2 != null ? obj2.toString() : "null");
                if (likeClause != null && !likeClause.isEmpty() &&
                    !"null".equals(likeClause)) {
                    if (viewCriteriaItem.getViewCriteria().getRootViewCriteria().isCriteriaForQuery()) {
                        // normal query execution
                        return getLikeClauseForDatabaseUse(viewCriteriaItem,
                                                           likeClause);
                    } else {
                        // for in memory we don't need to anything so just return '1=1'
                        return "1=1";
                    }
                } else {
                    // no special treatment for all other CriteriaItems
                    return super.getCriteriaItemClause(viewCriteriaItem);
                }
            }
        }
        // fallback call
        return super.getCriteriaItemClause(viewCriteriaItem);
    }
 
    protected String getLikeClauseForDatabaseUse(ViewCriteriaItem aVCI,
                                                 String typeLikeClause) {
        ArrayList<ViewCriteriaItemValue> lArrayList = aVCI.getValues();
        ViewCriteriaItemValue itemValue = (ViewCriteriaItemValue)lArrayList.get(0);
        String whereClause = "1=1";
        if (itemValue.getIsBindVar()) {
            Variable lBindVariable = itemValue.getBindVariable();
            Object objVarVal = ensureVariableManager().getVariableValue(lBindVariable.getName());
            String varVal = null;
            if (objVarVal != null) {
                // Adding the wildcard to the bind variable and putting the bind variable in upper-case
                varVal = (objVarVal.toString().toUpperCase() + "%");
                ensureVariableManager().setVariableValue(lBindVariable,
                                                         varVal);
            } else {
                // No value specified => return no where clause
                return null;
            }
 
            String bindVarName = lBindVariable.getName();
            if ("UPPER".equals(typeLikeClause))
                whereClause =
                        "UPPER(" + aVCI.getColumnName() + ") like :" + bindVarName +
                        " ";
            if ("CUSTOM".equals(typeLikeClause))
                whereClause =
                        aVCI.getColumnName() + " like :" + bindVarName + " ";
        }
        return whereClause;
    }
As mentioned in the java doc of this code block, you need to add a custom property to the bind variables for which you want this to take effect. Add a custom property with the name 'LIKE_CLAUSE' and a value of 'UPPER' or 'CUSTOM'.

From this situation you can add any functionality you want to make the where-clause exact what your tuning specialist is looking for.

Have Fun.

F

maandag 16 december 2013

ADF: annoying warnings

Fact

In the logging of your application server, you see often the following warning :

<SimpleSelectOneRenderer><_getSelectedIndex> Could not find selected item matching value "0" in RichSelectOneChoice[UIXEditableFacesBeanImpl, id=value70]

Problem

You are probably using a component which generates fields dynamically, like the query-component.  If you have defined a LOV for one of the fields this component needs to show and you have specified that it needs a "No Selection" item in the UI Hints of the LOV, then this warning will popup.

The warning you are getting is just saying that he tries to map a selected value "0" to the list he recieves, in which case he did not find it.  The id is pointing to the field in the query component in this case.  The fields are numberd from value00, value10, value20 to valueXX.

Solution

The solution is to remove the selection of the "No Selection"-item, but this will probably add another problem to your list.  To solve this problem you can do the following depending on the type of the view-component of your LOV.

  • View based on static values.
    In this case just add an empty row and put it on top.  The order for these kind of views is determined by the order in the list.

  • View based on a query.
    In this case just add an union-clause and add an empty row through the dual-table.  Also add an order by-clause to put the null-row first.

donderdag 3 oktober 2013

Simple tuning principles for ADF

Hello everyone,

Most of the time when people are talking about tuning, it starts to get quickly quite ugly technical.
I had the opportunity to do some tuning for a customer myself, I didn't pushed the pedal to the metal, but found some simple rules I could follow.


  • BC View Tuning
    • as-needed = iterator range size
    • fetch size batches = rows displayed + 1
    • max fetch size = -1
  • AM
    • jbo.ampool.initpoolsize=10% more then concurrent users
    • jbo.recycletreshold = nbr concurrent users
    • jbo.ampool.monitorsleepinterval= 14400000 = 4uur
    • jbo.dofailover=true
    • jbo.locking.mode=optimistic
    • jbo.doconnectionpooling=false
  • Pagedefinition
    • Iterator Rangesize = number of rows displayed
    • Iterator RowCountTreshold = -1
  • Taskflows
    • activation = defer
Everything else is common sense :-).

Hopes this gets you started.

F

Unconventional Overview of OOW13

Hello everyone,

Due to the huge amount of readers of my last year’s blogs on OOW, I restrict myself this year to the overall conclusion I made on OOW13.
The idea’s and opinions expressed in this blog are my own.  So if you want copy or use them, please send a donation to charity ☺.

@https://www.facebook.com/OracleOpenWorld
As aspected this year's Oracle Open World focused on Cloud, Big Data, Social, Customer Experience, M2M(IoT) and Mobile.
No surprises here, until you look further.  Until you start looking further then the sessions being given, further then buzzwords, even further then keynote speeches.

First major change, it is not about mobile, it is about mobile-first.  No longer the desktop browser is king in the land of the developer, according to Oracle, but the mobile devices are.  They control the development of frameworks, architectures and solutions.   They define how application will be made in the future and how they will look like.
We came from a couple of years of developing desktop web browser applications and making the mobile brothers alike for them, to making mobile applications and given their big brother applications the look&feel they need.
While this seems a small shift, it will totally change your view on application development.
Does this mean you need to throw all your current projects away and start over again, no.
Remember that it is Oracle's vision that is presented at Open World, giving you a year or two to react upon.

Another change is in the Cloud proposal, but this change we all expected: more, bigger and more social. The solutions presented covering the cloud offering of Oracle, were numerous.  I was impressed in the total package of Oracle, extra features on the existing offerings, new offerings in the IAAS, PAAS and SAAS area. While I'm not an Oracle applications guy, the list of offerings in the SAAS area overwhelmed me. Off course, their SAAS-cloud offering doesn't cover all the functionalities delivered by their mature sisters like PeopleSoft, Siebel, EBusiness Suite or JD Edwards.  Nor is that the purpose.  How many times did you hear that the cloud would change the way you do business?
When there wouldn't be any difference between those solutions, where would the change in doing business be?
But this isn't change this is evolution. The change lies in opening of their cloud offering.
How do you open a cloud offering you might ask?  It is not only Oracle's cloud that gives you your favorite products at your fingertips, also Microsoft's Azure-cloud solution will enable you to run your business in the cloud on Oracle software.
Who said that Oracle isn't a cloud company?
Small remark on the side: MS was putting a lot of focus on the fact that you could run the Oracle database, WebLogic Server and Java in their cloud.  While the first two make sense, the last one is a bit strange. Since it's slogan is "Develop once, run anywhere".

Finally, big data or should I say smart data. While last year big data was al about capturing, this year it is all about integrating and delivering solutions for the business.  The examples given during such a conference are breath taking.
Coming from a very small country myself, I was wondering what could mean big/smart data for the Belgium market. And in essence it is not about the absolute size of data that need to be handled, but the relative portion of that data that resides above the normal expected working parameters of your business. Since Oracle always looks at the big players in all market segments, the hardware solutions they put forward are equally big. So it is far more opportune to not look at the hardware side of things, but the architecture side of it.  Perhaps your business doesn't need the power of treating billions of rows of data a day, but it might well be that it is interested in the same insights.
Insights into your business, insights into your way of working, insights into your customers, insights into the business of your customers and perhaps the most business interruptive power of them all: social media.
Big/smart data is not about data; it is about thinking differently about building solutions based on data. Now it all comes together, network, hardware, software, maturity and social allowing for a new final frontier of analytics.

@https://www.facebook.com/OracleOpenWorld
Let’s not forget the new kid on the block, M2M.  It is hardly new; it was already presented the year before, but then only on JavaOne. While you need to go to J1 for the dirty technical details about it, you can now join OOW for the business side of things.  What M2M appeals to me is that it, like big data, let’s you rethink solutions for the business.  Now it is a lot easier to not only build a solution based on software, but also include a hardware portion.  We are not confined anymore to expense and unique in the market devices, probably vendor locked-in also, but we get now this breath taken possibilities of cheap and commodity hardware that we can shape to our needs.  The fact that this topic got his own keynote means that Oracle thinks that their customers are ready to embrace this technology, which probably result in a boost of projects being started.

@https://www.facebook.com/OracleOpenWorld
If you think I covered all the major topics by now, cloud/mobile/big data/m2m/social, you are in for a surprise.
At last year's conference, we had a couple of talks about the way Oracle tries to deliver applications that are end-user friendly.  They even had planned a short trip to HQ, to convince us about the effort they put into it.
Who could ever thought, that this topic would be the biggest one of them all the year after? I'm not counting the number of sessions nor the seats in the rooms of those sessions; instead I'm looking at impact of it on all previously discussed topics.
"Customer Experience", it seems so easy and logical. It is the reason why there are so many conventions around the world. It is the reason why companies invest in development, marketing and sales.  Frankly, it is probably the outcome of customer experience that drives companies or better-put "people".
Once you start talking about customer experience, you are dealing with a totally different set of KPI’s.  It is no longer about bits and bytes, no longer about how fast and well we can treat information, it is not about how much money we put into IT, what the hell it is not about IT.
It is about ... you, the customer, partner, employee and family and how we can make our business more suited for you.
Finally, once a department starts thinking about the service it can deliver, instead of the great wonderful technical things they can do, that's the day that it becomes the corner stone of a company.


Here are a few examples to illustrate the power of it.

@http://kentgraziano.com/
  • I already tweeted about it, so I'll start with the event itself. Not only was the event bigger in size, it was also bigger in the overall experience for the visitor. For me it is not so much about the big, too cold air-conditioned session rooms (they were there last year also ☺), it is about the fact that the company Oracle is more then just a supplier of hard- and software, it delivers now also entertainment, passion and vision outside of the IT-landscape.

    Walking around on the Oracle plaza, which was on Howard Street (between North and South Moscone), gave you a sense of the power of Oracle in the Bay area. This year there was no closed tent hiding Howard Street. This year it was an open, inviting and socially appealing place to linger. Coming out of a keynote, hearing fantastic music, feeling the sun warming your body and only seeing smiling people, pushes you into the only possible conclusion: Life @/with Oracle is great.  On top of that, add the suspense of the America's Cup, and you know there is more to live then IT even @Oracle.

    Short remark on the side concerning Larry Ellison ditching his cloud keynote in favor of the boat race, so what?  Larry has the fortune to have now 2 boats (metaphorically speaking). One is a very big one, with still a lot of potential but more importantly 5 great captains. This boat is not ready, nor willing, to lose. It has a great history of good and bad moments, but always came out strong. The other one is fairly new, has only 1 captain and a smaller crew. It has equally great potential, but still need guidance, hence their victory in the America's Cup.Larry didn't stand up 60.000 people, there would never be 60.000 people looking at the keynote. So many of them were also looking at the boat race or having lunch with customers or partners. Isn't it great to see that the team behind Larry is capable of standing by their captain?
  • Another example is the testimony of Lego. What a great inside into their company's marketing vision. How else can you do a campaign for 100$? Admitting that Lego already had a good brand name, so it can more easily make use of crowd sourcing, but nevertheless a good example how small and simple things can bring great results (trying to avoid saying big here).
    It is all about finding the social needs of your customers and using that to open new worlds for them and yourself.

  • Now for the last example, a more of a personal note. First a warning: all characters appearing in this story are fictitious. Any resemblance to real persons, living or dead, is purely coincidental.

    So I was wondering around finding my way to Moscone North for the keynote of JavaOne. Assuming a lot of people would take the direct route through the Moscone North entry, I took my changes via Moscone South. As a few of you know, there is a direct passage from South to North. Still standing in South and looking on to the passage of North, I see a sea of people waiting to go to the keynote. So a bit uneasy I put myself back in line ready for a long period of queuing.  Still not sure I'm really in the right lane, I ask a person next to me whether this is really the queue for the keynote.
    Naturally she could answer, "Off course, what else would all those people be queuing for?" and probably thinking "Again a foreigner, probably from a small country like Belgium where they've never seen such an interest in a keynote".
    Strangely enough she didn't, instead she said, "Yes, it is". A bit surprised by the calmness of her answer and given my capability of not stopping speaking, I asked a couple of more questions. Strangely enough, she didn't figure out that I was a foreigner right away and so she kept on answering my curiosity. Suddenly the roles got inverted. She was now starting to ask questions and I was more then willing to reply. After 10 minutes going back and forth like this, something changed.  We stopped with asking and started telling stories about things that happened or would be happening in the near future. We watched the keynote together and gave our very personal opinion on every topic. More often then not, we were thinking in the same direction. After the keynote, we exchanged numbers and fought our way through JavaOne for her and Open World for me.

    Now what has this to do with customer experience? Well read the story again and replace "me" with yourself, "she" with your partner, customer and the "keynote" with social media. Now tell me, is this not how you make the first contact with new customers/partners?


The final thoughts I want you to take with you are that all the fancy buzzwords like cloud, mobile, big data should be enablers for your business and not a goal in itself. When looking beyond IT and seeing the bigger picture, will allow you to do bigger and longer projects that stand the test of time and will be better appreciated and used by the business.

Hoped you enjoyed the reading.

F

dinsdag 28 mei 2013

ADF BC: JBO-25014: Another user has changed the row with primary key

Challenge

You receive the error mentioned in the title, but you are quite sure this is not the case and nothing has changed in the database due to triggers or pl/sql-code.

Context

Jdeveloper: 11gR1

Solution

There are already quite a few blogs on this error within ADF.  They all talk about the fact that something has changed in the database, without BC knowing about it.  This can be done through another user, a batch-script, a trigger or any other pl/sql-code.
But what if you are 100% sure this is not the case, then read on.

There is also another reason why this happen: the comparison of the different attributes didn't go well.  Although the documentation clearly state that the oracle.jbo.domain-classes should solve this issue, we still have found ourselves multiple times in this situation and mostly due to Date-attributes.
There are 2 ways to handle this:
  1. You can identify an attribute in your entity as a “Change Indicator”.  Once you have identified such an attribute in your entity, the BC-code will no longer compare all attributes, instead it will only compare those with the “Change Indicator” activated.

    To set this indicator on an attribute, just open the editor of the attribute to see the “Change Indicator” property.
  2. You can remove the attribute that is causing the problem from the comparison.  This is easier said than done, because you need to know which attribute is causing the problem.

    To find this out, just activate the JBO-diagnostic logging, you can do this by adding the following “-Djbo.debugoutput=console” to the Java-options of your run-configuration.
    Now run the application again and simulate the problem.  You should find something like this:
    <EntityImpl><compare> [508] Entity compare failed for attribute HireDate
    <EntityImpl><compare> [509] Original value :19-06-1987
    <EntityImpl><compare> [510] Target value :19-06-1987
    
    Now you know it is the HireDate-Attribute.  Now add the following code to the Impl-class of your entity:
    @Override
    protected boolean compare(SparseArray sparseArray) {
       // Removing the HIREDATE attribute from the array
       if (sparseArray != null && !sparseArray.isEmpty()) {
           for (int i=0; i<sparseArray.length(); i++) {
               Object value = sparseArray.get(i);
               if (value != null) {
                   if (i == HIREDATE) sparseArray.clear(i);
               }
           }
       }
       // Calling the standard compare method
       return super.compare(sparseArray);
    }
    
    You can do this for as many attributes as you need, just add them to the 3th if-statement.

dinsdag 7 mei 2013

JDeveloper 11.1.2.4 on Mac Lion


Challenge

Installing JDeveloper 11.1.2.4 on a MAC Lion

Context

Mac: 10.7.5
Jdeveloper: 11.1.2.4.0
Java: 1.7.0_17


Solution

I encountered 2 problems during installation:

  1. In the Installation wizard, when you use Custom instead of Typical, you need to find the correct Java version yourself.  If you use Typical, the default Java is set per default.
  2. When trying to run the WebLogic Server for the first time, I receive the following output:
    [Waiting for the domain to finish building...]
    
    [03:54:51 PM] Creating Integrated Weblogic domain...
    
    [03:55:21 PM] Extending Integrated Weblogic domain...
    
    [03:55:29 PM] Integrated Weblogic domain processing completed successfully.
    
    *** Using HTTP port 7101 ***
    
    *** Using SSL port 7102 ***
    
    /Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/bin/startWebLogic.sh
    
    [waiting for the server to complete its initialization...]
    .
    .
    JAVA Memory arguments: -Xms256m -Xmx512m
    .
    Unrecognized option: -jrockit
    
    Error: Could not create the Java Virtual Machine.
    
    Error: A fatal exception has occurred. Program will exit.
    
    WLS Start Mode=Development
    .
    
    CLASSPATH=/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.jdbc_11.1.1/ojdbc6dms.jar:/Users/filiphuysmans/programs/JDev111240/patch_wls1035/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/Users/filiphuysmans/programs/JDev111240/patch_jdev1112/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/lib/tools.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/weblogic_sp.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/weblogic.jar:/Users/filiphuysmans/programs/JDev111240/modules/features/weblogic.server.modules_10.3.5.0.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/webservices.jar:/Users/filiphuysmans/programs/JDev111240/modules/org.apache.ant_1.7.1/lib/ant-all.jar:/Users/filiphuysmans/programs/JDev111240/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar:/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.jrf_11.1.1/jrf.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/common/derby/lib/derbyclient.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/xqrl.jar
    .
    PATH=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/bin:/Users/filiphuysmans/programs/JDev111240/modules/org.apache.ant_1.7.1/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/jre/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/bin:/usr/bin:/bin:/usr/sbin:/sbin
    .
    ***************************************************
    *  To start WebLogic Server, use a username and   *
    *  password assigned to an admin-level user.  For *
    *  server administration, use the WebLogic Server *
    *  console at http://hostname:port/console        *
    ***************************************************
    starting weblogic with Java version:
    Starting WLS with line:
    /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/bin/java -jrockit   -Xms256m -Xmx512m -Dweblogic.Name=DefaultServer -Djava.security.policy=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/weblogic.policy -Djavax.net.ssl.trustStore=/var/tmp/trustStore875832875455889226.jks -Dhttp.proxyHost=proxy.iconos.be -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16|127.0.0.1|localhost|*.localhost|localhost.localdomain|::1|10.99.9.23|Filips-MacBook-Pro-2.local -Dhttps.proxyHost=proxy.iconos.be -Dhttps.proxyPort=8080 -Doracle.jdeveloper.adrs=true -Dweblogic.nodemanager.ServiceEnabled=true  -Xverify:none  -da -Dplatform.home=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3 -Dwls.home=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server -Dweblogic.home=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server  -Djps.app.credential.overwrite.allowed=true -Dcommon.components.home=/Users/filiphuysmans/programs/JDev111240/oracle_common -Djrf.version=11.1.1 -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger -Ddomain.home=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain -Djrockit.optfile=/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.jrf_11.1.1/jrocket_optfile.txt -Doracle.server.config.dir=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/servers/DefaultServer -Doracle.domain.config.dir=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig  -Digf.arisidbeans.carmlloc=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/carml  -Digf.arisidstack.home=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/arisidprovider -Doracle.security.jps.config=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/jps-config.xml -Doracle.deployed.app.dir=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/servers/DefaultServer/tmp/_WL_user -Doracle.deployed.app.ext=/- -Dweblogic.alternateTypesDirectory=/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.ossoiap_11.1.1,/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.oamprovider_11.1.1 -Djava.protocol.handler.pkgs=oracle.mds.net.protocol  -Dweblogic.jdbc.remoteEnabled=false -Dwsm.repository.path=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/oracle/store/gmds   -Dweblogic.management.discover=true  -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/Users/filiphuysmans/programs/JDev111240/patch_wls1035/profiles/default/sysext_manifest_classpath:/Users/filiphuysmans/programs/JDev111240/patch_jdev1112/profiles/default/sysext_manifest_classpath  weblogic.Server
    
    Unrecognized option: -jrockit
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
    Process exited.
    
2 things go wrong here:
  • He tries to use the -jrockit VM-type.
  • There is no setting for the PermGenSpace
To solve this problem, perform the following steps:
  • Go to the domain directory to find the setDomainEnv.sh file.
    This file can be found in <your home directory>/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/bin
  • Find the line with 'SUN_JAVA_HOME=""' and change/modify it to
      • SUN_JAVA_HOME=$BEA_JAVA_HOME
      • JAVA_VENDOR=Sun
      • export SUN_JAVA_HOME JAVA_VENDOR
  • Save the file and try to start the WLS Server