Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 842
  • Last Modified:

out of memory error

hi

i get an "Out of memory" error. I use string buffer. how can i solve this.
results is an instance of NamingEnumeration
my code:

StringBuffer sb = new StringBuffer();
while (results.hasMore()) {
//SearchResult res = (SearchResult) results.next();
//Attributes attrs = res.getAttributes();
if (results.hasMore())
sb.append(attrs1.get("member").toString().substring(4) + ",");
else
sb.append(attrs1.get("member").toString().substring(4));
}
System.out.println(sb.toString());

thnx in advance
sb
0
ScarletBlue
Asked:
ScarletBlue
  • 5
  • 4
  • 2
  • +1
1 Solution
 
girionisCommented:
 At a first glance you do not seem to get the next object of the result so it loops forever.
0
 
girionisCommented:
 You need to call results.next();
0
 
TimYatesCommented:
StringBuffer sb = new StringBuffer();
while( true )
{
    SearchResult res = (SearchResult) results.next();
    Attributes attrs = res.getAttributes();
    if (results.hasMore())
        sb.append(attrs1.get("member").toString().substring(4) + ",");
    else
    {
        sb.append(attrs1.get("member").toString().substring(4));
        break ;
    }
}
System.out.println(sb.toString());


or something...
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
grim_toasterCommented:
Your code looked as if you were getting there.  Your commented out lines of code are what you will need, plus with one other small change (use attrs instead of attrs1):

StringBuffer sb = new StringBuffer();
while (results.hasMore()) {
SearchResult res = (SearchResult) results.next();
Attributes attrs = res.getAttributes();
if (results.hasMore())
sb.append(attrs.get("member").toString().substring(4) + ",");
else
sb.append(attrs.get("member").toString().substring(4));
}
System.out.println(sb.toString());
 
0
 
TimYatesCommented:
> (use attrs instead of attrs1):

That's the bit I missed...heh
0
 
ScarletBlueAuthor Commented:
hi  grim_toaster

When i do put in the commented out lines in...it gives me this error
                java.lang.ClassCastException: java.lang.String
      at com.sasol.iview.LDAPLookup.main(LDAPLookup.java:43)

this error is pointing to SearchResult res = (SearchResult) results.next();

can u help with this
sb
0
 
girionisCommented:
 The object you are receiving is probably of type String, therefore you need to cast it into String instead of SearchResults.

0
 
ScarletBlueAuthor Commented:
I have changed it a bit and this seems to work. It brings back the results I want...
but I got a feeling im doin something wrong.
Do you gurus see anything wrong with this.

DirContext dctx = new InitialDirContext(env);
Attributes attrs = dctx.getAttributes("CN=SAPPortal-Sec-Prod-Admin,OU=SAPPortal Groups,OU=Groups,OU=Core,DC=sasol,DC=com");
StringBuffer sb = new StringBuffer();
while (results.hasMore()) {
if (results.hasMore()){
sb.append(attrs.get("member").toString().substring(4) + ",");
break;
}
results.next();
}
System.out.println(sb.toString());
0
 
girionisCommented:
 It looks fine to me apart from this statement:

> break;

  Why do you have it there?
0
 
ScarletBlueAuthor Commented:
its weird , if i take out the break...it returns the string about 4/5 times...so I would have duplicate results.
when i add in the break..it returns the string just once.


0
 
girionisCommented:
 Yes because you enter the if loop as long as there are more results.
0
 
grim_toasterCommented:
As a question, why do you actually need your loop?  As you are getting the Attributes object outside of the loop, and then reading the same value from it each time.  So the below should work:

DirContext dctx = new InitialDirContext(env);
Attributes attrs = dctx.getAttributes("CN=SAPPortal-Sec-Prod-Admin,OU=SAPPortal Groups,OU=Groups,OU=Core,DC=sasol,DC=com");
System.out.println(attrs.get("member").toString().substring(4));
0
 
ScarletBlueAuthor Commented:
i dont know why i needed the loop either...
thanx grim_toaster, your suggested code works.

thanx for everyone's help

have a great day
scarlet
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

  • 5
  • 4
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now