Sounds like you need to implement the post solve method and hook that implementation into the world. There's source code that demos this in the Breakable demo of the Box2D Testbed demo. I don't know if there's a Java port of the demos but C++ code for demoing breakable behavior is available. If that's not already source you've looked at, I suggest doing so.
Anyways, basically, you implement a post solve method and hook it in to the world. It will then get called with contact information and impulse information. You can interpret that information to identify things like the initial fixture that gets contacted with the fixture of the penetrating body (the bullet or ground or whatever it is you want to fracture your main body by) and the amount of impulse involved. You'll probably want to do something similar to the demo code in terms of calculating the max normal impulse amount (as opposed to the tangent impulse amounts) and only start the break if that max is above a threshold amount.
If you want your separation to occur on the first contact that exceeds your impulse threshold, then you can use the contact information in your post solve method to get out the contact manifold and get a normal for the contact. With the normal you could write an algorithm to essentially follow its path through your main body to determine fixtures in a path of destruction. Those fixtures could be removed and the remaining fixtures on both sides of the path cloned into two new separate bodies and the old body removed. Then give the two new bodies each an impulse less than half of what the original fracturing impulse was along with a little outward impulse to give the separation some velocity. So long as your end combined impulsing don't exceed the original breaking impulse amount, things should look realistic enough.
If you want your separation only to occur after there's one or more fixtures no longer connected to other fixtures — which is what it sounds like based on your edit — I can see using another strategy entirely. Instead of creating the initial breakable object as a single body, I'd try having each fixture be already within its own body and connect adjacent fixtures/bodies using something like a distance joint. This would be computationally more intensive but if on every threshold exceeding impact from another body a body in this collection was destroyed, the simulation would eventually get separating fragments as a natural consequence of no longer having constraints connecting those pieces together anymore. You'd have to try it out on your intended hardware of course to see whether this would be performant enough for your needs.
Taking my own advice, I put together a demo of the latter strategy to see how it actually worked. I didn't use triangles in a circular pattern like you had, but just simply used 400 squares in a 20 × 20 configuration. I also wound up using weld joints instead of distance joints as the weld joints made the simulation look more like that of a whole object getting broken apart by bombs. Each square shape belongs to its own body and each body is joined to it's immediate neighbors with weld joints. The simulation never seemed to go below 60 FPS and I liked the results even without applying any additional impulses to newly separated parts.
Here's a screen capture of what the demo looks like after the large aggregate object has gotten bombed apart:

Admittedly I did this within the Testbed of my own physics engine. The source code for the demo is available online too if that helps — while it's in C++, all the concepts should apply to Java Box2D as well.
Hope this helps.