我正在为一些客户开发JEE6项目,他让我创建了一个非常简单的电子商务商店.我不太熟悉在线汇款,我想让客户能够将资金转账到我的银行账户(直接银行账户),然后再将他们购买的产品(Classic e-shop)邮寄给他们.我对付款网关或结账系统的工作方式了解不多.我想知道是否有人能给我一些关于我开始进入电子商务领域需要知道什么的提示?如果我能清除一些我心中的疑虑,我也会很高兴:
我在JEE6编程,是否需要任何API才能进行银行转账?
我是否需要第三方软件?如果是这样,您能推荐我使用其中一种软件吗?
电子支付的第三方软件如何运作?
在JEE6应用程序中集成第三方支付软件的过程是否复杂?
我使用glassfish V3.0 app服务器.电子支付涉及的是否有任何限制.
我道歉,如果有些疑点听起来有些奇怪或与主题无关,但正如我所说,我对电子商务话题没有经验,我觉得有点迷茫.
我会感激一些帮助.

我从第一年开始帮助一位朋友准备他的Java考试.老师要求他们创建一种可以将音乐家投射到诗人的方法.
没有人知道该怎么做.在思考了一段时间之后,我得出的结论是,不可能这样做(ClassCastException),因为Musician和Poet共享一个接口的事实不足以将它们转移到另一个接口上.
我认为只有在相同的继承链中才有可能.
现在我有三个问题:
当我在eclipse中创建一个新项目时,它会自动为我创建一个index.jsp页面,我不希望起始页面是.jsp,我希望它是一个.xhtml这就是我在网上做的.XML:
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>myStartPage.xhtml</welcome-file>
</welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)
当我在localhost中运行项目时,上面的代码不允许我将页面myStartPage.xhtml看作第一页.
我应该如何修改它以便浏览器为我显示起始页面.此外,我不想使用任何网址模式.这是强制性的吗?(我尝试删除该标记,但它没有构建).
当使用 hibernate 连接到 MySQLDB 并添加数据时,我遇到了一个非常奇怪的问题。
这是我得到的错误:
未找到 JDBC 驱动程序类:com.mysql.jdbc.Driver
这就是我的 hibernate.cfg.xml 的样子
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/fpa-webapp</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
</session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)
我不明白为什么当我导航到应用程序时会看到 500 错误;它说找不到驱动程序。
HTTP 错误 500
访问 /fpa-webapp/ 时出现问题。原因:
Run Code Online (Sandbox Code Playgroud)Exception constructing service 'ValueEncoderSource': Error invoking服务构建器方法 org.apache.tapestry5.services.TapestryModule.buildValueEncoderSource(Map, InvalidationEventHub) (位于 TapestryModule.java:2287)(对于服务“ValueEncoderSource”):调用服务贡献方法 org.apache.tapestry5.hibernate.HibernateModule 时出错。贡献ValueEncoderSource(MappedConfiguration,boolean,HibernateSessionSource,Session,TypeCoercer,PropertyAccess,LoggerSource):构造服务'HibernateSessionSource'时出现异常:调用服务构建器方法org.apache.tapestry5.hibernate.HibernateCoreModule.buildHibernateSessionSource(Logger,List,RegistryShutdownHub)时出错(位于HibernateCoreModule) .java:123)(对于服务“HibernateSessionSource”):找不到 JDBC 驱动程序类:com.mysql.jdbc.Driver
我确信驱动程序位于类路径中。
可能是什么?
我使用JSF的2.0标准转换器标签来格式化一些数字输出作为货币.但我有一点问题,我不知道如何将欧元符号放在输出的末尾.
这就是我做的:
<h:outputText value="#{payment.amount}">
<f:convertNumber type="currency" currencySymbol="€"/>
</h:outputText>
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
€15.55
但是所需的输出是:
15,55€
有人可以就如何解决这个小问题给我建议吗?
我使用基于JDBC表单的安全领域,我想实现注销,但是当我点击链接时,我看到了这个异常:
java.lang.RuntimeException:java.security.AccessControlException:access denied(java.lang.reflect.ReflectPermission suppressAccessChecks)...由以下引起:java.security.AccessControlException:access denied(java.lang.reflect.ReflectPermission suppressAccessChecks)
这是我为执行loggout而创建的EJB:
@Stateless(name = "ejbs/SessionSupportEJBImpl")
@DeclareRoles({"administrators","users"})
public class SessionSupportEJBImpl implements SessionSupportEJB {
@PermitAll
public void releaseUserState() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
.getExternalContext().getSession(false);
if (session != null) {
session.invalidate();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我从一个支持bean调用它:
@Named("logoutBB")
@RequestScoped
public class LogoutBean {
@EJB
private SessionSupportEJB sessionSupportEJB;
public String logout() {
sessionSupportEJB.releaseUserState();
return "index.xhtml?faces-redirect=true";
}
}
Run Code Online (Sandbox Code Playgroud)
这里应该触发它的标记:
<h:form>
<h:commandLink value="LOGOUT" action="#{logoutBB.releaseUserState}"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
我的怀疑是:
如何使注销功能起作用?
是否必须始终在我的EJB上使用ejbs安全注释来允许访问?(使用安全领域时)
我应该用servlet代替EJB吗?
这种方法是错误的,我应该尝试其他注销吗?
我正在使用JAX-WS对基于SOAP的Web服务进行一些研究,我发现了解客户端部分非常复杂.如果有人可以帮我解释一些主题,我会非常感激.我正在使用SOA书籍和Google,但我真的很困惑,所以我想在这里我可以得到更准确的答案,专注于我需要的东西.
因此,我们可以以同步和异步方式与Web服务进行通信.同步通信缺乏双方必须等待,直到处理结束.
异步客户端允许我们使用2种编程模型以异步方式进行通信:1-回调和2-轮询
在谈论异步通信时,我也明白生产者(Web服务)应该有一种方法,一旦处理完成就找到消费者(客户端).这就是为什么我们要解决.
还有一件事.Dispatch API也让我很困惑.因为他们一直在谈论动态客户.
我正在使用一些System.out.print本身有一些命令的遗留代码.我的eCobertura插件显示这条线为红色,所以我想对它们进行单元测试.
这里的计算器,我发现了一种单元测试控制台输出这是我的东西是很有趣的.
我是这样做的:
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
}
@After
public void cleanUpStreams() {
System.setOut(null);
}
@Test
public void out() {
System.out.print("Some message from the system");
assertEquals("Some message from the system", outContent.toString());
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,测试变得很好,但是当我再次运行代码覆盖率插件时,我收到以下消息:
网络"Thread-0"中的异常java.lang.NullPointerException net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:186)at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:267) )at java.slang.Thread.run(Thread.java:662)的net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:31)
我有些疑惑:
System.out.print()'s?从一个月前开始,我正在努力学习宁静的网络服务.现在我练习了语法并理解了概念,我决定创建一个包含EJB,JPA和REST的非常简单的企业应用程序.我正在努力尝试了解组织这种系统的最佳方法.如果有经验的人可以给我一些关于什么是最佳实践的提示,我会非常感激,以及如何解决我当前的问题.
我来告诉你这个形象吧.抱歉,我无法获得更好的分辨率(使用Ctrl +鼠标向上滚动缩放):

正如您所看到的,这是一个非常简单的企业应用程序,它有2个模块.
此应用程序不使用CDI(我希望在没有CDI帮助的情况下实现我的目标)
当某个客户端(任何可互操作的客户端)发送带有某些参数的@GET时,REST服务应将这些参数传递给EJB模块,该模块将在数据库中搜索并发回适当的数据.最后,服务将在JAXB的帮助下自动编组,并将.XML发送回客户端.
我的问题如下:
我正在使用JAX-RS学习REST,这个疑问刚出现在我脑海中:
由于Web服务旨在为以不同编程语言编写的可互操作的客户端提供服务,并且客户端仅使用URL来访问服务功能; 用于将文件上载到公共数据库的Web服务怎么样?
它会保存吗?如果Web服务无法控制客户端如何执行验证,那么Web服务如何避免被垃圾邮件超载?上传方法看起来与此类似:
@Path("/upload/{something}")
@Consumes("multipart/form-data")
@POST
public void uploadSomething(...) {
//...
}
Run Code Online (Sandbox Code Playgroud)
所以我怀疑上传是否是REST服务可以安全做的好事?