|
31 | 31 | import com.fasterxml.jackson.annotation.JsonView; |
32 | 32 | import io.quarkus.hibernate.orm.panache.PanacheEntity; |
33 | 33 | import io.quarkus.narayana.jta.QuarkusTransaction; |
| 34 | +import io.quarkus.panache.common.Parameters; |
34 | 35 | import io.vertx.mutiny.core.eventbus.EventBus; |
35 | 36 | import jakarta.annotation.Nullable; |
36 | 37 | import jakarta.enterprise.context.ApplicationScoped; |
|
42 | 43 | import jakarta.persistence.FetchType; |
43 | 44 | import jakarta.persistence.JoinColumn; |
44 | 45 | import jakarta.persistence.ManyToOne; |
| 46 | +import jakarta.persistence.NamedQueries; |
| 47 | +import jakarta.persistence.NamedQuery; |
45 | 48 | import jakarta.persistence.OneToMany; |
46 | 49 | import jakarta.persistence.OneToOne; |
47 | 50 | import jakarta.persistence.PostPersist; |
|
56 | 59 |
|
57 | 60 | @Entity |
58 | 61 | @EntityListeners(DiscoveryNode.Listener.class) |
| 62 | +@NamedQueries({ |
| 63 | + @NamedQuery( |
| 64 | + name = "DiscoveryNode.byTypeWithName", |
| 65 | + query = "from DiscoveryNode where nodeType = :nodeType and name = :name") |
| 66 | +}) |
59 | 67 | public class DiscoveryNode extends PanacheEntity { |
60 | 68 |
|
61 | 69 | public static final String NODE_TYPE = "nodeType"; |
@@ -129,33 +137,48 @@ public static List<DiscoveryNode> findAllByNodeType(NodeType nodeType) { |
129 | 137 | } |
130 | 138 |
|
131 | 139 | public static DiscoveryNode environment(String name, NodeType nodeType) { |
132 | | - return QuarkusTransaction.joiningExisting() |
133 | | - .call( |
134 | | - () -> { |
135 | | - DiscoveryNode node = new DiscoveryNode(); |
136 | | - node.name = name; |
137 | | - node.nodeType = nodeType.getKind(); |
138 | | - node.labels = new HashMap<>(); |
139 | | - node.children = new ArrayList<>(); |
140 | | - node.target = null; |
141 | | - node.persist(); |
142 | | - return node; |
143 | | - }); |
| 140 | + var kind = nodeType.getKind(); |
| 141 | + return DiscoveryNode.<DiscoveryNode>find( |
| 142 | + "#DiscoveryNode.byTypeWithName", |
| 143 | + Parameters.with("nodeType", kind).and("name", name)) |
| 144 | + .firstResultOptional() |
| 145 | + .orElseGet( |
| 146 | + () -> |
| 147 | + QuarkusTransaction.joiningExisting() |
| 148 | + .call( |
| 149 | + () -> { |
| 150 | + DiscoveryNode node = new DiscoveryNode(); |
| 151 | + node.name = name; |
| 152 | + node.nodeType = kind; |
| 153 | + node.labels = new HashMap<>(); |
| 154 | + node.children = new ArrayList<>(); |
| 155 | + node.target = null; |
| 156 | + node.persist(); |
| 157 | + return node; |
| 158 | + })); |
144 | 159 | } |
145 | 160 |
|
146 | 161 | public static DiscoveryNode target(Target target, NodeType nodeType) { |
147 | | - return QuarkusTransaction.joiningExisting() |
148 | | - .call( |
149 | | - () -> { |
150 | | - DiscoveryNode node = new DiscoveryNode(); |
151 | | - node.name = target.connectUrl.toString(); |
152 | | - node.nodeType = nodeType.getKind(); |
153 | | - node.labels = new HashMap<>(target.labels); |
154 | | - node.children = null; |
155 | | - node.target = target; |
156 | | - node.persist(); |
157 | | - return node; |
158 | | - }); |
| 162 | + var kind = nodeType.getKind(); |
| 163 | + var connectUrl = target.connectUrl.toString(); |
| 164 | + return DiscoveryNode.<DiscoveryNode>find( |
| 165 | + "#DiscoveryNode.byTypeWithName", |
| 166 | + Parameters.with("nodeType", kind).and("name", connectUrl)) |
| 167 | + .firstResultOptional() |
| 168 | + .orElseGet( |
| 169 | + () -> |
| 170 | + QuarkusTransaction.joiningExisting() |
| 171 | + .call( |
| 172 | + () -> { |
| 173 | + DiscoveryNode node = new DiscoveryNode(); |
| 174 | + node.name = connectUrl; |
| 175 | + node.nodeType = kind; |
| 176 | + node.labels = new HashMap<>(target.labels); |
| 177 | + node.children = null; |
| 178 | + node.target = target; |
| 179 | + node.persist(); |
| 180 | + return node; |
| 181 | + })); |
159 | 182 | } |
160 | 183 |
|
161 | 184 | @Override |
|
0 commit comments