我使用两个容器创建了一个web应用程序:tomcat,托管web-app和mysql(来自官方mysql映像)for db。好吧,我必须在db中插入一个WebRTC SDP的特定属性(a =指纹线);
Here有一个WebRTC SDP的例子:我已经解析了它并恢复了" a =指纹"线。
我已经使用这个javascript函数对其进行了解析,其中我删除了初始" a =指纹:"行的字符串和尾随空格。
function FindFingerprint(jsep) {
var lines = jsep.sdp.split("\n");
var line = -1;
for (var i = 0; i < lines.length; i++) {
if (lines[i].indexOf("a=fingerprint") === 0) {
line = i;
fingerprint_to_send = lines[i].replace(/a=fingerprint:/,"");
finge= fingerprint_to_send.replace(/\s+$/, '');
return finge;
}
}
if (line === -1) {
console.debug("Could not find the a=fingeprint line for", media);
return;
}
}
然后我用这个servlet存储到DB中。
这是在mysql中插入该行的servlet代码:
if (action.equals("InsertSDPLine")) {
HttpSession session1= request.getSession();
// String username = (String) session1.getAttribute("username");
// String password = (String) session1.getAttribute("password");
// Utente ut= um.loginUsername(username);
Long user_id = (Long) session1.getAttribute("user_id");
// Utente ut = um.login(username, password);
Utente ut = um.loginByID(user_id);
Long u_id = ut.getId();
SessionFactory sf = HibernateUtil.createSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
SDPLines sdp = new SDPLines(request.getParameter("sdpline"));
sdp.setUtente(ut);
session.save(sdp);
session.getTransaction().commit();
session.close();
}
使用SDPLines实体:
package entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "sdplines", catalog = "shine4")
public class SDPLines implements java.io.Serializable {
@Id
@GeneratedValue
private int id;
@Column(name="value")
private String value;
@ManyToOne
@JoinColumn(name="u_id")
private Utente utente;
public SDPLines() {
}
public SDPLines(String value) {
this.value=value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Utente getUtente() {
return utente;
}
public void setUtente(Utente utente) {
this.utente = utente;
}
}
我使用Hibernate。
我注意到我要插入的值是103个字符。
如果您知道WebRTC的性质,则会有第二个通信对等体:我想从DB检查插入的行,并将其值与他看到的(他的)RemoteSDP的a =指纹值进行比较。
问题如下:如果我尝试从数据库中选择我刚刚插入的行(103个字符),我没有从查询返回的行!
我试过用我写的一些测试字符串和所有作品。
你能解释一下为什么会出现这个问题吗?
这是一个servlet代码,用于控制HTTP请求中的值是否等于db中与THAT用户相关的现有值。
UtenteModel um= new UtenteModel();
SDPLineModel sdpmodel= new SDPLineModel();
if (action.equals("CheckFingerprint")) {
String fingerprint = (String) request.getParameter("fingerprint");
HttpSession session1= request.getSession();
Long user_id = (Long) session1.getAttribute("user_id");
Utente ut = um.loginByID(user_id);
SDPLines sdpline = sdpmodel.findFingerprintNew(fingerprint, user_id);
if (sdpline == null) {
String message = "NOT_VALID";
System.out.println("Fingerprint NON trovata! ");
response.getOutputStream().print(message);
response.getOutputStream().flush();
response.getOutputStream().close();
}
else {
String message = "VALID";
System.out.println("Fingerprint trovata! ");
response.getOutputStream().print(message);
response.getOutputStream().flush();
response.getOutputStream().close();
}
}
简而言之,我在db中插入此值,并在检查此值是否存在后立即与该用户相关,但是servlet设置了NOT_VALID响应!
[编辑]我已经注意到,如果我在&#34;几次&#34;之后检查插入值的db中的存在,它会返回我所需行的有效存在。
为什么要延迟?以及如何解决这个问题,因为我想在WebRTC信令路径中执行这个控制?