Web services 通过http连接到远程数据库的富客户端(swing)应用程序
我有一个本地客户端j2se应用程序,后端是derby(javadb)数据库,dao是jpa eclipselink。 如何将这些数据库pojo发送到与tomcat服务器上的spring(jsp)应用程序链接的远程数据库 简单地说,这是一个带有swing的富客户端,它连接到tomcat部署的web应用程序。客户端应接收数据,并通过HTTP请求将数据发送到服务的服务器端, 最好的解决方案是什么 01)使用Eclipselink通过套接字直接连接数据库/事务 02)网络服务?? 03)只需将post请求发送到SpringWeb应用程序,并将其转换为POJO并持久化到数据库Web services 通过http连接到远程数据库的富客户端(swing)应用程序,web-services,http,jakarta-ee,java,Web Services,Http,Jakarta Ee,Java,我有一个本地客户端j2se应用程序,后端是derby(javadb)数据库,dao是jpa eclipselink。 如何将这些数据库pojo发送到与tomcat服务器上的spring(jsp)应用程序链接的远程数据库 简单地说,这是一个带有swing的富客户端,它连接到tomcat部署的web应用程序。客户端应接收数据,并通过HTTP请求将数据发送到服务的服务器端, 最好的解决方案是什么 01)使用Eclipselink通过套接字直接连接数据库/事务 02)网络服务?? 03)只需将post请
我如何做到这一点呢?免责声明我不建议您将应用程序从Spring移植到EJB。尽管人们喜欢将它们单独作为一个或另一个进行比较,但您可以同时使用它们。这是你的应用程序,你可以想做什么就做什么:) 如果需要,您不必使用Web服务。您还可以将OpenEJB war文件放到Tomcat中,并创建一个远程EJB来来回发送数据 一旦你加入OpenEJB,你就可以在你的应用程序中放入一个远程@Stateless bean,如下所示:
@Stateless
@Remote
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");
InitialContext ctx = new InitialContext(p);
MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
然后从Swing应用程序中查找并通过HTTP执行,如下所示:
@Stateless
@Remote
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");
InitialContext ctx = new InitialContext(p);
MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
客户端您只需要openejb war文件和您自己的类中的openejb-Client.jar和javaee-api.jar
因为它已经是一个Spring应用程序,所以不要费心尝试使用@PersistenceContext
获取对EntityManager的引用,以便EJB可以使用它。只需了解如何通过任何可能的方式将Spring创建(或您创建)的EntityManagerFactory公开给EJB即可。直接、难看但有效的方法是MyBean类上的一个静态方法和设置它的一点启动逻辑。您只需要使用EJB进行远程处理,因此不需要更高级的集成
如果您确实需要用于非java通信的web服务或其他内容,您可以将@WebService
添加到bean的顶部,然后它将具有WSDL以及为其生成的所有内容:
@Stateless
@Remote
@WebService(portName = "MyBeanPort",
serviceName = "MyBeanService",
targetNamespace = "http://superbiz.org/wsdl"
endpointInterface = "org.superbiz.MyBeanRemote")
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
然后还可以将同一个bean用作web服务,如:
Service service = Service.create(
new URL("http://tomcatserver:8080/MyBeanImpl?wsdl"),
new QName("http://superbiz.org/wsdl", "MyBeanService"));
assertNotNull(service);
MyBeanRemote myBean = service.getPort(MyBeanRemote.class);
这两种方法都是通过http实现的,但是web服务方法会慢一点,因为它不是二进制协议。免责声明我建议您将应用程序从Spring移植到EJB。尽管人们喜欢将它们单独作为一个或另一个进行比较,但您可以同时使用它们。这是你的应用程序,你可以想做什么就做什么:) 如果需要,您不必使用Web服务。您还可以将OpenEJB war文件放到Tomcat中,并创建一个远程EJB来来回发送数据 一旦你加入OpenEJB,你就可以在你的应用程序中放入一个远程@Stateless bean,如下所示:
@Stateless
@Remote
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");
InitialContext ctx = new InitialContext(p);
MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
然后从Swing应用程序中查找并通过HTTP执行,如下所示:
@Stateless
@Remote
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");
InitialContext ctx = new InitialContext(p);
MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
客户端您只需要openejb war文件和您自己的类中的openejb-Client.jar和javaee-api.jar
因为它已经是一个Spring应用程序,所以不要费心尝试使用@PersistenceContext
获取对EntityManager的引用,以便EJB可以使用它。只需了解如何通过任何可能的方式将Spring创建(或您创建)的EntityManagerFactory公开给EJB即可。直接、难看但有效的方法是MyBean类上的一个静态方法和设置它的一点启动逻辑。您只需要使用EJB进行远程处理,因此不需要更高级的集成
如果您确实需要用于非java通信的web服务或其他内容,您可以将@WebService
添加到bean的顶部,然后它将具有WSDL以及为其生成的所有内容:
@Stateless
@Remote
@WebService(portName = "MyBeanPort",
serviceName = "MyBeanService",
targetNamespace = "http://superbiz.org/wsdl"
endpointInterface = "org.superbiz.MyBeanRemote")
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
然后还可以将同一个bean用作web服务,如:
Service service = Service.create(
new URL("http://tomcatserver:8080/MyBeanImpl?wsdl"),
new QName("http://superbiz.org/wsdl", "MyBeanService"));
assertNotNull(service);
MyBeanRemote myBean = service.getPort(MyBeanRemote.class);
这两种方法都是通过http实现的,但是web服务方法会稍微慢一点,因为它不是二进制协议