Java新人,想请教一个问题:上图是代码结构.package com.user.model;import java.io.Serializable;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name="USER")
public class User implements Serializable { private static final long serialVersionUID = -2992495407019337009L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

}服务器端中有实体类User(序列化),package com.user.service;import javax.ejb.Remote;import com.user.model.User;@Remote
public interface UserService { public String saveUser(User user);
public User findUser(int id);
}接口UserService(@Remote),package com.user.service.impl;import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import com.user.model.User;
import com.user.service.UserService;@Stateless(mappedName="UserService")
public class UserServiceBean implements UserService { @PersistenceContext(unitName="test")
private EntityManager entityManager;

public String saveUser(User user) {
entityManager.persist(user);
return user.getUsername();
} public User findUser(int id) {
User user = entityManager.find(User.class, id);
return user;
}}实现UserServiceBean(@statless).SessionBean已经成功发布在GlassFish上.package com.user.manager;import javax.naming.InitialContext;import com.user.model.User;
import com.user.service.UserService;public class UserManager { public static void main(String[] args) throws Exception {
InitialContext initialContext = new InitialContext();
UserService userService = (UserService) initialContext.lookup("UserService");

//Insert record
// User user = new User();
// user.setUsername("Zhangsan");
// userService.saveUser(user);

//Find record
User user = userService.findUser(3);
System.out.println(user.getId() + " " + user.getUsername());
}
}以上是客户端代码.但运行第一部分insert record是传入User实体对象的时候,在服务器端总是空值.以上1,2两条是插入的数据,因为id是自动生成的,但username一直是空值.
May 27, 2017 11:36:23 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
3 wangwu
如果运行第二部分find record时,能查出数据库里的记录.这是什么问题,我哪里做错了,请前辈指教.

解决方案 »

  1.   

    本人完全是自学的,如果问题问得太LOW,也请前辈不吝指教.这个问题我反复试了好几天也没能解决.
      

  2.   

    现在用javaEE的人很少,所以没人解答http://blog.jelastic.com/2013/10/15/remote-access-to-enterprise-java-beans-on-glassfish-server/你访问的不是服务器上的ejb,访问服务器上EJB需要设置InitialContext 参数,就是服务器域名/IP,端口。并采用服务器上的EJB的jndi名
      

  3.   

    首先,谢谢回复.
    我的客户端有配置jndi.properties,按照我前面说的,服务端能够返回实例对象到客户端,客户端也能传参数给服务器端了,但就是实例对象类型的传不了.
      

  4.   

    以下是我的JDNI的属性文件java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
    java.naming.factory.url.pkgs=com.sun.enterprise.naming
    java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
    org.omg.CORBA.ORBInitialHost=192.168.93.8
    org.omg.CORBA.ORBInitialPort=3700
      

  5.   

    你从glassfish管理后台看看ejb的名字,应该更长一些这个说明数据库驱动有问题,看看数据源配置
    May 27, 2017 11:36:23 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
    INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.你做插入的时候,打印一下信息,save是有返回值的
      

  6.   

    试试让UserServiceBean继承Serializable