Ubuntu Glassfish 4.1和MariaDB

Ubuntu Glassfish 4.1和MariaDB,ubuntu,netbeans,glassfish,mariadb,glassfish-4.1,Ubuntu,Netbeans,Glassfish,Mariadb,Glassfish 4.1,我正在使用Netbeans 8.2、Glassfish 4.1和MariaDB开发一个企业应用程序,所有这些都在Ubuntu 18.04上 但是,在与数据库建立所有连接后,Glassfish返回此异常: Internal Exception: java.sql.SQLException: Unknown system variable 'OPTION' 正如我所看到的,SET OPTION命令在MySQL 5.1中被弃用,最后在MySQL 5.6中被删除。MariaDB在他们的10.0版本中也

我正在使用Netbeans 8.2、Glassfish 4.1和MariaDB开发一个企业应用程序,所有这些都在Ubuntu 18.04上

但是,在与数据库建立所有连接后,Glassfish返回此异常:

Internal Exception: java.sql.SQLException: Unknown system variable 'OPTION'
正如我所看到的,
SET OPTION
命令在MySQL 5.1中被弃用,最后在MySQL 5.6中被删除。MariaDB在他们的10.0版本中也做了同样的事情。glassfish4.1似乎仍然使用这个命令

这就引出了两个主要的解决方案:

  • 升级Glassfish:Glassfish 4.1.1非常不稳定,大部分时间都不工作。新版本(5.0.x)与Netbeans 8.2不兼容
  • 降级MariaDB:MariaDB 5.5在Ubuntu18.04中不可用(在他们的网站上,它的最后一个官方版本是14.04)
  • 降级Ubuntu:我可以将我的操作系统降级到14.04,但我希望这是我最后的选择

有人能给我一些建议吗?谢谢

根据我们的经验,Glassfish的可用性和稳定性显著下降,这是一个耻辱。是基于Glassfish来源的外部维护和最新版本,但有许多改进。尽管他们已经停止了GF4对非付费客户的发展,但他们仍然这样做。我鼓励你测试一下,如果你喜欢Glassfish,你会喜欢Payara:)

在我们的经验中,Glassfish的可用性和稳定性显著下降,这是一个耻辱。是基于Glassfish来源的外部维护和最新版本,但有许多改进。尽管他们已经停止了GF4对非付费客户的发展,但他们仍然这样做。我鼓励您测试它,如果您喜欢Glassfish,您会喜欢Payara:)

正确的做法是使用支持现代SQL语法的软件版本。即使这不是最简单的解决方案,它也很可能在未来得到回报


解决此问题的另一种方法是,将应用程序和数据库置于中间,并将其配置为将
SET选项
SQL转换为正确的
SET
表单。这可以通过专门针对这种情况的方法来实现

下面是一个小型SQL转换服务的MaxScale配置,它将
SET选项转换为
SET

[maxscale]
threads=auto

[my-database]
type=server
address=hostname-of-my-server
port=3306
protocol=MariaDBBackend

[database-monitor]
type=monitor
module=mariadbmon
servers=my-database
user=<username used to monitor the server>
passwd=<password for the user>
monitor_interval=5000

[replace-option]
type=filter
module=regexfilter
match=SET OPTION
replace=SET

[routing-service]
type=service
router=readconnroute
servers=my-database
user=<username used to monitor the server>
passwd=<password for the user>
filters=replace-option

[routing-listener]
type=listener
service=routing-service
protocol=MariaDBClient
port=3306
[maxscale]
线程=自动
[我的数据库]
类型=服务器
地址=我的服务器的主机名
端口=3306
协议=mariadbackend
[数据库监视器]
类型=监视器
模块=mariadbmon
服务器=我的数据库
使用者=
passwd=
监测间隔=5000
[替换选项]
类型=过滤器
模块=regexfilter
匹配=设置选项
替换=设置
[路由服务]
类型=服务
路由器=readconnroute
服务器=我的数据库
使用者=
passwd=
过滤器=更换选项
[路由侦听器]
类型=侦听器
服务=路由服务
协议=MariaDBClient
端口=3306

正确的做法是使用支持现代SQL语法的软件版本。即使这不是最简单的解决方案,它也很可能在未来得到回报


解决此问题的另一种方法是,将应用程序和数据库置于中间,并将其配置为将
SET选项
SQL转换为正确的
SET
表单。这可以通过专门针对这种情况的方法来实现

下面是一个小型SQL转换服务的MaxScale配置,它将
SET选项转换为
SET

[maxscale]
threads=auto

[my-database]
type=server
address=hostname-of-my-server
port=3306
protocol=MariaDBBackend

[database-monitor]
type=monitor
module=mariadbmon
servers=my-database
user=<username used to monitor the server>
passwd=<password for the user>
monitor_interval=5000

[replace-option]
type=filter
module=regexfilter
match=SET OPTION
replace=SET

[routing-service]
type=service
router=readconnroute
servers=my-database
user=<username used to monitor the server>
passwd=<password for the user>
filters=replace-option

[routing-listener]
type=listener
service=routing-service
protocol=MariaDBClient
port=3306
[maxscale]
线程=自动
[我的数据库]
类型=服务器
地址=我的服务器的主机名
端口=3306
协议=mariadbackend
[数据库监视器]
类型=监视器
模块=mariadbmon
服务器=我的数据库
使用者=
passwd=
监测间隔=5000
[替换选项]
类型=过滤器
模块=regexfilter
匹配=设置选项
替换=设置
[路由服务]
类型=服务
路由器=readconnroute
服务器=我的数据库
使用者=
passwd=
过滤器=更换选项
[路由侦听器]
类型=侦听器
服务=路由服务
协议=MariaDBClient
端口=3306

关于你的第一点:你知道吗?这是GF的一个增强版,效果非常好。他们停止了4.x版本的开发,但该版本仍然可以下载。我不使用MySQL,所以我不知道你提到的问题是否解决了,但在我看来,这绝对值得一试,因为服务器虽然是一个玻璃鱼,但比原来的GF要好得多。谢谢朋友,这就成功了。如果你想用这个评论来回答,我会把它标记为接受答案:)关于你的第一点:你知道吗?这是GF的一个增强版,效果非常好。他们停止了4.x版本的开发,但该版本仍然可以下载。我不使用MySQL,所以我不知道你提到的问题是否解决了,但在我看来,这绝对值得一试,因为服务器虽然是一个玻璃鱼,但比原来的GF要好得多。谢谢朋友,这就成功了。如果您想使用此注释进行回答,我会将其标记为接受答案:)