【发布时间】:2016-02-11 04:28:07
【问题描述】:
下面是我的豆
package com.dunkul.stateless;
import javax.ejb.Stateless;
import com.dunkul.entity.Book;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class LibraryPersistentBean implements LibraryPersistentBeanRemote {
public LibraryPersistentBean(){
}
@PersistenceContext(unitName="EjbComponentPU")
private EntityManager entityManager;
public void addBook(Book book) {
entityManager.persist(book);
}
public List<Book> getBooks() {
return entityManager.createQuery("From Book").getResultList();
}
}
//---------------------------------------------------------------------
package com.dunkul.stateless;
import javax.ejb.Remote;
import com.dunkul.entity.Book;
import java.util.List;
@Remote
public interface LibraryPersistentBeanRemote {
void addBook(Book bookName);
List<Book> getBooks();
}
//----------------------------------------------------------
实体类
package com.dunkul.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="books")
public class Book implements Serializable{
private int id;
private String name;
public Book(){
}
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//-------------------------------------------------
persistance.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.0">
<persistence-unit name="EjbComponentPU" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>TestDS</jta-data-source>
<class>com.dunkul.entity.Book</class>
</persistence-unit>
</persistence>
//--------------------------------------------------------------
客户端.java
package com.dunkul.client;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.dunkul.entity.Book;
import com.dunkul.stateless.LibraryPersistentBeanRemote;;
public class ClientEJB {
LibraryPersistentBeanRemote lib;
public static void main(String[] args) throws Exception {
new ClientEJB().callEjb();
}
private void callEjb() throws Exception {
// TODO Auto-generated method stub
Hashtable<String, String> ctxProps = new Hashtable<String, String>();
ctxProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
ctxProps.put(Context.PROVIDER_URL, "http://localhost:8082/tomee/ejb");
ctxProps.put(Context.URL_PKG_PREFIXES,"org.apache.naming");
ctxProps.put("openejb.descriptors.output", "true");
InitialContext context = new InitialContext(ctxProps);
lib = (LibraryPersistentBeanRemote)context.lookup("LibraryPersistentBeanRemote");
String bookName = "Sonali";
Book newBook = new Book();
// newBook.setId(1);
// newBook.setName(bookName);
// lib.addBook(newBook);
List ls = lib.getBooks();
for (Iterator iterator = ls.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
System.out.println((String)object);
}
}
}
I am getting following error
严重:EjbTransactionUtil.handleSystemException:“在字符 1 处遇到“From”,但预期为:[“DELETE”、“SELECT”、“UPDATE”]。”在解析 JPQL “From Book”时。请参阅嵌套堆栈跟踪 原始解析错误。 org.apache.openjpa.persistence.ArgumentException:“在字符 1 处遇到“From”,但预期:[“DELETE”、“SELECT”、“UPDATE”]。”尽管 解析JPQL“来自书”。请参阅嵌套堆栈跟踪以了解原始解析错误。
【问题讨论】:
标签: jpa ejb openjpa apache-tomee